【问题标题】:Pass driver ChromeOptions and DesiredCapabilities?通过驱动程序 ChromeOptions 和 DesiredCapabilities?
【发布时间】:2014-07-13 02:51:54
【问题描述】:

新的 Google chrome 更新会在浏览器中显示此消息“您正在使用不受支持的命令行标志:--ignore-certificate-errors。稳定性和安全性将受到影响。”

根据我在 selenium 错误报告中阅读的内容,临时解决方案是使用

启动 webdriver
options.AddArgument("test-type")

我在创建驱动程序时已经传递了 DesiredCapabilities。如何将 ChromeOptions 和 DesiredCapabilities 都传递给驱动程序?

DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability("chrome.switches", Arrays.asList("--incognito"));

ChromeOptions options = new ChromeOptions();
options.addArguments("test-type");

WebDriver driver = new ChromeDriver(capabilities);

【问题讨论】:

    标签: selenium selenium-webdriver webdriver


    【解决方案1】:

    添加我的答案以帮助仍在使用 Selenium 最新版本寻找 ChromeOptions 和 Capabilities 的用户。

    从 v3.6.0 开始不推荐将功能传递给 ChromeDriver 构造函数。 Source code Reference

    ChromeDriver(Capabilities capabilities)
    Deprecated. 
    Use ChromeDriver(ChromeOptions) instead.
    

    相反,您应该开始使用以下内容:

    ChromeOptions options = new ChromeOptions();
    options.setAcceptInsecureCerts(true);
    options.setUnhandledPromptBehaviour(UnexpectedAlertBehaviour.ACCEPT);
    WebDriver driver = new ChromeDriver(options)
    

    您仍然可以定义自己的功能,但请确保将这些功能与 ChromeOptions 合并,如下所示:

    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability("something", true);
    
    ChromeOptions options = new ChromeOptions();
    options.addArguments("disable-infobars");
    options.merge(capabilities);
    

    您可以查看Selenium ChromeOptions 上的文章,了解有关 ChromeOptions 和 Capabilities 的更详细用法

    【讨论】:

      【解决方案2】:
      public void setUp() throws Exception
      {
          System.out.println("Launching Google browser");
          System.setProperty("webdriver.chrome.driver", "C:\\chromedriver.exe");   
      
          ChromeOptions options = new ChromeOptions();
          options.addArguments("disable-infobars");
          Map<String, Object> prefs = new HashMap<String, Object>();
          prefs.put("profile.default_content_setting_values.automatic_downloads", 1);
          options.setExperimentalOption("prefs", prefs);
          prefs.put("download.default_directory", "C:\\Downloads");
          driver = new ChromeDriver(options);
          driver.manage().timeouts().implicitlyWait(100, TimeUnit.SECONDS);
          driver.manage().window().maximize(); 
      }
      

      【讨论】:

        【解决方案3】:

        可以试试这个:

        chromeOptions = webdriver.ChromeOptions()
        prefs = {"profile.managed_default_content_settings.images":2}
        chromeOptions.add_experimental_option("prefs",prefs)
        driver = webdriver.Chrome(chrome_options=chromeOptions)
        

        相关信息可以在这里找到: http://nullege.com/codes/search/selenium.webdriver.ChromeOptions.add_experimental_option

        【讨论】:

          【解决方案4】:

          我也遇到了同样的问题,我终于解决了。基本上,您可以将ChromeOptions 添加到DesiredCapabilities,然后使用DesiredCapabilities 创建驱动程序。一旦我尝试过,它就摆脱了横幅。无论如何,这是代码:

          DesiredCapabilities capabilities = DesiredCapabilities.chrome();
          ChromeOptions options = new ChromeOptions();
          options.addArguments("test-type");
          capabilities.setCapability("chrome.binary", "<Path to binary>");
          capabilities.setCapability(ChromeOptions.CAPABILITY, options);
          webDriver = new ChromeDriver(capabilities);
          

          【讨论】:

          • 这在 WebDriver 3.6.0 中已被弃用。
          • 是的。将功能传递给 ChromeDriver 构造函数已弃用。
          【解决方案5】:

          仅供参考:此技术似乎不适用于 Chrome 41.0.2272.101m。

          ChromeOptions chromeOptions = new ChromeOptions();
          chromeOptions.AddExcludedArgument("ignore-certificate-errors");
          capabilities = DesiredCapabilities.Chrome();
          capabilities.SetCapability(ChromeOptions.Capability, chromeOptions);
          
          new RemoteWebDriver(hubUri, capabilities, TimeSpan.FromSeconds(180))
          

          生成

          09:39:24.110 WARN - Exception: unknown error: cannot parse capability: chromeOptions
          from unknown error: unrecognized chrome option: Arguments
          (Driver info: chromedriver=2.10.267521,platform=Windows NT 6.3 x86_64) 
          (WARNING: The server did not provide any stacktrace information)
          Command duration or timeout: 1.52 seconds
          Build info: version: '2.43.0', revision: '597b76b', time: '2014-09-09 20:52:14'
          System info: host: 'T10-E8-GREGPE', ip: '10.123.160.70', os.name: 'Windows 8.1', os.arch: 'x86', os.version: '6.3', java.version: '1.8.0_40'
          Driver info: org.openqa.selenium.chrome.ChromeDriver
          

          这似乎有效:

          ChromeOptions chromeOptions = new ChromeOptions();
          chromeOptions.AddArgument("test-type");
          capabilities = (DesiredCapabilities)chromeOptions.ToCapabilities();
          
          new RemoteWebDriver(hubUri, capabilities, TimeSpan.FromSeconds(180));
          

          【讨论】:

          • capabilities = (DesiredCapabilities)chromeOptions.ToCapabilities(); 是我一直在寻找的用于远程 Web 驱动程序的神奇隐藏 API。为什么这些天没有人使用 webdriver remote?我在 python 中执行此操作,但 api 调用 to_capabilities() 没有出现在其他任何地方。
          猜你喜欢
          • 1970-01-01
          • 2022-01-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-07
          • 1970-01-01
          相关资源
          最近更新 更多