Как закрыть браузер после сбоя теста во время параллельного тестирования - PullRequest
0 голосов
/ 18 января 2019

Попытка закрыть браузер при сбое теста в Selenium. Попытка включить AfterMethod, но не браузер, все еще не закрывается при сбое. Любая помощь будет принята с благодарностью!

Вот мой класс Java:

public class googleTestClass extends Methods{

public void executeGoogle() throws InterruptedException {
    this.goToURL("https://www.google.com");
    this.enterValue("name","q","google test 1");
}

@Test
public void test1() throws InterruptedException {

    googleTestClass object1;
    object1 = new googleTestClass();
    object1.launchBrowser();
    object1.executeGoogle();
}

@Test
public void test2() throws InterruptedException {

    googleTestClass object2;
    object2 = new googleTestClass();
    object2.launchBrowser();
    object2.executeGoogle();
}

@AfterMethod
public void tearDown() throws InterruptedException, IOException {
    driver.quit();
}
} 

Вот класс упомянутых методов: // импортируем операторы

public class Methods {

public WebDriver driver;

public void launchBrowser() {System.setProperty("webdriver.chrome.driver","C:\\chromedriver_win32\\chromedriver.exe");

    driver = new ChromeDriver();
}

public void goToURL(String url) {
    driver.get(url);
}

    public void enterValue(String htmltype, String identifier, String value) throws InterruptedException {
    if (htmltype == "id") {
        WebElement element = driver.findElement(By.id(identifier));
        element.clear();
        element.sendKeys(value);
        element.submit();
    }
    if (htmltype =="name") {
        WebElement element = driver.findElement(By.name(identifier));
        element.clear();
        element.sendKeys(value);
        element.submit();
    }

    Thread.sleep(3000);
}

Вот используемый файл testNG:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="methods">

  <test thread-count="5" name="Test" parallel="methods">
    <classes>
         <class name="webDrivertests.googleTestClass">
            <methods>
                <include name ="test1"/>
                <include name ="test2"/>
            </methods>
        </class>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

Если AfterMethod не достигнут, потому что он написан неправильно или проблема заключается в driver.quit? Любая помощь будет большой. Спасибо!

1 Ответ

0 голосов
/ 18 января 2019

Проблема в том, что когда вы запускаете класс Test и вызывается @AfterMethod, он пытается выйти из драйвера, принадлежащего верхнему классу, но не из классов, которые создаются внутри методов.Вот небольшой пример для лучшего понимания:

Класс теста JUnit:

import org.junit.Test;
import org.junit.After;

public class intTestClass extends Methods{

    @Test
    public void test1() throws InterruptedException {
        intTestClass object1;
        object1 = new intTestClass();
        object1.setInt();
    }

    @After
    public void tearDown() {
        System.out.println("testInt is: "+ testInt);
    }
}

И класс Methods:

public class Methods {

    public int testInt = 0;

    public void setInt() {
        testInt = 1;
    }

}

Здесь, когда вы запускаете тест JUnitвы ожидаете, что значение testInt будет напечатано как 1. Однако метод с аннотацией @After(@AfterMethod for testng) проверяет значение переменной testInt, которая относится к верхнему уровню intTestClass, ачем intTestClass , который создается в методе test1().

Поэтому мы видим вывод как:

testInt is: 0

Если мы применим это к вашему сценарию,что вам нужно сделать, это переместить ваш launchBrowser() метод в ваш тестовый класс и вызвать метод с аннотацией @BeforeClass.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...