【问题标题】:selenium RemoteWebDriver opens but ChromeOptions are not passed to Selenium Gridselenium RemoteWebDriver 打开,但 ChromeOptions 未传递给 Selenium Grid
【发布时间】:2019-01-20 11:17:42
【问题描述】:

我一直在尝试使用 docker 和 selenium 网格解决 RemoteWebDriver 和 ChromeOptions 的一些问题。主要问题在于代理,但我通过代理 pac 文件将 pac 文件 url 作为 arg 传递到 ChromeOptions 中解决了一半。下面的代码在 docker debug 和本地独立运行时运行良好,但是一旦我尝试使用网格或部署并使用竹子运行,驱动程序就会打开,我可以看到 ChromeOptions 没有被传递,因为 poxy pac 文件没有被使用,它是刚刚冻结在 org.openqa.selenium.remote.ProtocolHandshake createSession。我已经研究了几个星期了,现在我正处于一个困难的阶段。我已经看到一些帖子 DesiredCapabilities 已被弃用,但我还没有找到一种方法来实现 ChromeOptions 没有它。

    ChromeOptions options = new ChromeOptions();
    options.addArguments("--start-maximized");
    options.addArguments("--disable-infobars");
    options.addArguments("--proxy-pac-url= http://ProxyPacURL.com");
    DesiredCapabilities dc = DesiredCapabilities.chrome();
    dc.setCapability(ChromeOptions.CAPABILITY, options);
    driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), dc);

【问题讨论】:

    标签: selenium remotewebdriver chrome-options desiredcapabilities


    【解决方案1】:

    我遇到了同样的问题,我找到了如下解决方案: 我们需要设置“goog:chromeOptions”而不是“chromeOptions”。

    在您的 Java 代码中,存在以下行:

    dc.setCapability(ChromeOptions.CAPABILITY, options);
    

    如果您导航到 ChromeOptions.CAPABILITY,您会注意到它是一个值为“chromeOptions”的常量。这适用于本地 Web 驱动程序,但不适用于远程 Web 驱动程序(即 selenium 网格)。

    只需将上面的行改为:

    dc.setCapability("goog:chromeOptions", options);
    

    现在,当您执行 Java 代码时,它会正常工作,您的所有选项也会显示其效果。

    我遇到了其他页面,例如this,参考了上述解决方案。

    【讨论】:

      【解决方案2】:

      试试这个:

      const GRID_HOST = 'http://localhost:4444/wd/hub';
      
      var options = new chrome.Options();
      options.addArguments("--start-maximized");
      options.addArguments("--disable-infobars");
      options.addArguments("--proxy-pac-url=http://myPacFile.com");
      options.addArguments("--no-sandbox");
      
      driver = new webdriver.Builder()
      .usingServer(GRID_HOST)
      .forBrowser("chrome")
      .setChromeOptions(options)
      .build()
      

      【讨论】:

        【解决方案3】:

        更新到最新的 Selenium Jars,确保您的 java 版本是 1.8 或更高版本,然后您可以将 ChromeOptions 传递给驱动程序,因为 DesiredCapabilities 已被弃用。我现在可以使用 selenium 网格运行 selenium docker 节点,并且所有 ChromeOptions 参数现在都被传递给容器。

            ChromeOptions options = new ChromeOptions();
            options.addArguments("--start-maximized");
            options.addArguments("--disable-infobars");
            options.addArguments("--proxy-pac-url=http://myPacFile.com");
            options.addArguments("--no-sandbox");
            driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), options);
        

        【讨论】:

        • 我遇到了上述同样的困难。我正在使用 java 1.8、selenium-server-standalone-3.141.59.jar、chrome 76.x 和适用于 chrome 76 的 chromedriver。我使用的是上面的确切语法。选项(“--start-maximiaxed”、设置日志文件位置等)不会传递给远程 Web 驱动程序。你还需要做其他调整吗??
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-12
        • 1970-01-01
        相关资源
        最近更新 更多