java - 如何调用 JUnit 测试作为另一个测试的设置?

标签 java selenium selenium-webdriver junit

我正在尝试创建一个 JUnit 测试,该测试要求用户使用管理员帐户登录。 为了避免重复代码,我完成了 Login JUnit 测试和 GoToAdminPage JUnit 测试。

  • 第一个访问登录页面并登录。
  • 第二个尝试访问只有管理员才能访问的菜单,其目的是从第一个离开的地方继续。我想要的 GoToAdminPage 是在 Login 结束的同一页面上开始并具有完全相同的环境。

这个想法是,通过创建Login自动化测试,我可以将其重复用于我将来想做的任何需要管理员权限的测试。

我想做的是,在GoToAdminPagesetUp()中调用第一个测试。 但是,它的作用是为 GoToAdminPage 启动一个测试浏览器,然后立即为 Login 启动另一个测试浏览器,该浏览器自 Login.tearDown() 包含一个 driver.quit() 指令。

我想要的是 GoToAdminPage 期望在同一页面上正确接收 Login 结束,它没有 get 指令,所以它永远不会离开 Firefox 起始页面。

我已经尝试过一些事情。我的每个测试都继承 BasicTest 类,该类定义了许多内容(WebDriver、JS Executor、通用实用函数等)。在该类中,我创建了一个调用 setUp()test()perform() 函数。

这样,在GoToAdminPage中,我所要做的就是在GoToAdminPage.setUp()中调用Login.perform(),从技术上讲,这将实现我想做的事情。然而,事实并非如此,并且具有与我上面提到的相同的效果。

在网上查找,我发现我也可以让GoToAdminPage扩展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...
    }
}

然而,这仍然具有上述效果。

最佳答案

将“登录”步骤定义为常规方法(未使用 @Test 进行注释)。然后您可以从任何您想要的地方调用该方法。来自您的登录测试方法(在执行步骤后添加所需的断言)以及来自任何 setUp 方法,而无需实际运行登录测试。

关于java - 如何调用 JUnit 测试作为另一个测试的设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58545098/

相关文章:

python - 如何在Python3中使用selenium检查复选框

selenium - 如何使用 Selenium 在 Firefox 中单击 "Launch Application"对话框?

java - Selenium Webdriver -dragAndDrop 在 Firefox 32 中不起作用

java - 浏览搜索结果页面并使用 selenium webdriver 查找链接

java - 如何通过 Silk Test Classic 自动化 Java Swing 应用程序?

java - Class<T> 和静态方法 Class.forName() 让我抓狂

javascript - 如何从 Dropdown 中选择具有 SELECT OPTION 标签的元素?

c# - 错误 CS7036 没有给定的参数对应于 'driver' 的所需形式参数 'SpecflowBaseTest.SpecflowBaseTest(IWebDriver)'

java - 尝试将 BufferedImage 绘制到文件中,但不起作用

java - 无法从 oracle 数据库读取德语字符