问题:Selenium 和 TestNG 都在一个浏览器中测试

我有抽象类,在其中初始化 webdriver。所有执行测试的类都继承自他。我想减少测试时间,为所有测试打开一个浏览器。

class AbstractClassCase {
    public static WebDriver driver;

    @BeforeClass    
    @Parameters({"webDriver", "applicationHost", "applicationPort", "driverHost", "driverPort",  "username", "password"})
    public void setUp(
        String webDriverIdentifier,
        String applicationHost,
        @Optional String applicationPort,
        @Optional String driverHost,
        @Optional String driverPort,
        @Optional String username,
        @Optional String password){      

        driver = new FirefoxDriver();
        driver.get("localhost");
        login(username, password)

    }

    @AfterСlass
    public void tearDown() {   
        driver.quite();
    }     

}

public class TestButton extends AbstractClassCase {
    @Test
    public void testClickButtonNo() {
        WebElement button = driver.findElement(By.id("button-no"));
        button.click();
        WebElement status = driver.findElement(By.id("button-status"));
        Assert.assertEqual("Cancel", status.getText());
   }
}

和其他考试班本着同样的精神。

我怎样才能重新配置这个类,让浏览器打开一次?

解答

如果您想在开始时打开浏览器并运行所有方法然后关闭它。

我建议遵循 2 个步骤。

Step 1:在带有 @BeforeSuite && @AfterSuite 的方法中包含浏览器调用代码,用于关闭浏览器/驱动程序会话。这可以确保这些测试在测试套件之前和之后运行一次。

protected static WebDriver Browser_Session;

@BeforeSuite
public void beforeSuite() {
    Browser_Session=new FirefoxDriver();
    Browser_Session.manage().timeouts().implicitlyWait(30000, TimeUnit.MILLISECONDS);
}

@AfterSuite
public void afterSuite() {
    Browser_Session.quit();
}

Step2 :打开 testng.xml 并将所有此类(测试方法)包含在单个套件下,从而确保首先调用浏览器(通过 Selenium),然后其余所有方法都在同一个浏览器中运行。 在此处输入图像描述

这里“Class Init”包含浏览器启动代码,ClassA 和 ClassB 是 Init 的子类。

希望这可以帮助

Logo

Python社区为您提供最前沿的新闻资讯和知识内容

更多推荐