java - 在不同的浏览器会话中运行测试,但总是得到“NoSuchSessionException:会话 ID 为空”。调用 quit() 后使用 WebDriver?
问题描述
我的测试项目在 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 进行测试时
- “第一”组传球
- 浏览器窗口关闭
- WebDriver 的新实例打开新的浏览器窗口
- 转到网址
- 当开始与在“第一次”组运行期间实例化的页面上的第一个 WebElement 交互时返回错误:
org.openqa.selenium.NoSuchSessionException:会话 ID 为空。调用 quit() 后使用 WebDriver?
就我使用页面对象模型并且在“第二”组中使用已在“第一”组中初始化的相同页面而言,我猜他们以某种方式“记住”第一个会话 ID,它变成了“无效的'。虽然我在 ModuleTest.test1() 中重新初始化它们...
无论如何,如果我的建议是正确的,如何将新的 sessionId 传递给实例化的页面对象?或者什么是重新初始化它们的正确方法?
解决方案
看起来你的问题是:
@BeforeClass(groups = {"first"})
和
@AfterClass(alwaysRun = true)
您总是在完成一个类后销毁驱动程序对象,但您只是为特定组中的一个类创建一个驱动程序对象。我建议将您调整@BeforeClass
为:
@BeforeClass(alwaysRun = true)
或者
@BeforeClass(groups = {"first, "second"})
推荐阅读
- javascript - 如何在没有node.js的js中建立客户端-客户端连接?
- django - Django - 表单初始化如何工作?
- tensorflow - keras 上的分类焦点损失
- cordova - 当我运行 cordova build android 我有这个错误:com.google.android.gms plugin dependencies error
- sql-server - 将 XML 直接从 SQL 服务器输出到文件
- python - Docker Container 仅在退出时打印输出
- spring - 使用空权限成功登录 Spring OAuth2
- python - 如何操作目录路径以跨多个操作系统工作?
- scala - Parallel Seq 对执行语句序列有多大好处?
- css - 为 Angular 自定义组件添加样式