gpt4 book ai didi

selenium - 关于页面对象模型模式的设计问题

转载 作者:行者123 更新时间:2023-11-28 20:05:31 24 4
gpt4 key购买 nike

我想知道我们处理 POM 的方法是否有问题。在 Internet 上的许多示例中,我发现这种模式的使用方式使您的测试脚本看起来像这样:

pageObject.doSomethingWithElement(parameters...)

对我们来说,这样做更自然:

pageObject.element.doSomething(parameters...)

因此我们不需要在页面类中实现元素可以完成的操作,而只需在测试脚本中定义这些操作即可。出于某种原因,我们感觉更自然,类似于有

System.out.println()
System.err.println()

代替

System.printlnOut()
System.printlnErr()

我们是否遗漏了我们方法的一些缺点?

最佳答案

在这 2 个模型之间进行选择时,没有优势或劣势。但我认为你对推荐的方法有点误解。这个想法不是 pageObject.doSomethingWithElement,而是用页面的功能做一些事情,pageObject.doSomething 如果你愿意的话。

如果你看Selenium examples例如,第一个示例是 public HomePage loginAs(String username, String password)。此功能中的任何内容都与元素无关,它与页面的功能有关,可以轻松地口头表达,而无需引用所涉及的元素。我可以将此函数理解为:当用户在登录页面上时,用户提供用户名和密码,成功登录后,用户将被重定向到主页。哪一种提供了页面模型的自然 BDD 解释。

这种方法的优点是您的测试更具可读性。而不是像这样的东西:

loginPage.username.setValue(...)
loginPage.password.setValue(...)
loginPage.loginButton.submit()
// how do I get a homepage from here?

这个模型允许有

HomePage homePage = loginPage.loginAs(...)

完成!

同样从维护的角度来看:如果开发人员更改了登录页面上的元素,那么处理登录功能的 20 个测试可能很重要。但是您想要其他 980 测试,您必须完全不受它们更改的影响,因为它们只在测试功能的其他部分的过程中使用登录。因此,只要登录本身保持正常工作,他们就可以完全忽略登录元素的变化。

所以我认为选择不是在您的页面可以表达元素相关功能的各种方式之间进行选择,而是您的页面是否应该完全表达元素,或者专注于它提供的功能,而不考虑元素。

我建议阅读我在此处引用的那个页面,它很好地了解了页面模型的全部内容。

关于selenium - 关于页面对象模型模式的设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53486007/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com