在 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/