Serenity + Winium. Как подружить ужа с ежом?

serenity
winium
java
webdriver
Теги: #<Tag:0x00007fedc07d2638> #<Tag:0x00007fedc07d2480> #<Tag:0x00007fedc07d2318> #<Tag:0x00007fedc07d2188>

(inkvizitorz) #1

Всем доброго времени суток!

Есть некоторый опыт автоматизации на Serenity.

Попробовал написать классический тест на JUNIT для тестирования GUI на примере калькулятора, блокнота с использование winium. Тест успешно работает.

Подскажите, каким образом можно подружить Serenity и winium?


(inkvizitorz) #2

Запускаю вот так:
mvn clean integration-test serenity:aggregate -Dtestname=**/CalculatorStoryTest.java -Dwebdriver.remote.driver=winium -Dwebdriver.remote.url=http://127.0.0.1:9999

Если в коде Story использую @RunWith(SerenityParameterizedRunner.class), то тест не запускается:
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.64 sec

Если же убираю данный Runner, то тест успешно выполняется. Но отчеты, естественно не строятся.

Что посоветуете?


(Николай Анатольевич) #3

Я сейчас возможно глупость ляпну, но почему именно SerenityParameterizedRunner, а не просто SerenityRunner?


(inkvizitorz) #4

ThucydidesRunner тоже пробовал - не работает.


(Николай Анатольевич) #5

А можно посмотреть ваш pom и полный вывод при использовании SerenityParameterizedRunner


(Viktor Hreptovich) #6

В Serenity нет поддержки winium, нет смысла запускать с параметрами
Dwebdriver.remote.driver=winium -Dwebdriver.remote.url=http://127.0.0.1:9999


(inkvizitorz) #7
<?xml version="1.0" encoding="UTF-8"?>


4.0.0

<groupId>ru.*.demo-winium</groupId>
<artifactId>demo-winium</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <serenity.version>1.2.2</serenity.version>
	<testname>**/*Test.java</testname>
    <!-- <webdriver.driver>winium</webdriver.driver> -->
</properties>

<repositories>
  <repository>
    <snapshots>
    <enabled>false</enabled>
    </snapshots>
    <id>central</id>
    <name>bintray</name>
    <url>http://jcenter.bintray.com</url>
  </repository>
</repositories>
<pluginRepositories>
  <pluginRepository>
    <snapshots>
    <enabled>false</enabled>
    </snapshots>
    <id>central</id>
    <name>bintray-plugins</name>
    <url>http://jcenter.bintray.com</url>
  </pluginRepository>
</pluginRepositories>
    
<dependencies>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>2.48.2</version>
    </dependency> 
    
	<dependency>
        <groupId>net.serenity-bdd</groupId>
        <artifactId>serenity-core</artifactId>
        <version>${serenity.version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.7</version>
    </dependency>
    <dependency>
        <groupId>net.serenity-bdd</groupId>
        <artifactId>serenity-junit</artifactId>
        <version>${serenity.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.assertj</groupId>
        <artifactId>assertj-core</artifactId>
        <version>1.7.0</version>
    </dependency>
	<dependency>
        <groupId>com.github.2gis.winium</groupId>
        <artifactId>winium-webdriver</artifactId>
        <version>0.1.0-1</version>
    </dependency>
	<dependency>
        <groupId>com.github.2gis.winium</groupId>
        <artifactId>winium-elements-desktop</artifactId>
        <version>0.2.0-1</version>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.19.1</version>
            <configuration>
                <skip>true</skip>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-failsafe-plugin</artifactId>
            <version>2.19.1</version>
            <configuration>
                <includes>
                    <include>${testname}</include>
				</includes>
                <argLine>-Xmx512m</argLine>
				<systemPropertyVariables>
                    <webdriver.driver>${webdriver.driver}</webdriver.driver>
                </systemPropertyVariables>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>integration-test</goal>
                        <goal>verify</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.6.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
		<!-- <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>2.2.1</version>
            <executions>
                <execution>
                    <id>attach-sources</id>
                    <goals>
                        <goal>jar-no-fork</goal>
                    </goals>
                </execution>
            </executions>
        </plugin> -->
		<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>2.10.4</version>
            <executions>
			  <execution>
				<goals>
				  <goal>aggregate</goal>
				  <goal>fix</goal>
				  <goal>javadoc</goal>
				  <goal>test-aggregate</goal>
				  <goal>test-fix</goal>
				  <goal>test-javadoc</goal>							  
				</goals>
			  </execution>
			</executions>
        </plugin>
        <plugin>
            <groupId>net.serenity-bdd.maven.plugins</groupId>
            <artifactId>serenity-maven-plugin</artifactId>
            <version>${serenity.version}</version> 
			<executions>
                <execution>
                    <id>serenity-reports</id>
                    <phase>post-integration-test</phase>
                    <goals>
                        <goal>aggregate</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

(inkvizitorz) #8

А как же расширенная интеграция с другими реализациями веб драйвера?

Из официальной документации:
10. Advanced WebDriver integration
10.1. Custom WebDriver implementations

You can add your own custom WebDriver provider by implementing the DriverSource interface. First, you need to set up the following system properties (e.g. in your serenity.properties file):

webdriver.driver = provided
webdriver.provided.type = mydriver
webdriver.provided.mydriver = com.acme.MyPhantomJSDriver
thucydides.driver.capabilities = mydriver

Your custom driver must implement the DriverSource interface, as shown here:

public class MyPhantomJSDriver implements DriverSource {

@Override
public WebDriver newDriver() {
    try {
        DesiredCapabilities capabilities = DesiredCapabilities.phantomjs();
        // Add
        return new PhantomJSDriver(ResolvingPhantomJSDriverService.createDefaultService(), capabilities);
    }
    catch (IOException e) {
        throw new Error(e);
    }
}

    @Override
public boolean takesScreenshots() {
    return true;
}

}

This driver will now take screenshots normally.


(Viktor Hreptovich) #9

Прошу прощения. Не знал, что все так серьезно.
Так какой из SerenityParameterizedRunner или SerenityRunner Вы используете?
Если SerenityParameterizedRunner, то как с инициализацией @TestData?


(inkvizitorz) #10

SerenityParameterizedRunner.
Да очень просто.

@UseTestDataFrom(value=“DemoStoryTestData.csv”, separator=’;’)
public class DemoStoryTest {

public DemoStoryTest() {}
private String variable1;

private Sring variablen;


//геттеры
//сеттеры
}


(Viktor Hreptovich) #11

Странно… Вывод результатов
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0…
Как будто у вас csv без данных.
Может попробуйте через @TestData, а не @UseTestDataFrom


(Николай Анатольевич) #12

А весь код теста есть возможность выложить? Мне кажется это может ускорить процесс…


#13

Нужно использовать @TestData
Также важно определить конструктор класа через которий будут передаватся дание в тест каждий раз при запуске теста
Пример: http://thucydides.info/docs/serenity-staging/#_data_driven_tests