在尝试使用 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 二进制文件:

  1. 属于 PATH 环境变量和
  2. 的任何位置
  3. 它无法通过表示 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).

要解决此问题,您有两种选择。

  1. 在生成节点时使用 JVM 参数 -Dwebdriver.gecko.driver 并指定 geckodriver 的位置。
  2. 您将 geckodriver 二进制文件下载到一个文件夹中,并将其位置作为 PATH 变量的一部分(即将 C:\geckodriver.exe 添加到您的 PATH 变量)