首页 > 解决方案 > Selenium 中所有浏览器选项类的通用选项对象

问题描述

我之前使用 DesiredCapabilities 类创建一个通用方法来设置浏览器的所有功能,使用外部文件(key=value 格式)。这是我的代码

public DesiredCapabilities setWebDriverCapabilities(String browser) throws IOException {

    switch (browser) {
        case "ie":
            capabilities = new DesiredCapabilities().internetExplorer();
            break;
        case "firefox":
            capabilities = new DesiredCapabilities().firefox();
            break;
        case "chrome":
            capabilities = new DesiredCapabilities().chrome();
            break;
        case "edge":
            capabilities = new DesiredCapabilities().edge();
            break;
        case "safari":
            capabilities = new DesiredCapabilities().safari();
            break;
        default:
            capabilities = null;
    }

    Properties prop = new Properties();
    String FS = File.separator;
    prop.load(new FileInputStream("src" + FS + "test" + FS + "resources" + FS + browser + ".capabilities"));
    Set < Object > keys = prop.keySet();
    for (Object k: keys) {
        String key = (String) k;
        capabilities.setCapability(key, prop.getProperty(key));
    }
    return capabilities;
}

我发现它建议使用选项类,因为某些功能类将被弃用。所以我试图用一种适用于所有 Options 类的不同方法替换这个方法

我找不到上述所有类的通用对象类型,因此我可以创建一个使用 DesiredCapabilities 的类似方法。

我想从这个新方法返回一个通用对象类型,以便我可以将它用于所有驱动程序初始化,例如

driver = new ChromeDriver(setOptions());
driver = new FirefoxDriver(setOptions());

标签: javaseleniumselenium-webdriverdesiredcapabilitiesmutablecapabilities

解决方案


您需要使用 MutableCapabilities 类中的方法merge()DesiredCapabilities类型的对象合并ChromeOptions类型的对象中,并通过传递ChromeOptions对象来启动WebDriverWebClient实例,如下所示:

DesiredCapabilities cap = DesiredCapabilities.chrome();
cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
ChromeOptions options = new ChromeOptions();
options.merge(cap);
driver = new ChromeDriver(options);

您可以在How to address “The constructor ChromeDriver(Capabilities) is deprecated” 和 WebDriverException: Timed out error with ChromeDriver and Chrome中找到详细讨论


推荐阅读