Всем привет. Нужна помощь с Selenide.
Хочу чтобы в каждом тесте запускался чистый браузер в Selenoid с Options ("–headless" и т.д.) и Capabilities (“enableVNC” = true; и т.д.) из файла настроек.
Я пытался совместить Options и Capabilities в единое целое. Пробовал делать через метод .merge()
package org.driver;
import com.codeborne.selenide.Configuration;
import com.codeborne.selenide.SelenideConfig;
import com.codeborne.selenide.SelenideDriver;
import com.codeborne.selenide.SelenideWait;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.DesiredCapabilities;
import java.util.HashMap;
import java.util.Map;
import static setting.Settings.*;
public class Driver {
public static void main(String[] args) {
System.out.println("Тест Java");
DesiredCapabilities capabilities = new DesiredCapabilities();
ChromeOptions options = new ChromeOptions();
for (int i = 0; i < OPTIONS.length - 1; i++)
options.addArguments(OPTIONS[i]);
options.setExperimentalOption("mobileEmulation", MOBILE_EMULATION);
options.setExperimentalOption("excludeSwitches", ENABLE_AUTOMATION);
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
Map<String, Object> selenoidOptions = new HashMap<>();
selenoidOptions.put("browserName", "chrome");
selenoidOptions.put("browserVersion", "100.0");
selenoidOptions.put("enableVNC", true);
selenoidOptions.put("enableVideo", false);
capabilities.setCapability("selenoid:options", selenoidOptions);
var driver = new SelenideDriver(
new SelenideConfig()
.remote(PORTAINER_COMMAND_EXECUTOR)
.browser("chrome")
.browserVersion("100.0")
.browserCapabilities(capabilities)
);
driver.open(URL);
driver.$x("//span[@class= 'good-day']").click();
Благодаря коду выше, в Selenoid запускается браузер с переданными capabilities, но без Options в самом браузере. После завершения скрипта браузер и контейнер автоматически закрывается (что мне и нужно)
Затем я решил делать через WebDriverProvider:
package drivers;
import com.codeborne.selenide.*;
import org.openqa.selenium.Capabilities;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import javax.annotation.Nonnull;
import java.net.URI;
import java.net.MalformedURLException;
import java.util.HashMap;
import java.util.Map;
import static setting.Settings.*;
public class CustomDriver implements WebDriverProvider {
@Nonnull
@Override
public WebDriver createDriver(@Nonnull Capabilities capabilities) {
ChromeOptions options = new ChromeOptions();
for (int i = 0; i < OPTIONS.length - 1; i++) {
options.addArguments(OPTIONS[i]);
}
options.setExperimentalOption("mobileEmulation", MOBILE_EMULATION);
options.setExperimentalOption("excludeSwitches", ENABLE_AUTOMATION);
Map<String, Object> selenoidOptions = new HashMap<>();
selenoidOptions.put("browserName", "chrome");
selenoidOptions.put("browserVersion", "100.0");
selenoidOptions.put("enableVNC", true);
selenoidOptions.put("enableVideo", false);
options.setCapability("selenoid:options", selenoidOptions);
try {
return new RemoteWebDriver(
URI.create(PORTAINER_COMMAND_EXECUTOR).toURL(),
options
);
} catch (MalformedURLException e) {
System.out.println("ERROR!!!!");
throw new RuntimeException(e);
}
}
}
Точка входа для запуска драйвера и скрипта:
public static void main(String[] args) {
Configuration.holdBrowserOpen=false;
Configuration.browser = CustomDriver.class.getName();
Selenide.open(SSP_URL);
$(".input-login").click();
}
После этого Capabilities и Options передаются в Selenoid и Chrome, код отрабатывает, но после не закрывает браузер и контейнер.
Специально добавил строчку (Configuration.holdBrowserOpen=false;) - не помогло.
Может можно как-то из RemoteWebDriver сделать SelenideDriver и это поможет?