我目前正在使用Java中的Cucumber和Selenium WebDriver来测试Web应用程序。 我对浏览器关闭并在每个测试用例之间重新打开这一事实感到不满。
首先,它非常缓慢,此外,对我来说没有任何意义。
我想要做的是在每次测试之间注销应用程序并保持浏览器打开。
我认为这条线可以完成这项工作,但它没有按预期工作:
driver.navigate().to("http://myurl.url");
而不是:
driver.get("http://myurl.url");
它会打开一个新的浏览器。我理解为什么会这样做,但我想附加到我之前的浏览器会话中。
答案 0 :(得分:7)
我找到了一种在测试之间保持浏览器畅通的方法。我将Singleton Design Pattern
与picocontainer
一起使用。
我在本课程的static
中声明了我的浏览器。
public class Drivers {
private static boolean initialized = false;
private static WebDriver driver;
@Before
public void initialize(){
if (!initialized){
initialized = true;
driver = new FirefoxDriver();
driver.get("http://myurl.url");
}
}
public static WebDriver getDriver(){
return driver;
}
}
在每个StepDefinitions
类中,我都有一个构造函数来实例化我的Singleton
。
public class DashboardSteps extends SuperSteps {
Drivers context;
@After
public void close(Scenario scenario) {
super.tearDown(scenario);
loginPage = homePage.clickLogout();
loginPage.waitPageLoaded();
}
public DashboardSteps(Drivers context) {
super(context);
}
SuperSteps课程:
public class SuperSteps {
protected Drivers context;
public SuperSteps(Drivers context){
this.context = context;
}
如您所见,我在每次测试后返回logIn页面,这样我就可以独立运行每个测试。
答案 1 :(得分:0)
如果我更正,您的浏览器实例化可能会以@Before
标记的setUp
方法进行,并且会以@After
标记为tearDown
的方式进行关闭。如果你想停止关闭浏览器,那么只需在tearDown中注释掉那些代码,或者你正在做什么。
答案 2 :(得分:0)
您可以使用@BeforeClass
和@AfterClass
注释。它们分别在@Before和@After之后运行。假设您尝试测试的测试用例属于同一个类,您可以在WebDriver
方法中初始化@BeforeClass
并在@AfterClass
方法中将其关闭。