为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

蝴蝶不菲 2023-12-13 17:15:50
我正在尝试创建一个 JUnit 测试,要求用户使用管理员帐户登录。为了使我不必重复代码,我完成了LoginJUnit 测试和GoToAdminPageJUnit 测试。首先访问登录页面并登录。第二个尝试访问只有管理员才能访问的菜单,旨在从第一个离开的地方继续。我想要的是GoToAdminPage从相同的页面开始并以相同的环境Login结束。这个想法是,通过创建Login自动化测试,我可以将其重复用于我将来想做的任何需要管理员权限的测试。我想做的是,在 中setUp()调用GoToAdminPage第一个测试。然而,它的作用是,它启动一个测试浏览器GoToAdminPage,然后立即启动另一个测试浏览器,该浏览器由于包含指令Login而关闭。Login.tearDown()driver.quit()我想要的是GoToAdminPage期望在同一页面结束时正确拾取Login,它没有get说明,因此它永远不会离开起始的 Firefox 页面。我已经尝试过一些事情。我的每个测试都继承该类BasicTest,该类定义了许多内容(WebDriver、JS Executor、通用实用函数等)。在该课程中,我创建了一个perform()调用setUp()和的函数test()。这样,在 中GoToAdminPage,我所要做的就是调用Login.perform(),GoToAdminPage.setUp()这将在技术上实现我想做的事情。然而,事实并非如此,并且具有与我上面提到的相同的效果。在网上查看,我发现我也可以做到这一点GoToAdminPage extends Login,但也有相同的结果。最后,我尝试将整个Login.test()过程放在类中的一个单独的函数中Login,我可以在 inside 调用该函数GoToAdminPage,但这具有相同的结果。总而言之,似乎发生的情况是,当我在内部调用另一个 JUnit 测试时GoToLoginPage,它会执行测试,但将其作为单独的测试进行。我想要的是能够本质上使这一切成为一个大测试,一旦我调用了Login,我就可以在我的用户登录的情况下与登录后页面进行交互。本质上我只是想GoToAdminPage成为 的Login扩展过程。这可能吗?
查看完整描述

3 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

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



查看完整回答
反对 回复 2023-12-13
?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

最后我找到了解决方案:

  • GoToAdminPage延伸Login

  • GoToAdminPage.setUp()来电parent.setUp()

  • GoToAdminPage.test()来电parent.test()

使用它,我能够使我的第二个测试使用其父级作为设置阶段。


查看完整回答
反对 回复 2023-12-13
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

您应该应用页面对象模式,并创建一个登录对象页面。

Web 自动化中最流行的模式之一是所谓的页面对象模式。要理解该模式的主要目标,首先您需要考虑您的 Web 自动化测试正在做什么。他们导航到不同的网页并在各种元素上单击/键入。页面对象模式将页面上发生的所有元素、操作和验证包装在一个对象中——页面对象。

页面对象模式的一些优点如下所示,

  • 减少代码的重复

  • 使测试更具可读性和健壮性

  • 提高测试的可维护性

恕我直言,在测试用例之间创建依赖关系并不是一个好的做法。

例子:

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.support.FindBy;

import org.openqa.selenium.support.PageFactory;


public final class LoginPage {


    @FindBy(id="username")

    private WebElement username;


    @FindBy(id="password")

    private WebElement password;


    @FindBy(id="loginBtn")

    private WebElement submit;


    public LoginPage(WebDriver driver) {

        PageFactory.initElements(driver, this);

    }


    public void submit(String username, String password) {

        this.username.sendKeys(username);

        this.password.sendKeys(password);

        submit.click();

    }

}


查看完整回答
反对 回复 2023-12-13
  • 3 回答
  • 0 关注
  • 137 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信