Robot Framework - передать chromeoption как желаемую возможность

Я смог выполнить следующую работу на Java:

DesiredCapabilities capabilities = DesiredCapabilities.chrome();
ChromeOptions options = new ChromeOptions();
options.addArguments("--disable-extensions");
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
ChromeDriver driver = new ChromeDriver(capabilities);
driver.get("https://www.google.com");

Теперь я использую Java-порт Selenium2Library для Robot Framework. Как я могу сделать что-то похожее на вышеприведенное? Я пробовал следующее:

${chrome_options}=    Evaluate    sys.modules['selenium.webdriver'].ChromeOptions()    sys, selenium.webdriver
${chrome_capabilities}=    Evaluate    sys.modules['selenium.webdriver'].DesiredCapabilities.CHROME    sys, selenium.webdriver
Call Method    ${chrome_options}    add_argument    disable-extensions
Set To Dictionary    ${chrome_capabilities}    ChromeOptions.CAPABILITY=${chrome_options}
Open Browser    https://www.google.com    Chrome    None    None        desired_capabilities=${chrome_capabilities}    None

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

Спасибо за вашу помощь.


person tic    schedule 31.07.2016    source источник


Ответы (2)


Передайте параметры Chrome через аргумент requiredCapabilities в Открыть браузер в виде строки JSON. Если вы создаете объект возможностей на Java, используйте toJson для создания объекта JSON. Затем используйте метод getAsString для Объект JSON для получения строки. Затем передайте эту строку в качестве значения для требуемых возможностей. Итак, по сути, вам нужно создать ключевое слово пользователя Java, которое возвращает строку желаемых возможностей.

# the below should return something similar to {'platform': 'ANY', 'browserName': 'chrome', 'version': '', 'chromeOptions': {'args': ['--disable-extensions'], 'extensions': []}, 'javascriptEnabled': True}
${desired caps}    Get Capabilities    # call custom keyword to get capabilities string
Open Browser    https://stackoverflow.com    gc    desiredCapabilities=${desired caps}

public String getCapabilities() {}
    DesiredCapabilities capabilities = DesiredCapabilities.chrome();
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--disable-extensions");
    capabilities.setCapability(ChromeOptions.CAPABILITY, options);
    return capabilities.toJson().getAsString();
}
person ombre42    schedule 01.08.2016
comment
Здравствуйте, спасибо за ответ. Я пробовал. Но похоже, что метод toJson() недоступен для класса DesiredCapabilities. Это только для класса ChromeOptions. Поэтому я не могу вернуть возможности в виде строки. - person tic; 02.08.2016
comment
Мне удалось вернуть желательныйCapability в виде строки, используя: . - person tic; 02.08.2016
comment
Мне удалось передать chromeOption как желаемую возможность в формате JSON. Значение — «chromeOptions»: u'org.openqa.selenium.chrome.ChromeOptions@13473b89». Однако я считаю, что на данный момент отключить расширения в Chrome по-прежнему невозможно. Это связано с тем, что текущий Java-порт Selenium2Library не импортирует ChromeOptions. Есть идеи, ребята? - person tic; 03.08.2016
comment
Я пытался не рекомендовать этот подход, но, возможно, это к лучшему. См. stackoverflow.com/a/18261156/2532697. Имена пакетов неверны для более новых версий. По сути, вместо того, чтобы программно генерировать строку возможностей, просто создайте свой собственный экземпляр веб-драйвера и внедрите его в selenium2library. - person ombre42; 03.08.2016
comment
Спасибо за ответ. Извините, я просто немного запутался. Вы можете открыть браузер с помощью RF с Selenium2Library, получить экземпляр WebDriver и использовать его со своей пользовательской библиотекой. Возможно ли обратное? Откройте браузер, используя вашу пользовательскую библиотеку (чтобы я мог установить chromeOptions), затем получите экземпляр WebDriver и используйте его в RF с Selenium2Libary? - person tic; 05.08.2016
comment
Извини за это. Упомянутое решение имеет ключевое слово getWebDriverCache. Получив ссылку на webDriverCache, вы можете вызвать метод register с созданным вами экземпляром webDriver (см. github.com/MarkusBernhardt/robotframework-selenium2library-java/) - person ombre42; 05.08.2016
comment
Спасибо еще раз. Использование ключевого слова com.github.markusbernhardt.selenium2library.keywords.BrowserManagement.Get Web Driver Cache возвращает webDriverCache... Ваш Misc.Get Web Driver Cache, к сожалению, этого не делает. Выдает ошибку: java.lang.ClassCastException: Selenium2Library не может быть приведен к com.github.markustbernhardt.selenium2library.keywords.BroswerManagement. Используя первый, я не могу получить текущий webDriver. Я все еще расследую, где я ошибся со вторым. - person tic; 09.08.2016

Вместо использования «Открыть браузер» используйте ключевое слово «Создать веб-драйвер».

person Helio    schedule 31.07.2016
comment
Они используют Java-порт Selenium2Library. Создание Webdriver там не реализовано. - person ombre42; 01.08.2016