Как объединить службу драйвера 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);
    
Другие вопросы по тегам