在 Selenium 中使用页面对象与配置文件

Using Page Objects vs Config Files in Selenium

我一直在使用 Ruby Selenium-Webdriver 作为我正在开发的自动化脚本之一,我被要求使用页面对象,我们经常使用页面对象,但是对于这个应用程序我我正在使用 CSV 文件,我已经在 CSV 文件中定义了我在我的应用程序中使用的所有 xpath,并且我在我的脚本中解析该 CSV 文件以引用这些对象,我想知道有很多除了性能问题之外,使用 class 定义页面对象或使用 CSV 文件的区别是什么?我相信从配置的角度来看,使用 CSV 文件对我们来说是一个附加组件,并且会使它更容易维护,对此有什么建议吗?

编辑 - 在我们的用例中,我们实际上是在基于云的工具上构建自动化应用程序,所以从 HTML 的角度来看,基本上所有应用程序都共享相同的设计结构,所以我们在 CSV 中定义 xpath 模式,然后我们将某些参数传递给我们开发的一些自定义方法,这些方法使用 CSV 自动生成 xpath,而不是手动查找这些参数作为我们的开销,因为我们已经知道所有应用程序将对所有元素共享相似的 xpath 模式。

谢谢

这完全取决于应用程序和您可能执行的测试类型。

因为是自动化测试脚本,所以不用太担心脚本的性能(可能多花几毫秒解析,应该没问题)。

在一个CSV文件中维护所有的元素标识属性和相应的操作将使维护更容易,并使框架应用程序独立,这很好。但是维护您的框架以使其更健壮有点困难。这两种方法各有利弊。

参考以下帖子[示例在 java - 但你会明白的]:

  1. Keyword driven framework
  2. Advanced Page Objects

更新:

如果您两者都喜欢,您可以想出您的实现来轻松集成它们。

@ObjectRepository(src="/login.csv")
public class LoginPage{

    private Map<String, WebElement> elements; 

    public void login(){
        elements.get("username").sendKeys('');
        elements.get("password").sendKeys('');
        elements.get("signin").click();
    }
}

即,在配置文件中定义所有元素,如 csv/json 等。让页面对象引用页面元素的 class。所有方法都将成为页面的一部分 class.

我认为,POM 比 CSV 方法更好。在 POM 中,您将页面元素放在单独的 class 文件中。因此,如果要进行任何更改,则更容易找到 change/maintain 的位置。此外,它不会像 CSV 文件那样变得太乱,您不需要使用额外的实用函数来解析它们。

还有一个 pageobjects gem,它在 webdriver/watir 之上提供了一组库,简化了代码。

另外,为什么要使用 xpath?这是最后推荐的识别元素的方法之一。

至于框架方面,csv 应该比 PageObjects 更容易维护。这是文本和代码之间的基本区别。您在 PageObjects 中对您的元素强制执行面向对象的方法,但这对于 csv 是不可能的。

在最好的情况下,您已经创建了一个 column/separate 工作表来定义元素 xpath 属于哪个页面。这听起来像是一项开销。随着您的应用程序/套件的增长,可能会有成千上万的元素。想象一下用这种数据解析/手动更新 csv。

而不是在 PageObjects 中,您的元素将被限制在页面中。对应用程序的任何更改还将指定哪些元素可能会受到影响。现在,当将您的元素定义为 PageObject 中的对象而不是 css 时,您也不需要通过读取 csv 来显式创建您的元素。