java - 并行测试期间测试失败后如何关闭浏览器

标签 java selenium testng

在 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 中? 任何帮助都会很好。谢谢!

最佳答案

问题是,当您运行 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);
    }
}

和方法类:

public class Methods {

    public int testInt = 0;

    public void setInt() {
        testInt = 1;
    }

}

在这里,当您运行 JUnit 测试时,您期望将 testInt 值打印为 1。但是,带有注释 @After(@AfterMethod for testng) 的方法检查 testInt 变量的值,该变量属于 顶级 intTestClass,而不是在 test1() 方法内实例化的 intTestClass

因此,我们看到的输出为:

testInt is: 0

如果我们将此应用到您的场景,您需要做的是将 launchBrowser() 方法移动到测试类中,并使用 @BeforeClass 注释调用该方法。

关于java - 并行测试期间测试失败后如何关闭浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54259467/

相关文章:

java - 生成动态文件并在 GWT 中下载

java - 我应该使用哪种数据结构来表示这个数据集?

c# - 确定 html 节点的样式

excel - 如何通过 Selenium VBA 向某些 HTML 元素发送文本?

java - 如何同时从 Jenkins 运行多个 Selenium 测试?

java - 我遇到过的最奇怪的错误

java - 这个算法可行吗?在固定时间段内随机执行时间

javascript - 在 Selenium + NodeJS 中以字符串形式获取下拉列表中当前选定的选项

java - 从属性文件加载不同的集成

testng - testng和gradle-看到死锁测试的输出了吗?