Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Перехожу с Codeception на Selenide. Есть непонятности :)

selenide
webdriver
Теги: #<Tag:0x00007f7b65164cb0> #<Tag:0x00007f7b65164b70>

(Andrey Kurilov) #1

Всем привет!
Итак, есть, значит, желание перейти с Codeception на связку Selenide+testng+GridHub, так как Codeception не может нормально параллелиться.
Итак, есть несколько вещей, которые пока не понятно как сделать правильно

  1. Как перед запуском теста залогиниться в системе? То есть стартуют тесты (class, test), открывается браузер и первое что он делает - логинится, затем идут сами тесты.

  2. Я разобрался как передавать параметры в @Params через testng.xml, но так и не смог заставить selenide запускать тесты параллельно
    testng.xml

<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite 1" parllel="classes" thread-count="4">

    <test name="Run in Firefox">
        <parameter name ="browser" value="firefox"/>
        <classes>
            <class name ="tests.LoginTest"/>
            <class name ="tests.Login1Test"/>
            <class name ="tests.Login2Test"/>
            <class name ="tests.Login3Test"/>
        </classes>
    </test>

    <test name="Run in Chrome">
        <parameter name ="browser" value="chrome"/>
        <classes>
            <class name ="tests.LoginTest"/>
            <class name ="tests.Login1Test"/>
            <class name ="tests.Login2Test"/>
            <class name ="tests.Login3Test"/>
        </classes>
    </test>

</suite>

POM (не весь)

    <dependencies>
        <dependency>
            <groupId>com.codeborne</groupId>
            <artifactId>selenide</artifactId>
            <version>3.1.3</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.9.8</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.19</version>
                    <configuration>
                        <suiteXmlFiles>
                            <suiteXmlFile>testng.xml</suiteXmlFile>
                        </suiteXmlFiles>
                    </configuration>
                </plugin>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.5</version>
                    <configuration>
                        <source>1.7</source>
                        <target>1.7</target>
                    </configuration>
                </plugin>

            </plugins>
        </pluginManagement>
    </build>

Сейчас сделал так:
Есть тест класс, который экстендится от Setup класса.
Setup class

public class Setup {

    public WebDriver driver;
    public String baseURL = "http://localhost:8080";

    @Parameters({"browser"})

    @BeforeMethod
    public WebDriver openBrowser(String browser) throws MalformedURLException{

        URL hubURL = new URL("http://localhost:4444/wd/hub");

        System.out.println(browser);

        if (browser.equalsIgnoreCase("firefox")) {
            DesiredCapabilities capabilities = DesiredCapabilities.firefox();
            driver = new RemoteWebDriver(hubURL, capabilities);

        } else if (browser.equalsIgnoreCase("chrome")) {
            DesiredCapabilities capabilities = DesiredCapabilities.chrome();
            driver = new RemoteWebDriver(hubURL, capabilities);
        }
        System.out.println("current browser is " + browser);

        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        WebDriverRunner.setWebDriver(driver);
        open(baseURL);
        return driver;
    }

    @AfterTest
    public void tearDown() {
        driver.quit();
    }

В такой ситуации браузеры запускаются последовательно, но тесты логинятся перед запуском самого теста.

Сильно не пинайте :smile: На яву только начал переходить.


(You Rooock) #2

Зачем этот селенид? Лучше чистый селениум использовать, чтобы иметь полное управление.


(Andrey Kurilov) #3

В приведенном примере, из всего кода, есть только 1 строчка, использующая селенид :slight_smile: Конечно же чистый селенид использовать не планируется, да и вопрос не о выборе фреймворка :wink:


#4

Ну, за параллельный запуск отвечает не селенид, а тестНГ.

Просто из вопроса непонятно: Как именно пробовали запускать? Как не получилось?

Если это паст из реального xml, м.б., движок просто не распознал параметр.


(Andrey Kurilov) #5

Спасибо тебе огромное!!!
Нашел опечатку в слове parallel
Полдня убил на это :frowning:


(Sergey Korol) #6

Логично. Без DTD то далеко не уехать. :wink:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">

Так можно и глаза сломать без встроенной валидации и автокомплита.


(asolntsev) #7

Всё это говорит о том, что TestNG сложный, его XML сложный - нафиг вам все эти сложности?
Посмотрите, как параллелятся тесты в билд-скрипте самого Selenide - всего одной строкой:

test {
  maxParallelForks = 4
}

Обычный просто JUnit, никаких XML, никаких сложностей.