【发布时间】:2019-10-24 16:00:14
【问题描述】:
我正在尝试创建一个要求用户使用管理员帐户登录的 JUnit 测试。
为了避免重复代码,我进行了Login JUnit 测试和GoToAdminPage JUnit 测试。
- 第一个访问登录页面并登录。
- 第二次尝试访问只能由管理员访问的菜单,并且旨在从第一次离开的地方继续。对于
GoToAdminPage,我想要的是从与Login结束的相同页面和相同环境开始。
这个想法是,通过创建一个Login 自动化测试,我可以将它重用于我将来想做的任何需要管理员权限的测试。
我想做的是,在GoToAdminPage 的setUp() 中,调用第一个测试。
但是,它的作用是为GoToAdminPage 启动一个测试浏览器,然后立即为Login 启动另一个测试浏览器,因为Login.tearDown() 包含driver.quit() 指令而关闭。
我想要的是 GoToAdminPage 期望在同一页面上直接获取 Login 结束,它没有 get 指令,因此它永远不会离开起始 Firefox 页面。
我已经尝试了几件事。我的每个测试都继承了BasicTest 类,它定义了许多东西(WebDriver、JS 执行器、通用实用程序函数等)。在那个类中,我创建了一个调用setUp() 和test() 的perform() 函数。
这样,在GoToAdminPage 中,我所要做的就是在GoToAdminPage.setUp() 中调用Login.perform(),从技术上讲,这将实现我想做的事情。但是,它没有,并且与我上面提到的效果相同。
在网上看,我看到我也可以这样GoToAdminPage extends Login,但结果也是一样的。
最后我尝试将整个Login.test() 进程放在Login 类中的一个单独函数中,我可以在GoToAdminPage 中调用它,但结果相同。
总而言之,似乎正在发生的事情是,当我在 GoToLoginPage 中调用另一个 JUnit 测试时,它会执行测试,但它是作为一个单独的测试进行的。
我想要的是能够从本质上进行一项大型测试,一旦我调用了Login,我就可以在我的用户登录后与登录后页面进行交互。
本质上,我只是希望GoToAdminPage 成为Login 流程的扩展。
这可能吗?
这是我当前的代码:
登录.java
public class Login extends BasicTest {
/**
* @throws java.lang.Exception
*/
@Before
public void setUp() throws Exception {
super.setUp();
driver.get(constants.connectionUrl);
}
/**
* @throws java.lang.Exception
*/
@After
public void tearDown() throws Exception {
super.tearDown();
}
@Test
public void test() throws Exception {
this.login(driver);
}
public void login(WebDriver d) throws InterruptedException {
...login process using webdriver....
}
}
GoToAdminPage.java
public class GoToAdminPage extends BasicTest {
Login Login = new Login();
/**
* @throws java.lang.Exception
*/
@Before
public void setUp() throws Exception {
super.setUp();
Login.login(driver);
}
/**
* @throws java.lang.Exception
*/
@After
public void tearDown() throws Exception {
super.tearDown();
}
@Test
public void test() throws Exception {
...post login test process...
}
}
然而,这仍然具有上述效果。
【问题讨论】:
标签: java selenium selenium-webdriver junit