【问题标题】:How to set more than one desired capabilities in Selenium using Java?如何使用 Java 在 Selenium 中设置多个所需的功能?
【发布时间】:2016-11-01 06:29:08
【问题描述】:

我正在尝试以移动仿真模式启动 chrome,并且还想在启动之前设置用户代理。我已经找到了一次执行此操作的方法,但无法同时针对同一 chrome 实例执行此操作。 以下是我的代码:

String useragent="Mozilla/5.0 (Windows NT 6.1\\; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36 WFBTesting";
    Map<String, String> mobileEmulation = new HashMap<String, String>();
    mobileEmulation.put("deviceName", "Google Nexus 5");
    Map<String, Object> chromeOptions = new HashMap<String, Object>();
    chromeOptions.put("mobileEmulation", mobileEmulation);

    ChromeOptions options = new ChromeOptions();
    options.addArguments("--user-agent="+useragent);
    options.addArguments("--test-type");
    options.addArguments("--allow-running-insecure-content");


    DesiredCapabilities capabilities = DesiredCapabilities.chrome();
    //capabilities.setCapability(ChromeOptions.CAPABILITY,(chromeOptions));
    capabilities.setCapability(ChromeOptions.CAPABILITY,options);


    WebDriver driver = new ChromeDriver(capabilities);

在上面的代码中,我可以在“capabilities.setCapability(ChromeOptions.CAPABILITY,options);”中传递选项或 chromeOptions但是如果编写两个 setCapability 方法,一个带有选项,另一个带有 chromeOptions,则只有一个对启动的 chrome 会话有效,而不是两者都有效。请建议设置功能和启动 chrome 会话的最佳方式。

编辑 正如建议的那样,我尝试了以下操作: 感谢@Cyildirim 再次回复您。这次我在脚本中使用了以下代码:

Map<String, String> mobileEmulation = new HashMap<String, String>();
        mobileEmulation.put("deviceName", "Google Nexus 5");
        Map<String, Object> chromeOptions = new HashMap<String, Object>();
        chromeOptions.put("args", Arrays.asList("user-agent=Mozilla/5.0 (Windows NT 6.1\\; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36 WFBTesting","test-type","allow-running-insecure-content"));
        chromeOptions.put("mobileEmulation", mobileEmulation);DesiredCapabilities capabilities = DesiredCapabilities.chrome();
        capabilities.setCapability(ChromeOptions.CAPABILITY,(chromeOptions));

但即使使用上述方法,我也无法正确设置用户配置文件。只有移动仿真功能正在设置。如果我在数组中错误地编写用户代理,你能纠正我吗?或任何其他使它起作用的建议。

【问题讨论】:

    标签: java google-chrome selenium


    【解决方案1】:

    您是否尝试设置它们?

    capabilities.setCapability(ChromeOptions.CAPABILITY,chromeOptions);
    capabilities.setCapability(ChromeOptions.CAPABILITY,options);
    

    【讨论】:

    • 你好@Cyildirim,是的,我确实尝试过,结果是,它只会将所需的能力设置为移动仿真模式或用户代理一次,然后跳过另一个。如果您看到我的代码,我已经注释了一个 capabilities.setCapability 语句。所以是的,我确实尝试过,但没有成功。
    • 我在这里找到了你的灵魂:stackoverflow.com/questions/38612157/…。实际上已经创建了 chrome 选项作为 Map 的替代品。你可以这样处理你的案子。
    • 再次感谢@Cyildirim 的回复。请参阅描述(我添加了更多信息,包括您的建议)。它仍然不适合我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 2016-12-02
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    相关资源
    最近更新 更多