Как объединить службу драйвера Chrome с нужными возможностями для автономной работы с помощью xvfb?
Я хочу слить ChromeDriverService
с chromeOptions
или с DesiredCapabilities
для запуска браузера в xvfb.
Ниже приведена часть кода ChromeDriverService
Я ранее использовал без сетки селена.
String NodeChromeIncognito = "http://localhost:5558/wd/hub"
ChromeDriverService chromeDriverService = new ChromeDriverService.Builder()
.usingDriverExecutable(new File("driver_linux/chromedriver"))
.usingAnyFreePort()
.withEnvironment(ImmutableMap.of("DISPLAY", ":1")).build();
chromeDriverService.start();
// commented because using RemoteWebDriver
// driver = new ChromeDriver(chromeDriverService);
и ниже приведен код части RemoteWebDriver, с которым я сливаюсь ChromeDriverService
,
DesiredCapabilities cap = null;
String NodeChromeIncognito = "http://localhost:5558/wd/hub";
String NodeChrome = "http://localhost:5557/wd/hub";
String NodeFirefox = "http://localhost:5556/wd/hub";
if (browserName.equals("chrome")) {
cap = DesiredCapabilities.chrome();
cap.setBrowserName("chrome");
driver = new RemoteWebDriver(new URL(NodeChrome), cap);
} else if (browserName.equals("firefox")) {
System.setProperty("webdriver.gecko.driver", "driver_linux/geckodriver");
cap = DesiredCapabilities.firefox();
cap.setCapability("marionette", true);
driver = new RemoteWebDriver(new URL(NodeFirefox), cap);
}else if (browserName.equals("chromeIncognito")) {
ChromeOptions option = new ChromeOptions();
option.addArguments("--incognito");
cap = DesiredCapabilities.chrome();
cap.setCapability(ChromeOptions.CAPABILITY, option);
cap.setPlatform(Platform.WIN10);
cap.setBrowserName("chrome incognito");
driver = new RemoteWebDriver(new URL(NodeChromeIncognito), cap);
}
Я знаю, что мог бы использовать addArguments("--headless")
для хрома, но он не очень хорошо работает с моим веб-приложением. А также я использовал DesiredCapabilities.merge
и ошибка.
Как объединить код / конфигурацию ChromeDriverService
с ChromeOptions
или же DesiredCapabilites
?
1 ответ
Как вы упомянули, вы хотите объединить ChromeDriverService
с ChromeOptions
или с DesiredCapabilities
оба могут быть достигнуты. Но по состоянию на текущий Selenium Java Client
освобождает следующие конструкторы как устаревшие:
ChromeDriver(Capabilities capabilities)
//and
ChromeDriver(ChromeDriverService service, Capabilities capabilities)
Следовательно, мы должны использовать любой из следующих параметров:
Вариант А: использовать только
ChromeOptions
:private static ChromeDriverService service; private WebDriver driver; //code block service = new ChromeDriverService.Builder() .usingDriverExecutable(new File("path/to/my/chromedriver.exe")) .usingAnyFreePort() .build(); chromeDriverService.start(); ChromeOptions option = new ChromeOptions(); option.addArguments("--incognito"); driver = new RemoteWebDriver(service.getUrl(), options);
Вариант Б: использовать
DesiredCapabilities
а затем использоватьmerge()
отMutableCapabilities
слиться вChromeOptions
:private static ChromeDriverService service; private WebDriver driver; //code block service = new ChromeDriverService.Builder() .usingDriverExecutable(new File("path/to/my/chromedriver.exe")) .usingAnyFreePort() .build(); chromeDriverService.start(); DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability("...", true); ChromeOptions option = new ChromeOptions(); option.addArguments("--incognito"); option.merge(capabilities); driver = new RemoteWebDriver(service.getUrl(), options);