0

我一直在使用Ruby Selenium-Webdriver作为我正在开发的自动化脚本之一,而且我被要求使用页面对象,但是我们为此使用了很多页面对象应用程序我正在使用CSV文件,我已经在CSV文件中定义了我在应用程序中使用的所有xpath,并且我正在解析该脚本中的CSV文件以引用这些对象,我想知道是否存在在使用类来定义页面对象或使用CSV文件而不是性能问题方面有很多不同之处?我相信从配置的角度来看,使用CSV文件将成为我们的一个插件,并且会使维护更容易,对此有何建议?在Selenium中使用页面对象vs配置文件

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

谢谢

回答

0

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

由于它是一个自动测试脚本,您不必真正担心脚本的性能(可能需要几毫秒才能解析,这应该是确定的)。

维护所有元素标识属性&在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等配置文件的所有元素让页面对象指的是类的页面元素。所有的方法将成为页面类的一部分。

+0

我同意你对这一个,如果你看看我在这个线程上编辑的编辑,你会有什么建议?为了给您一个概述,我们将自动化基于云基础工具的应用程序,以便所有应用程序从HTML的角度共享相同的基础结构,因此我们决定使用CSV定义通用xpath模式,然后使用自定义方法将标签传递给该csv如果我们为每个应用程序定义页面对象,那么就会生成实际的元素xpath,因为我们将不得不手动查找这些元素的开销 – utkarshs

+0

@utkarshs,请参阅,如果您要大量使用并在将来保持此状态,让它达到你的舒适水平。看到我更新的答案。 – vins

3

我认为,POM比CSV方法更好。在POM中,您将页面的元素放在单独的类文件中。所以,如果有任何改变,那么找到更改/维护的位置就更容易了。而且,它不会像CSV文件那样太乱,而且您不需要使用额外的实用功能来解析这些文件。

+0

实际上,我们的用例与普通的Web应用程序自动化有点不同,我们永远不能依靠Id和元素类,因为它们在每次刷新时都会改变,所以我们唯一的选择是使用xpath的另一个方法就是如果我们导航到使用分区的元素对我们而言又是一个松散的情况,因为只要我们将应用程序移动到不同的环境中,该元素的类也会发生变化,因此我们使用标签导航到元素 – utkarshs

2

还有一个pageobjects gem,它提供了一组webDriver/watir以上的库,简化了代码。

另外,为什么xpaths?它是识别元素的最后推荐方法之一。

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

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

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

+0

我们使用xpath的原因是我们的应用程序是动态的意味着每一次页面刷新都会改变每个元素的id,再加上我们现在正在基于云技术进行这项工作,如果将我们的应用程序从DEV移植到UAT到PROD,那么即使是各个分区的类别也会变化 – utkarshs

+0

我们是实际上使我们基于云工具构建的应用程序自动化,所以就HTML而言,所有应用程序共享相同的基本结构我们无需找到基于页面的元素,因为结构总是相同的,因为它是环境中的任何应用程序,这就是加速我们的脚本开发的原因,我们已经在csv中定义了xpath模式,然后在运行中生成元素的实际xpath通过将一些参数传递给使用这些CSV文件的自定义方法 – utkarshs

相关问题