Как работает мой фреймворк:
- методы зависят от предыдущих методов, например, шаг 2 зависит от шага 1, шаг 3 на шаге 2 и т. Д. - что это делает, если один метод не работаетвсе остальные пропущены.
- Я добавил метод разрыва с аннотацией @AfterMethod, надеясь, что после сбоя теста драйвер закроется и откроется другой драйвер для testcase2 (я так знаю плохо)
- выполнение этого из testng.xml дает мне следующий поток: выполняется первый тестовый пример (допустим, что где-то посередине он не выполняется).драйвер закроется, но драйвер не запустится для второго теста.
Проблема с разрывом и @AfterMethod заключается в том, что программа пытается вызвать driver.quit для каждого метода, даже если драйверуже закрыт.
Session ID is null. Using WebDriver after calling quit()?
Есть ли способ сделать следующее? - если шаг теста не пройден, пропустите все остальные в тестовом примере (класс java), затем закройте браузер и снова откройте браузер для второго тестового случая. Я знаю, @AfterMethod - плохой способ приблизиться к этому.Я где-то читал, что использование статических атрибутов для WebDriver - плохой подход в этом случае.Если да, то как мне провести рефакторинг моего кода, чтобы иметь возможность использовать вышеуказанный поток?(полужирный).
Может ли это быть из-за слушателя?Дома я не могу получить доступ к инструменту, куда я отправляю результаты, поэтому он работает отлично.На работе, где к инструменту можно получить доступ локально, слушатель работает, и это не удается.
Я предполагаю, что проблема возникает из-за слушателя.
Спасибо!
testng.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="AutomationFramework">
<test name="RegistrationPart1">
<classes>
<class name="registration.testcase1" />
</classes>
</test>
<test name="RegistrationPart2">
<classes>
<class name="registration.testcase2" />
</classes>
</test>
</suite>
Testcase1
public class testcase1 {
TNGDriver tngDriver = new TNGDriver();
@BeforeClass
public void initBrowser() {
tngDriver.initBrowser("chrome");
}
@Test(priority = 1)
public void step1() throws InterruptedException {
//do something
}
@Test(priority = 2, dependsOnMethods = {"step1"})
public void step2() {
//do something
}
Testcase2
public class testcase2 {
TNGDriver tngDriver = new TNGDriver();
@BeforeClass
public void initBrowser() {
tngDriver.initBrowser("chrome");
}
@Test(priority = 1)
public void step1() throws InterruptedException {
//do something
}
@Test(priority = 2, dependsOnMethods = {"step1"})
public void step2() {
//do something
}
метод tearDown
@AfterMethod
public void tearDown(ITestResult result) throws IOException, InterruptedException {
if(result.getStatus() == ITestResult.FAILURE) {
takeScreenshot(result);
quitAndKillTask();
}
}