Одному мне интересно взглянуть на testng.xml
? Да и как собственно происходит запуск при использовании той самой xml? Maven, руки?
Если пускать руками-то фелятся оба класса. Если мавеном то первый класс отрабатывает, а второй фейлится.
вот код testng.xml
не смотрите что названия классов другие…у себя переделал немного для наглядности.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
<test verbose="2" name="Test">
<classes>
<class name="iGovTests.DocumentsTest"/>
<class name="iGovTests.DocumentsTest2"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
вот на всякий случай pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>iGovAT</groupId>
<artifactId>iGovAT</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<inherited>true</inherited>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>testng.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.7</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.48.2</version>
</dependency>
</dependencies>
</project>
простите, уточню. запуск через testng.xml
и maven дает один и тот же результат(первый класс проходит, второй падает)
при запуске через временный файл testng-customsuite.xml
(проект-run as) падает всё
а почему у вас клас нейм не совпадает с названиями тестовых классов ?
название тестовых классов соответствует указанному в testng.xml
Не совсем…
@BeforeTest: The annotated method will be run before any test method belonging to the classes inside the tag is run. друг
поменяй на беформетод посмотри что получится ?
У вас 2 класса, которые наследуют TestBase
. При этом экземпляр ApplicationManager
создается лишь однажды. О чем речь собственно?
П.С. Либо разносите классы по разным test тэгам, либо меняйте аннотацию.
это не решение, так как в любом случае придется запускать и весь Suite и будет не один класс в тесте.
какие еще варианты?
в смысле не решение ? вам показал ив чем причина и даже указали как решить , или вы Дмитрий не поняли в чем загвоздка ?
скорее всего не понял,поясните пожалуйста
У вас 1 бефортест он запустится перед тегом тест , 1 бефор тест 1 экземпляр app!!! а надо 2 экземпляра в вашем случае для каждого тестового класса
Вы еще раз простите за глупые вопросы(только начинаю изучать автоматизацию и программирование).
с аннотацией BeforeClass
конечно все будет работать, но я считаю это нерациональный подход, так как очень много времени будет занимать старт/стоп браузера каждый раз.
Вопрос: что нужно доработать в коде, что бы создавалось нужно кол-во экземпляров ApplicationManager
?
Тут дело скорее в понимании основных концепций ООП и механики работы подключаемых библиотек.
На пальцах касательно ООП: у вас есть 2 тестовых класса, каждый из которых наследует TestBase
, т.е. физически у вас будет 2 независимых объекта ApplicationManager
при запуске.
На пальцах касательно механики работы TestNG
: у вас есть xml
, в котором оба класса физически являются частью “тестовой группы”:
<test verbose="2" name="Test">
Далее вы в TestBase
заключаете ключевой метод, отвечающий за инициализацию объекта ApplicationManager
, под аннотацию @BeforeTest
. Фактически, глядя на xml
, вы ставите ограничение на вызов инициализатора ApplicationManager
. Другими словами, он будет вызван лишь раз - при обработке первого класса. Отсюда и вытекает вполне логичный NPE, т.к. второй объект остается неинициализированным. Вся ирония в том, что вы сами это ограничение и поставили.
Исходя из того, что вас категорически не устраивает инициализация драйвера на уровне класса, выхода тут 2:
- Не требующий изменений в коде:
<suite name="Suite">
<test verbose="2" name="Test1">
<classes>
<class name="iGovTests.DocumentsTest"/>
</classes>
</test>
<test verbose="2" name="Test2">
<classes>
<class name="iGovTests.DocumentsTest2"/>
</classes>
</test>
</suite>
- Вынуждающий менять область видимости
ApplicationManager
:
protected static ApplicationManager app;
При этом, вы автоматически добавляете себе головной боли при потенциальном внедрении масштабирования. Не говоря о том, что подобное объявление (в силу специфики вашей реализации) с точки зрения ООП - будет весьма абсурдным.
Делайте
static ApplicationManager app;
вот вам и весь ответ.
Всем огромное спасибо за помощь.Разобрался.Может напоследок литературы посоветуете?
Для “спасибо” есть спец. кнопка.
А так же - отметка решенного вопроса:
Вам литературы художественной, или может немного сузите выборку - программирование / тестирование / автоматизация?
Тестирование и автоматизация
Вот эту тему смотрели? Там куча линок на полезную литературу.
Спасибо:)