【问题标题】: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在尝试使用 Gecko 驱动程序运行 selenium Grid 代码时,获取“驱动程序可执行文件的路径必须由 webdriver.gecko.driver 设置”
【发布时间】:2017-11-08 18:59:26
【问题描述】:

我在 selenium Grid 的帮助下运行基本的 selenium 代码。

以下是步骤:

第 1 步:- 下载最新版本的 selenium Standalone server (3.4.0)

第二步 :- 使用命令java - jar <path of selenium standalone server>\\selenium-server-standalone-3.4.0.jar -role hub 创建HUB -> 成功运行;

第三步 :- 使用命令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");
  }
}

在运行上面的代码时,抛出了以下异常:

注意:如果我在没有 remoteDriver 的情况下运行上面的代码,并且作为一个常见的 WebDriver 程序,那么它可以正常工作和运行。

selenium 独立服务器和 Gecko 文件的位置相同。

Gecko 版本为 v0.16.0

提前致谢

【问题讨论】:

    标签: java selenium selenium-webdriver selenium-grid geckodriver


    【解决方案1】:

    您已将默认配置的节点注册为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
    

    您的代码块在我的最后工作正常。

    【讨论】:

      【解决方案2】:

      错误信息表明 Selenium 在以下位置找不到 GeckoDriver 二进制文件:

      1. 任何属于PATH 环境变量的位置和
      2. 它无法通过代表 geckodriver 二进制文件位置的 JVM 参数 (System.getProperty("webdriver.gecko.driver")) 找到任何有效值。

      线

      System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe");
      

      确保只有当前 JVM(您的 ClassName.main() 方法正在其中执行的 JVM)知道 geckodriver 二进制文件的位置。这就是为什么当您使用 FirefoxDriver 时您的代码运行良好的原因。

      但是当您使用RemoteWebDriver 时,即在网格模式下,您尝试针对网格设置运行,通过JVM 参数"webdriver.gecko.driver" 设置geckodriver 位置不会对其他JVM 产生任何影响(请记住,负责支持您的浏览器交互的节点是使用命令java -jar selenium-server-standalone-3.4.0.jar -role hub -node http://localhost:4444/grid/register(您的步骤 3)在单独的 JVM 下分离出来的。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-05
        • 2017-09-11
        • 1970-01-01
        • 2017-02-04
        • 2017-12-21
        • 1970-01-01
        • 2017-03-16
        • 1970-01-01
        相关资源
        最近更新 更多