Помогите настроить запуск Selenide тестов в контейнере Selenoid

Проблема (Вопрос) заключается в то что на проекте сейчас юзаю голый Selenium и решил внедрить Selenide. Все тесты запускаю в Docker контейнере с помощью Selenoid
Помогите настроить запуск тестов в контейнере. Вот моя песочница с настройками https://github.com/AndreyMelnichenko/Selenoid

Я попытался сделать сделать как в примере что нагуглил GitHub - erolstt/selenoid-selenide-example
Кроме кучи эксепшенов ничего не вышло.

1 лайк

Вот проект с примером на selenide в обычном докере с images селениума

С селенойдом все тоже самое почти

 @BeforeClass
    public void setup() throws MalformedURLException {
        switch (runType){
            case("local"):
                Configuration.browser = "chrome";
                Configuration.browserPosition="1921x0";
                Configuration.browserSize="1800x1000";
                break;
            case("docker"):
                Configuration.browser = "chrome";
                DesiredCapabilities browser = new DesiredCapabilities();
                browser.setBrowserName("chrome");
                browser.setVersion("66");
                browser.setCapability("enableVNC", true);
                driver = new RemoteWebDriver(URI.create("http://18.195.216.182:4444/wd/hub").toURL(),browser);
                setWebDriver(driver);
                driver.manage().window().setSize(new Dimension(1920, 1080));
                break;
        }

    }

Это реально работает. Есть у кого-то лучше предложения как реализовать можно?

1 лайк

Сдается мне, что browser.setCapability("enableVNC", true); не включает VNC, потому как на селеноид UI я не вижу выполнения теста.
Уверены, что у вас работает?

могу записать видео

Я просто попробовал по вашей аналогии, создал такой же класс и простой тест на например

        open("https://mvnrepository.com/artifact/log4j/log4j/1.2.17");
        $("#maincontent > table > tbody > tr:nth-child(1) > th").waitUntil(Condition.appears, 120000);
        $("#maincontent > table > tbody > tr:nth-child(1) > th").shouldBe(Condition.text("License"));
        assertEquals("Maven Repository: log4j » log4j » 1.2.17", title());

И получаю всегда падение уже на первой проверке

Element not found {#maincontent > table > tbody > tr:nth-child(1) > th}
Expected: visible

И если открываю в браузере UI то вижу, что VNC не работает, все в консоли только

Более того, я пытался брать source после откртия

open("https://mvnrepository.com/artifact/log4j/log4j/1.2.17");
System.out.println(source());

И в этом сорсе все так же не вижу своих элементов (например “License”)

Какой образ используете? Чтобы VNC заработал, нужно качать
selenoid/vnc:[BROWSER_NAME]_[VERSION]

если один тест то VNC может не успеть вам показать, что б протестить VNC поставте после загрузки URL Thread.sleep(“5000”);

Да пробовал ставить сон даже в 20 секунд и все равно падает.

Я к сожалению, не настраивал селеноид, стоит он на удаленной машине, но этот вопрос уточню.
Хочу локально поставить селеноид и проверить, вполне может быть настроили криво сервер.

тогда похоже на то что Сергей( @ArtOfLife ) говорил, возможно при установке забыли ключик -vnc добавить и закачали образы без VNC

Разобрался, надо было переопределять WebDriverProvider

public class SelenoidWebDriverProvider implements WebDriverProvider {
    @Override
    public WebDriver createDriver(DesiredCapabilities capabilities) {
        DesiredCapabilities browser = new DesiredCapabilities();
        browser.setBrowserName("chrome");
        browser.setCapability("enableVNC", true);

        try {
            RemoteWebDriver driver = new RemoteWebDriver(
                    URI.create("http://localhost:4444/wd/hub").toURL(),
                    browser
            );
            driver.manage().window().setSize(new Dimension(1280, 1024));
            return driver;
        } catch (MalformedURLException e) {
            throw new RuntimeException(e);
        }
    }
}

нужно попробовать такую реализацию у себя. Как Вы используете в кода дальше SelenoidWebDriverProvider?

Пишите потом в вашем тесте например в @BeforeClass

Configuration.browser = "com.<Тут путь к классу>.SelenoidWebDriverProvider";

Возможно колхозно, зато работает, просто сам недавно писать стал, долго искал и нормального варианта не нашел, очень странно, что в Selenide из коробки не сделают реализацию VNC и прочих мелочей.

Опять же, если у кого есть более верное и лаконичное решение, то с удовольствием прочту.

1 лайк

WebDriverProvider не обязательно использовать, все можно настроить используя Configurations клас:

Configuration.remote = "http://localhost:4444/wd/hub";
Configuration.browser = "chrome";
Configuration.browserSize = "1280x1024";
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("enableVNC", true);
Configuration.browserCapabilities = capabilities;
5 лайков

Да вы правы, попробовал, спасибо!
Но вот оказалось, что например если у вас стоит следующий параметр для скачивания файлов

fileDownload = FileDownloadMode.PROXY;

То увидите
qw
Наверно надо чего-то донастроить.

Классно. Возьму на заметку