栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Selenium [Java] PageFactory设计:我应在何处根据页面对象模型编写断言

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Selenium [Java] PageFactory设计:我应在何处根据页面对象模型编写断言

根据我所见过的大多数网站,最佳实践是将断言保留在页面对象之外。以下是Selenium文档中的一个示例。

http://www.seleniumhq.org/docs/06_test_design_considerations.jsp#page-object-
design-
pattern

页面对象的设计方式具有很大的灵活性,但是有一些基本规则可以使测试代码具有理想的可维护性。

页面对象本身绝不应进行验证或断言。
这是测试的一部分,应始终在测试的代码内,而不是在页面对象中。页面对象将包含页面的表示形式,以及页面通过方法提供的服务,但是与对象测试无关的代码都不应包含在页面对象内。

可以并且应该在页面对象中进行一次单一验证,即验证页面以及页面上可能的关键元素是否已正确加载。实例化页面对象时应进行此验证。在上面的示例中,SignInPage和HomePage构造函数均检查预期的页面是否可用并准备接受测试请求。

页面对象应返回诸如产品名称,产品价格,当前选择的数量等信息。然后,测试代码将断言返回的字符串与期望的字符串匹配。

assert_message()
将成为
getMessage()
并以形式返回该消息
String
。见下文。

public String getMessage(){    return driver.findElement(messageLocator).getText();}

(注意:请继续阅读为什么我在

PageFactory
这里将元素更改为定位符。)

然后在测试代码中,

Assert.assertEquals(editPost.getMessage(), "Post published. View post");

现在,您将断言代码保留在测试脚本中,并保留在页面对象之外。

查看您的代码,我将提出一些进一步的建议。

  1. 我建议您阅读一些Java命名约定。有很多网站都提出了建议,我认为它们之间有很多相似之处,但这是从oracle开始的建议。您的方法名称应为

动词,首字母小写混合,每个内部单词的首字母大写。

所以

assert_message()
会变成
assertMessage()
等等。_s使它看起来更像python。

  1. 定位器的优先顺序:ID,CSS选择器,在极少数情况下为XPath。ID应该始终是您的首选,因为ID(根据W3C定义)在页面上应该是唯一的。接下来是CSS选择器,因为它是最快的(在我的测试中,它比ID更快),具有最佳的浏览器支持,并且在各个浏览器中实现的一致性最高。XPath仅应保留给CSS筛选器无法完成的事情,例如通过包含的文本查找元素。与CSS选择器相比,XPath定位器的性能较差,并且与CSS选择器的支持程度不同。例如,您的XPath定位器可以轻松转换为CSS选择器“ #message> p”。

以下是一些CSS选择器参考,可帮助您入门。

CSS选择器参考

CSS选择器提示

  1. 放下
    PageFactory
    。是的,这似乎使事情变得容易,但我认为在许多情况下,它会导致更多问题,例如陈旧的元素异常等。而是根据需要刮取页面。将所有定位符声明在类的顶部,并在需要时在方法中使用它们。
    public class EditPost {WebDriver driver;By messageLocator = By.cssSelector("#message > p")public EditPost(WebDriver editPostDriver){    this.driver = editPostDriver;}public String getMessage(){    return driver.findElement(messageLocator).getText();}

    }

我知道这超出了您的要求,但希望对您有所帮助。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/447847.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号