Как можно запустить тесты, используя библиотеки selenide и selenoid вместе?

Как исправить ошибку "session not created: Chrome failed to start: exited normally. (session not created: DevToolsActivePort file doesn't exist) (The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed)" при использовании кастомного лисенера SelenoidSetup?
  • 9 ноября 2023 г. 12:01
Ответы на вопрос 1
Для запуска тестов, используя библиотеки selenide и selenoid вместе, вам потребуется выполнить следующие шаги:

1. Установите Selenide и Selenoid в ваш проект. Вы можете сделать это, добавив соответствующие зависимости в ваш файл pom.xml (если вы используете Maven) или другим способом, подходящим для вашей среды разработки.

2. Настройте Selenoid, указав необходимые параметры для окружения тестирования. Обычно это делается через файл конфигурации `browsers.json`, который содержит информацию о различных браузерах и их настройках.

3. Создайте класс тестового лисенера, который будет инициализировать и управлять запуском и остановкой сессий Selenoid. Пример такого лисенера вы можете найти в следующем ответе.

4. Внесите необходимые изменения в ваши тесты, чтобы они использовали Selenide и выполнялись в контейнере Selenoid. Для этого вы можете использовать метод `open()` класса `com.codeborne.selenide.Selenide`, указав URL, который должен быть открыт перед выполнением тестов.
   Пример кода для открытия URL с использованием Selenide:

```java
import com.codeborne.selenide.Selenide;

...

@BeforeClass
public static void setUp() {
    Selenide.open("http://example.com");
}
```

Теперь, чтобы исправить ошибку "session not created: Chrome failed to start: exited normally. (session not created: DevToolsActivePort file doesn't exist) (The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed)", связанную с кастомным лисенером SelenoidSetup, вам нужно убедиться, что ваш лисенер правильно настроен и работает с Selenide и Selenoid.

Вот пример настройки лисенера SelenoidSetup:

```java
import com.codeborne.selenide.Configuration;
import org.testng.IInvokedMethod;
import org.testng.IInvokedMethodListener;
import org.testng.ITestResult;
import ru.yandex.qatools.allure.annotations.Step;
import java.io.IOException;

public class SelenoidSetup implements IInvokedMethodListener {
    @Override
    public void beforeInvocation(IInvokedMethod method, ITestResult testResult) {
        String browserName = "";
        if (method.isTestMethod()) {
            try {
                browserName = method
                        .getTestMethod()
                        .getConstructorOrMethod()
                        .getMethod()
                        .getAnnotation(Test.class)
                        .browserName();
            } catch (NullPointerException e) {
                // Если browserName не указан, будет выбран браузер по умолчанию
                browserName = System.getProperty("browserName", "chrome");
            }
            Configuration.browser = browserName;
        }
    }

    @Override
    public void afterInvocation(IInvokedMethod iInvokedMethod, ITestResult iTestResult) {
        stopWebDriver();
    }

    @Step("Stopping web driver")
    public void stopWebDriver() {
        try {
            Runtime.getRuntime().exec("killall chromedriver");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
```

Этот лисенер устанавливает имя браузера в конфигурации Selenide перед запуском каждого тестового метода и управляет остановкой драйвера после выполнения каждого тестового метода.

Для использования этого лисенера добавьте аннотацию `@Listeners` к вашему классу тестов, как показано ниже:

```java
import org.testng.annotations.Listeners;

@Listeners(SelenoidSetup.class)
public class YourTestClass {
    // ваш код тестов
}
```

Теперь ваш тест должен быть запущен с использованием Selenide и Selenoid, и ошибка, связанная с DevToolsActive
Похожие вопросы