【问题标题】:Selenium grid with Chrome driver (WebDriverException: The path to the driver executable must be set by the webdriver.chrome.driver system property)带有 Chrome 驱动程序的 Selenium 网格(WebDriverException:驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统属性设置)
【发布时间】:2015-05-14 19:57:11
【问题描述】:

我正在尝试让我的 Selenium Grid 在 Chrome 驱动程序上运行。

一开始我启动了集线器和节点: java -jar selenium-server-standalone-2.45.0.jar -role hub java -jar selenium-server-standalone-2.45.0.jar -role node -hub http://localhost:4444/grid/register

然后我开始我的测试:

public class ChromeDriverTest {
    private WebDriver driver = null;
    String  BaseURL,NodeURL;

@Before
public void before() throws Exception{
    BaseURL="http://www.google.com";
    NodeURL="http://localhost:4444/wd/hub";
    File file = new File("C:\\Users\\pushkaryova\\Desktop\\Nexus\\driver\\chromedriver.exe");
    System.setProperty("webdriver.chrome.driver", file.getAbsolutePath());
    DesiredCapabilities capa =DesiredCapabilities.chrome();
    capa.setBrowserName("chrome");
    capa.setPlatform(Platform.ANY);
    driver=new RemoteWebDriver(new URL(NodeURL),capa);
}

@Test
public void GoogleSearch() throws Exception {
    driver.get("http://www.google.com");
    WebElement searchBox = driver.findElement(By.xpath("//div[3]/div/input[1]"));
    hightlight(searchBox);
    driver.findElement(By.xpath("//div[3]/div/input[1]")).clear();
    driver.findElement(By.xpath("//div[3]/div/input[1]")).sendKeys("Test");
    driver.findElement(By.xpath("//button")).click();

}

public void hightlight(WebElement webElement) throws InterruptedException {
    for (int i = 0; i < 2; i++) {
        JavascriptExecutor js = (JavascriptExecutor) driver;
        js.executeScript(
                "arguments[0].setAttribute('style', arguments[1]);",
                webElement, "color: red; border: 3px solid red;");
    }
}

}

并得到一个错误: org.openqa.selenium.WebDriverException:驱动程序可执行文件的路径必须由webdriver.chrome.driver系统属性设置

我的代码有什么问题?

【问题讨论】:

  • 你尝试过 webdriver wiki 的解决方案吗???
  • @SkorpEN 我尝试了很多解决方案并阅读了很多。但不幸的是,这对我没有帮助。也许您可以说明我的代码到底出了什么问题?
  • U 未设置 chrome 二进制文件的属性。首先从最简单的工作示例开始。 Yust 尝试在网格机器上运行 chrome 浏览器,然后通过 RemoteWebdriver。最后在网格机器上设置 chrom 二进制的系统属性。
  • 我已将方法更改为:@Before public void before() throws Exception{ NodeURL="localhost:4444/wd/hub"; DesiredCapabilities c = DesiredCapabilities.chrome();文件 file = new File("C:\\Users\\pushkaryova\\Desktop\\Nexus\\driver\\chromedriver.exe"); System.setProperty("webdriver.chrome.driver", file.getAbsolutePath()); c.setPlatform(Platform.ANY); c.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true); driver=new RemoteWebDriver(new URL(NodeURL),c);它适用于 ChromeDriver,但不适用于 SeleniumGrid。
  • 其他硒网格驱动程序是否正常工作???

标签: java selenium selenium-chromedriver selenium-grid2


【解决方案1】:

driver 可执行文件需要在节点机器上物理可用。启动node时可以设置exe的路径

在命令中添加这一行

-Dwebdriver.chrome.driver=./chromedriver.exe

我从 json 文件中配置了这个,发现这更容易

名为 DefaultNode.json 的 json 文件

{
  "capabilities":
      [
        {
          "browserName": "firefox",
          "maxInstances": 5,
          "seleniumProtocol": "WebDriver"
        },
        {
          "browserName": "chrome",
          "maxInstances": 5,
          "seleniumProtocol": "WebDriver"
        },
        {
          "platform": "WINDOWS",
          "browserName": "internet explorer",
          "maxInstances": 1,
          "seleniumProtocol": "WebDriver"
        }
      ],
  "configuration":
  {
    "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
    "maxSession": 5,
    "port": 5555,
    "host": ip,
    "register": true,
    "registerCycle": 5000,
    "hubPort": 4444,
    "hubHost": ip
  }
}

