Объект общих параметров для всех классов параметров браузера в Selenium

Раньше я использовал класс DesiredCapabilities для создания универсального метода для настройки всех возможностей браузера с использованием внешнего файла (формат ключ = значение). Вот мой код

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;
}

Я узнал, что рекомендуется использовать классы параметров, поскольку некоторые из классов возможностей будут устаревшими. Поэтому я пытаюсь заменить этот метод другим методом, который работал бы для всех классов параметров.

  • FirefoxOptions
  • ChromeOptions
  • InternetExplorerOptions
  • SafariOptions
  • EdgeOptions

Я не могу найти общий тип объекта для всех упомянутых выше классов, чтобы создать аналогичный метод, в котором я использовал DesiredCapabilities.

Я хочу вернуть общий тип объекта из этого нового метода, чтобы я мог использовать его для инициализации всех драйверов, например.

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



Ответы (1)


Вам необходимо использовать метод merge() из MutableCapabilities Класс для объединения объекта типа DesiredCapabilities в объект типа ChromeOptions. и инициируйте экземпляры WebDriver и WebClient, передав объект ChromeOptions следующим образом:

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

Вы можете найти подробное обсуждение в Как решить проблему конструктор ChromeDriver (Capabilities) устарел »и WebDriverException: ошибка истекшего времени с ChromeDriver и Chrome

person DebanjanB    schedule 28.11.2018