Java Selenium grid with Chrome驱动程序(WebDriverException:驱动程序可执行文件的路径必须由webdriver.Chrome.driver系统属性设置)

Java Selenium grid with Chrome驱动程序(WebDriverException:驱动程序可执行文件的路径必须由webdriver.Chrome.driver系统属性设置),java,selenium,selenium-chromedriver,selenium-grid2,Java,Selenium,Selenium Chromedriver,Selenium Grid2,我正在尝试让我的Selenium网格在Chrome驱动程序上运行 首先,我启动了hub和node: java-jar selenium-server-standalone-2.45.0.jar-role hub java-jar-selenium-server-standalone-2.45.0.jar-role-node-hub 然后我启动了我的测试: public class ChromeDriverTest { private WebDriver driver = null;

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

首先,我启动了hub和node: java-jar selenium-server-standalone-2.45.0.jar-role hub java-jar-selenium-server-standalone-2.45.0.jar-role-node-hub

然后我启动了我的测试:

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;");
    }
}
公共类色度驱动测试{
私有WebDriver=null;
字符串BaseURL,NodeURL;
@以前
public void before()引发异常{
BaseURL=”http://www.google.com";
诺德尔=”http://localhost:4444/wd/hub";
File File=新文件(“C:\\Users\\pushkaryova\\Desktop\\Nexus\\driver\\chromedriver.exe”);
System.setProperty(“webdriver.chrome.driver”,file.getAbsolutePath());
DesiredCapabilities capa=DesiredCapabilities.chrome();
capa.setBrowserName(“铬”);
capa.设置平台(任何平台);
驱动程序=新的RemoteWebDriver(新URL(NodeURL),capa);
}
@试验
public void GoogleSearch()引发异常{
驱动程序。获取(“http://www.google.com");
WebElement searchBox=driver.findElement(By.xpath(“//div[3]/div/input[1]”);
远光灯(搜索框);
findElement(By.xpath(“//div[3]/div/input[1]”);
findElement(By.xpath(“//div[3]/div/input[1]”);
findElement(By.xpath(“//按钮”)。单击();
}
public void hightlight(WebElement WebElement)引发InterruptedException{
对于(int i=0;i<2;i++){
JavascriptExecutor js=(JavascriptExecutor)驱动程序;
js.executeScript(
参数[0]。setAttribute('style',参数[1]),
webElement,“颜色:红色;边框:3px纯红;”;
}
}
}

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


我的代码出了什么问题?

节点计算机上的
驱动程序
可执行文件需要在物理上可用。您可以在启动
节点时将路径设置为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.exe
json
文件放在同一目录中

您可以通过以下方式启动节点:

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

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


这为我消除了错误。

这在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选项之前

当我在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"
}

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

java -jar **selenium-server-standalone-3.8.1.jar** -role node  -hub http://localhost:4444/grid/register
将其保存为.bat文件,并将所有需要的驱动程序可执行文件保存在**与bat文件**相同的文件夹中


否当您双击bat文件以启动节点时,它将自动拾取可执行文件

你试过webdriver wiki上的Solutionom吗?@SkorpEN我试过很多解决方案,读了很多书。但不幸的是,这对我没有帮助。也许你可以说明我的代码中到底出了什么问题?你没有设置chrome二进制文件的属性。首先从最简单的工作示例开始。Yust尝试在网格计算机上运行chrome浏览器,然后使用RemoteWebdriver。最后为网格计算机上的chrom二进制文件设置系统属性。我已将我的方法更改为:@Before public void Before()引发异常{NodeURL=“”;DesiredCapabilities c=DesiredCapabilities.chrome();File 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上。其他SeleniumGrid驱动程序工作正常吗???谢谢!这对我很有效!但是如果我想在FireFox或IE上运行相同的测试,这不是一个问题吗?您必须以相同的方式指定exe的路径,并从命令行实例化目标驱动程序exe。您的意思是:java-jar selenium-server-standalone-2.45.0.jar-role node-hub-Dwebdriver.chrome.driver=。\IEDriverServer.exeWell,如果这是webdrive测试,恐怕您必须执行~webdriver~而不是~node~@SkorpEN。我已解决了使用命令-java-jar selenium-server-standalone-2.45.0.jar-role node-hub-Dwebdriver.ie.driver=IEDriverServer.exe启动节点时出现的问题