gpt4 book ai didi

javascript - Protractor 页面对象是否应该公开 ElementFinder

转载 作者:太空宇宙 更新时间:2023-11-04 16:22:06 26 4
gpt4 key购买 nike

我们的团队正在讨论是否应该禁止在页面对象中公开“ElementFinder”和“ElementArrayFinder”。

主要原因是西蒙·斯图尔特 (Simon Stewart) 的引用。 Page Objects Done Right - selenium conference 2014 (page.7)

If you have a WebDriver APIs in your test methods... You're doing it wrong.

SeleniumHQ/selenium/PageObjects https://github.com/SeleniumHQ/selenium/wiki/PageObjects

对于返回另一个页面对象的转换函数或者在一个页面上发生多个选择的情况,该方法是正确的,因此我们可以返回页面并链接这些调用。

但是当我们做一些非常简单的事情时,需要编写很多样板来测试该元素是否存在并具有文本。

创建“ElementFinder”的那些模仿功能对我来说没有多大意义。大多数时候,公开元素并使用“ElementFinder”的内置函数(如“.getText()”)会更快、更易读。您认为将元素设为私有(private)并仅公开“getElementText()”函数更好吗?

禁止在页面对象中公开“ElementFinder”和“ElementArrayFinder”的最佳实践是什么?

最佳答案

我们使用 cucumber ,因此测试分为

  • 功能
  • 步骤定义
  • helper
  • 页面文件

所有逻辑和断言都在步骤定义和帮助程序中。当需要屏幕值时,步骤定义调用页面方法。页面方法返回 POJO s。有关查找元素的所有详细信息都封装在页面文件中。原因很明显;当(而不是如果)页面 HTML 更改时,您只需在一处进行修复。一旦破坏了封装,维护噩梦就开始了。

我经常使用的一种模式是创建一个辅助类,例如OfficeInfo,例如,包含办公室表的 tr 中的所有 td。页面方法将返回

List<OfficeInfo>

即每个 tr 一个列表元素。现在,办公室信息与该信息如何在页面上显示的详细信息分离。如果添加新的 td,则更新 OfficeInfo 类、更新页面方法并插入新的步骤定义,而不会影响使用 OfficeInfo(但不影响新 td)的所有其他位置。

关于javascript - Protractor 页面对象是否应该公开 ElementFinder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40537848/

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