当前位置: 首页 > 知识库问答 >
问题:

如何设计没有重复项的页面对象模型?

单昊穹
2023-03-14

我正在进行UI自动化测试,使用POM与Python和Selenium。我想知道如何处理重复的测试用例。

例如,您有两个网页:登录页和主页。我想测试三个测试用例。

  1. 未登录的主页功能:登录前测试主页。py

(1和3有很多共同点。3有额外的功能。1是3的子集)

每个测试用例有三个文件,我已经实现了1和2。但是对于第三个模块,我只是从1和2模块中导入了相关函数。

问题是验证登录是否重复。在这种情况下,您是否每次都进行登录验证?在使用pytest排序或pytest依赖关系自动化这些案例时,您是否也给出了顺序或依赖关系?

我能想到的另一个例子是“注销”。自动注销功能时,需要先登录。在这种情况下,您是否预先再次添加登录验证并实现注销?在这种情况下,您是也提供依赖关系,还是仅仅使脚本独立?

先谢谢你。

共有2个答案

杭志泽
2023-03-14

由于这是一个设计问题,没有一个正确的答案,但我会给你一些提示和指导,我遵循。

  • 我不设计每个测试对应一个页面。相反,我设计了简短的场景来验证与客户最相关的行为和结果
  • 登录是一个非常具体和特殊的情况。通常,大多数测试需要从登录开始,以便获得他们实际需要测试的内容,尽管他们并不真正关心验证登录过程本身。此外,您通常希望有一些其他专门验证登录过程的测试。对于第一类测试,您可以在每次测试之前,甚至在使用固定装置的所有测试之前执行登录。夹具可以验证登录是否成功,只是为了防止测试在失败的情况下继续进行,但我不认为这是测试验证的一部分。这个装置应该以最简单和最可靠的方式执行登录,因为它的目的不是找到更多的错误,而是帮助我们在测试中到达我们真正关心的地方。这意味着您可以使用API或采取任何其他快捷方式,以便处于登录状态。
  • 对于特定于登录的测试,我通常会将它们与注册过程结合起来,因为注册的主要目的是允许用户登录,登录的成功是注册过程的结果,所以没有太多的目的来测试一个没有另一个。
  • 关于代码和页面对象的重用:在我的第一个项目之后,我遵循的过程是以最可读的方式编写每个测试,使用还不存在的类和方法来描述场景。然后我实现了这些类和方法来使测试通过。在第二个测试中,如果我意识到我已经实现了一个操作,我会重用这段代码,如果我需要一些与我已经实现的相似但不完全相同的东西,我会重构原始函数以便在我的新测试中使用,消除沿途的任何重复。这有助于我以非常可重用和无重复的方式设计代码。有时它会引导我创建页面对象,有时它会引导我创建其他设计模式。您可以在我的《测试自动化完成指南》一书中找到关于这种方法的更详细的解释,包括一步一步的教程。

HTH.

冯翔
2023-03-14

您可以使用cookies来处理身份验证。它将大大加快你的测试。一个例子:

public void setAuthenticationCookies() {
        Cookie at = new Cookie("Cookie_AccessToken", prop.getAccessToken(), "/", DatatypeConverter.parseDateTime("2030-01-01T12:00:00Z").getTime());
        Cookie rt = new Cookie("Cookie_RefreshToken", prop.getRefreshToken(), "/", DatatypeConverter.parseDateTime("2030-01-01T12:00:00Z").getTime());
        driver.manage().addCookie(at);
        driver.manage().addCookie(rt);
}

更多信息:https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/Cookie.html

对于注销问题,我建议您先登录,然后注销,以便使您的测试彼此独立。

 类似资料:
  • 希望我不是第一个遇到这个问题的人。 问题是我还需要检查该元素在页面上是否可见,并且在执行checked之前它会出错(例如,使用WebDriverWait,将ExpectedConditions.ElementisVisible(by)传递给.Until方法)。 我如何将IWebElement和By locator清晰地分开,并允许在需要的地方进行这种明确的等待/检查? TLDR-如何维护页面对象模

  • 我有一个数组。如何按类型、名称和大小以及递增量找到双重许可。增加数量后删除相同的。

  • 我正在尝试使用Selenium和C#实现web测试的自动化。 我有一个web应用程序,它的某些部分(如页眉和页脚)在多个页面上重复。 假设我有SecA,SecB,secc部分。在我的页面中,它将显示为第1页将有{SecA,SecB,SecC},第2页将有{SecA,SecB},第3页将有{SecB,SecC}。

  • 我工作的tkinter模块在python 3.3我是相对较新的,这是与条目框工作。有人能给我解释一下为什么吗?我做了一个类似的程序,只有一个条目运行良好。

  • 我遵循这里的POM指南 问题是当输入有效的用户/密码时,POM正在返回新的HomePage(驱动程序),新的HomePage构造函数正在通过传递的驱动程序验证我们实际上在“主页”页面上。自然,驱动程序被打开到登录页面,所以在主页上查找元素是徒劳的。POM方法应该如何将“PageFactory”主页对象实际“打开”返回到主页?

  • 嗨,我有一个报告,它在我的本地机器上运行良好。我正在使用eclipse birt和birt viewer应用程序。当我在云机器(我们在互联网上带来的)上部署时,报告pdf没有显示,而是显示以下错误。有什么问题吗? 我的本地主机操作系统是windows7。云服务器是linux。我们正在使用birt4.3。工作环境是tomcat7,mysql数据库。我们正在使用pojodata源生成报告。请帮我解决这