我有抽象类,初始化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());
}
}
和其他同样精神的测试课。
如何重新配置此类,以便浏览器打开一次?
答案 0 :(得分:4)
如果您想在开始时打开浏览器并运行所有方法,然后将其关闭。
我建议您遵循以下两个步骤。
第1步 : 在 @BeforeSuite &&&关闭浏览器/ driversession的 @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)然后休息所有方法都在同一个浏览器中运行。
此处“ 类初始 ”包含浏览器启动代码和ClassA& ClassB是Init。
的子类希望这有帮助
答案 1 :(得分:2)
如果你想在一个实例中运行所有测试,我编写了自己的WebDriverFactory,所以这里有一些帮助的例子:
public static WebDriver getDriver(){
if (driver == null) {
return new FireFoxDriver();
} else {
return driver;
}
}
现在删除AfterClass并将其添加到您的类中,它将最终关闭您的浏览器
static {
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
try {
dismissDriver();
} catch (Exception e) {
}
}
});
}
public static void dismissDriver() {
if (driver != null) {
try {
driver.quit();
driver = null;
} catch (Throwable t) {
}
}
}