java - TestNG.xml - 第一个浏览器 session 关闭后,新的浏览器 session 不会打开

标签 java selenium webdriver testng

我的框架如何工作:

  • 方法依赖于之前的方法,例如步骤 2 取决于步骤 1,步骤 3 取决于步骤 2,依此类推 - 其作用是,如果一种方法失败,则跳过所有其他方法。
  • 我添加了一个带有注释@AfterMethod的拆卸方法,希望在测试失败后,驱动程序将关闭,另一个驱动程序将为testcase2打开(我知道这是不好的方式)
  • 从 testng.xml 运行它会给出以下流程:执行第一个测试用例(假设它在中间某个地方失败)。驱动程序将退出,但驱动程序不会启动第二个测试用例。

teardown 和 @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>

测试用例1

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
    }

测试用例2

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
    }

拆卸方法

   @AfterMethod
   public void tearDown(ITestResult result) throws IOException, InterruptedException {
        if(result.getStatus() == ITestResult.FAILURE) {
            takeScreenshot(result);
            quitAndKillTask();
        }
    }

最佳答案

如果您调用 driver.close(),这将关闭当前窗口。如果没有打开的 window ,司机就会退出。因此,当调用您的tearDown、driver.quit()时, session 已经结束并且您会收到错误。

在拆卸过程中,只需检查有效 session ,然后调用 driver.quit()(如果存在)

关于java - TestNG.xml - 第一个浏览器 session 关闭后,新的浏览器 session 不会打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53708136/

相关文章:

java - 静态建议。我究竟做错了什么?

java - 如何在Gradle中启用Java代理调试?

python - 如何修复 "element not interactable"异常?

Selenium 网络驱动程序 : Random Error determining if element is visible

c# - selenium webdriver 单击 javascript 链接

python - selenium webdriver 加载页面的时间太长

java - 从 Java 代码访问 javaFX 元素(外部 Controller 类)

java - SQLite JDBC 包装器和 matchinfo()

java - 使用 Selenium Webdriver 提取包含 <br> 标记的文本

python - 从与 Selenium 中的模式匹配的所有元素中获取文本