使用 json 配置启动节点

java -jar selenium-server-standalone-2.45.0.jar -role webdriver -nodeConfig DefaultNode.json -Dwebdriver.ie.driver=.\IEDriverServer.exe

注意IEDriverServer.exejson文件放在同一目录

【讨论】:

  • 谢谢!这对我很有效!但如果我想用 FireFox 或 IE 运行相同的测试,这会不会有问题?
  • 您必须以同样的方式指定exe的路径并从命令行实例化目标驱动程序exe。
  • 你的意思是这样的:java -jar selenium-server-standalone-2.45.0.jar -role node -hub localhost:4444/grid/register -Dwebdriver.chrome.driver=.\IEDriverServer.exe
  • 好吧,如果这是 webdrive 测试,恐怕你必须做 ~webdriver~ 而不是 ~node~
  • @SkorpEN 我已经解决了使用以下命令启动节点的问题 - java -jar selenium-server-standalone-2.45.0.jar -role node -hub localhost:4444/grid/register -Dwebdriver.ie.driver =IEDriverServer.exe
【解决方案2】:

这适用于 3.3.1 及更高版本

java -Dwebdriver.chrome.driver="C:\chromedriver.exe" -jar selenium-server-standalone-2.45.0.jar -role node -hub localhost:4444/grid/register -browser "browserName=chrome,version=ANY,platform=WINDOWS,maxInstances=20" -maxSession 20

Webdriver 路径应该放在 -jar 选项之前

【讨论】:

    【解决方案3】:

    您可以将节点启动为:

    java -jar selenium-server-standalone-2.45.0.jar -role node -hub localhost:4444/grid/register -browser "browserName=chrome,version=ANY,platform=WINDOWS,maxInstances=20" -Dwebdriver.chrome.driver="C:\chromedriver.exe" -maxSession 20
    

    【讨论】:

      【解决方案4】:

      当我像这样在 json 配置文件中添加这两个属性时,我可以使用 selenium 网格远程运行 chrome 和 firefox:注意最后两行

      {
        "capabilities":
        [
          {
            "browserName": "firefox",
            "marionette": true,
            "maxInstances": 5,
            "seleniumProtocol": "WebDriver"
          },
          {
            "browserName": "chrome",
            "maxInstances": 5,
            "seleniumProtocol": "WebDriver"
          },
          {
            "browserName": "internet explorer",
            "platform": "WINDOWS",
            "maxInstances": 1,
            "seleniumProtocol": "WebDriver"
          },
          {
            "browserName": "safari",
            "technologyPreview": false,
            "platform": "MAC",
            "maxInstances": 1,
            "seleniumProtocol": "WebDriver"
          }
        ],
        "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
        "maxSession": 5,
        "port": -1,
        "register": true,
        "registerCycle": 5000,
        "hub": "http://192.168.1.2:4444",
        "nodeStatusCheckTimeout": 5000,
        "nodePolling": 5000,
        "role": "node",
        "unregisterIfStillDownAfter": 60000,
        "downPollingLimit": 2,
        "debug": false,
        "servlets" : [],
        "withoutServlets": [],
        "custom": {},
        "webdriver.gecko.driver":"c:/drivers/geckodriver.exe",
        "webdriver.chrome.driver":"c:/drivers/chromedriver.exe"
      }
      

      【讨论】:

        【解决方案5】:

        您可以在系统变量(对于 Windows)中设置包含 chromedriver 可执行文件的文件夹的路径。

        这对我来说消除了错误。

        【讨论】:

          【解决方案6】:

          与其在 cmd 命令中指定驱动程序可执行文件,更好的方法是:

          java -jar **selenium-server-standalone-3.8.1.jar** -role node  -hub http://localhost:4444/grid/register
          

          将此保存为 .bat 文件并将所有必需的驱动程序可执行文件保存在与 bat 文件**相同的文件夹中

          不,当你双击bat文件启动节点时,它会自动拾取可执行文件。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-11-27
            • 2018-03-17
            • 2016-11-04
            • 2013-08-18
            • 1970-01-01
            • 2017-04-26
            • 2019-02-08
            相关资源
            最近更新 更多