我的测试项目在BaseTest.class中具有@BeforeClass和@AfterClass:
public class BaseTest {
@BeforeClass(groups = {"first"})
public void beforeTest() {
getDriver().get("URL");
}
@AfterClass(alwaysRun = true)
public void afterTest() {
getDriver().close();
removeDriver();
}
}
及其FirstTest.Class:
public class SmokeTest extends BaseTest {
private PageOne pageOne = PageFactory.initElements(getDriver(), PageOne.class);
@Test(testName = "test1", groups = { "first" })
public void firstTest() {
pageOne.goSomething();
}
@Test(testName = "test2", groups = { "first" })
public void secondTest() {
pageOne.goSomethingElse();
}
}
WebDriver单例:
public class WebDriverSingleton {
private static WebDriver driver;
public static WebDriver getDriver() {
if (driver == null) {
driver = new ChromeDriver();
}
return driver;
}
public static void removeDriver() {
driver.quit();
driver = null;
}
}
它工作正常。直到我添加了要在新的浏览器实例中开始的新案例。
我添加的内容:
public class BaseModuleTest {
@BeforeClass(groups = {"second"})
public void beforeClass() {
getDriver().get("another URL");
}
}
public class ModuleTest extends BaseModuleTest {
private PageTwo pageTwo = PageFactory.initElements(getDriver(), PageTwo.class);
private PageOne pageOne = PageFactory.initElements(getDriver(), PageOne.class);
@Test(testName = "test1", groups = {"second"})
public void testUp() {
pageTwo.goToPageOne();
pageOne.doSomething(); // getting fail here
}
}
当我使用testgnconfiguration.xml开始测试
org.openqa.selenium.NoSuchSessionException:会话ID为null。调用quit()后使用WebDriver吗?
就我使用的页面对象模型和在“第二个”组中使用的“第一”组中初始化的相同页面而言,我猜它们以某种方式“记住”了第一个会话ID变成“ null”。 尽管我在ModuleTest.test1()中重新初始化了它们。
无论如何,如果我的建议是正确的,如何将新的sessionId传递给实例化的页面对象?还是重新初始化它们的正确方法是什么?
答案 0 :(得分:0)
看起来您的问题是:
@BeforeClass(groups = {"first"})
和
@AfterClass(alwaysRun = true)
完成类后,您始终会销毁驱动程序对象,但是您只是为特定组中的类创建驱动程序对象。我建议将您的@BeforeClass
调整为:
@BeforeClass(alwaysRun = true)
或
@BeforeClass(groups = {"first, "second"})