Объект общих опций для всех классов опций браузера в 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;
}

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

  • 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

Другие вопросы по тегам