在尝试使用 Gecko 驱动程序 运行 selenium Grid 代码时获取 "The path to the driver executable must be set by the webdriver.gecko.driver "
Getting "The path to the driver executable must be set by the webdriver.gecko.driver " while try to run selenium Grid code with Gecko driver
我在selenium Grid 的帮助下运行宁基本selenium 代码。
步骤如下:
步骤 1:- 下载了最新版本的 selenium 独立服务器 (3.4.0);
步骤 2:- 使用命令 java - jar <path of selenium standalone server>\selenium-server-standalone-3.4.0.jar -role hub
-> [=68= 创建了 HUB ] 成功;
步骤 3 :- 使用命令 java -jar selenium-server-standalone-3.4.0.jar -role hub -node http://localhost:4444/grid/register
创建节点 -> 运行 成功 ;
第 4 步:- 使用以下代码创建了一个简单的 selenium 程序:
public class ClassName {
public static void main(String args[]) throws InterruptedException, MalformedURLException {
System.setProperty("webdriver.gecko.driver","C:\geckodriver.exe");
DesiredCapabilities cap=DesiredCapabilities.firefox();
cap.setPlatform(Platform.WINDOWS);
cap.setBrowserName("firefox");
URL url = new URL("http://localhost:4444/wd/hub");
WebDriver wd1 = new RemoteWebDriver(url, cap);
wd1.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
wd1.manage().window().maximize();
wd1.get("http://www.clickindia.com/");
wd1.findElement(By.linkText("Post Free Ad")).click();
Thread.sleep(3000);
wd1.findElement(By.linkText("Select category manually")).click();
Thread.sleep(3000);
WebElement country = wd1.findElement(By.id("combo_0"));
Select sel = new Select(country);
sel.selectByVisibleText("Jobs");
}
}
在 运行ning 上面的代码中抛出以下异常:
注意 :如果我 运行 上面的代码没有 remoteDriver 并且作为一个常见的 WebDriver programm 然后它正在工作并且 运行ning 正常。
selenium 独立服务器和 Gecko 文件的位置相同。
Gecko 版本为 v0.16.0
提前致谢
您已将默认配置的节点注册为 java -jar selenium-server-standalone-3.4.0.jar -role hub -node http://localhost:4444/grid/register
。所以你的节点无法处理请求。
可以考虑注册节点配置如下:
java -Dwebdriver.gecko.driver=C:\geckodriver.exe -jar selenium-server-standalone-3.4.0.jar -role node -hub http://localhost:4444/grid/register
你的代码块在我这边工作正常。
错误消息表明 Selenium 在以下位置找不到 GeckoDriver 二进制文件:
- 属于
PATH
环境变量和 的任何位置
- 它无法通过表示 geckodriver 二进制文件位置的 JVM 参数 (
System.getProperty("webdriver.gecko.driver")
) 找到任何有效值。
行
System.setProperty("webdriver.gecko.driver","C:\geckodriver.exe");
确保只有当前 JVM(正在执行 ClassName.main()
方法的 JVM)知道 geckodriver 二进制文件的位置。这就是为什么当您使用 FirefoxDriver
.
时,您的代码 运行 没问题
但是当你使用 RemoteWebDriver
时,即在网格模式下,你试图 运行 反对网格设置,通过 JVM 参数设置 geckodriver 位置 "webdriver.gecko.driver"
不会对其他 JVM 产生任何影响(请记住,负责支持浏览器交互的节点是使用命令 java -jar selenium-server-standalone-3.4.0.jar -role hub -node http://localhost:4444/grid/register
在单独的 JVM 下分离出来的(您的 步骤 3).
要解决此问题,您有两种选择。
- 在生成节点时使用 JVM 参数
-Dwebdriver.gecko.driver
并指定 geckodriver 的位置。
- 您将 geckodriver 二进制文件下载到一个文件夹中,并将其位置作为 PATH 变量的一部分(即将
C:\geckodriver.exe
添加到您的 PATH
变量)
我在selenium Grid 的帮助下运行宁基本selenium 代码。
步骤如下:
步骤 1:- 下载了最新版本的 selenium 独立服务器 (3.4.0);
步骤 2:- 使用命令 java - jar <path of selenium standalone server>\selenium-server-standalone-3.4.0.jar -role hub
-> [=68= 创建了 HUB ] 成功;
步骤 3 :- 使用命令 java -jar selenium-server-standalone-3.4.0.jar -role hub -node http://localhost:4444/grid/register
创建节点 -> 运行 成功 ;
第 4 步:- 使用以下代码创建了一个简单的 selenium 程序:
public class ClassName {
public static void main(String args[]) throws InterruptedException, MalformedURLException {
System.setProperty("webdriver.gecko.driver","C:\geckodriver.exe");
DesiredCapabilities cap=DesiredCapabilities.firefox();
cap.setPlatform(Platform.WINDOWS);
cap.setBrowserName("firefox");
URL url = new URL("http://localhost:4444/wd/hub");
WebDriver wd1 = new RemoteWebDriver(url, cap);
wd1.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
wd1.manage().window().maximize();
wd1.get("http://www.clickindia.com/");
wd1.findElement(By.linkText("Post Free Ad")).click();
Thread.sleep(3000);
wd1.findElement(By.linkText("Select category manually")).click();
Thread.sleep(3000);
WebElement country = wd1.findElement(By.id("combo_0"));
Select sel = new Select(country);
sel.selectByVisibleText("Jobs");
}
}
在 运行ning 上面的代码中抛出以下异常:
注意 :如果我 运行 上面的代码没有 remoteDriver 并且作为一个常见的 WebDriver programm 然后它正在工作并且 运行ning 正常。
selenium 独立服务器和 Gecko 文件的位置相同。
Gecko 版本为 v0.16.0
提前致谢
您已将默认配置的节点注册为 java -jar selenium-server-standalone-3.4.0.jar -role hub -node http://localhost:4444/grid/register
。所以你的节点无法处理请求。
可以考虑注册节点配置如下:
java -Dwebdriver.gecko.driver=C:\geckodriver.exe -jar selenium-server-standalone-3.4.0.jar -role node -hub http://localhost:4444/grid/register
你的代码块在我这边工作正常。
错误消息表明 Selenium 在以下位置找不到 GeckoDriver 二进制文件:
- 属于
PATH
环境变量和 的任何位置
- 它无法通过表示 geckodriver 二进制文件位置的 JVM 参数 (
System.getProperty("webdriver.gecko.driver")
) 找到任何有效值。
行
System.setProperty("webdriver.gecko.driver","C:\geckodriver.exe");
确保只有当前 JVM(正在执行 ClassName.main()
方法的 JVM)知道 geckodriver 二进制文件的位置。这就是为什么当您使用 FirefoxDriver
.
但是当你使用 RemoteWebDriver
时,即在网格模式下,你试图 运行 反对网格设置,通过 JVM 参数设置 geckodriver 位置 "webdriver.gecko.driver"
不会对其他 JVM 产生任何影响(请记住,负责支持浏览器交互的节点是使用命令 java -jar selenium-server-standalone-3.4.0.jar -role hub -node http://localhost:4444/grid/register
在单独的 JVM 下分离出来的(您的 步骤 3).
要解决此问题,您有两种选择。
- 在生成节点时使用 JVM 参数
-Dwebdriver.gecko.driver
并指定 geckodriver 的位置。 - 您将 geckodriver 二进制文件下载到一个文件夹中,并将其位置作为 PATH 变量的一部分(即将
C:\geckodriver.exe
添加到您的PATH
变量)