对相同的硒测试使用不同的页面对象集

时间:2018-08-06 07:39:50

标签: selenium testing automated-tests pageobjects page-factory

[这与SQA交叉发布-https://sqa.stackexchange.com/questions/35081/using-different-sets-of-page-objects-with-the-same-selenium-tests]

我正在为一组类似的网站开发硒测试套件。该测试套件将针对每个站点分别执行,并且套件中的测试适用于所有网站。

这些网站建立在相同的基础平台上,但是具有不同的主题/方案,因此这些网站的页面对象需要不同。这不是一个或两个选择器不同的情况,而是大多数选择器都不同的情况-但其余结构是相同的。

我可以轻松地创建两组(或三组,或其他任何一组)页面对象,但是我不知道如何告诉测试执行者(在我的案例中为Cucumber cli)使用哪个页面对象。

我能想到的最接近的方法是,将不同的包名称与通用基类一起使用,然后从通用基类扩展各个页面。另一种可能性是将所有选择器提取到属性文件中,并根据输入参数加载一个或另一个选择器,但是这使我无法使用PageFactory。我也许还可以在不同的源集中创建单独的页面对象集,然后根据需要编译一个或另一个页面对象-但是,我仍然可以想到理论,而不是执行。

那么,什么是正确的方法以及如何实现呢?如果重要的话,可以使用gradle构建项目。

2 个答案:

答案 0 :(得分:0)

由于测试适用于所有站点,因此我认为页面之间的唯一区别是对象后面的选择器。

cssSelectorxpath提供or。假设文本字段的ID为id1id2id3取决于您可以使用的页面

@FindBy(how = How.CSS, using = "#id1, #id2, #id3")
private WebElement textField;

这将返回与其中一个ID匹配的WebElement

答案 1 :(得分:0)

解决方案原来是带有相应自定义注释的自定义ElementLocator和ElementLocatorFactory。这需要更多的工作,但这是一个非常明确的解决方案。我在github上发布了它。简而言之,该实现允许执行此操作:

public class MyPage {
    @SearchWith(page="MyPage", name="myElement", locatorsFile="{locators}")
    WebElement someElement

    ...
}

然后使用-Dlocators=site1.json-Dlocators=site2.json运行整个测试-相应的定位符将从另一个加载。它甚至允许从-Dlocators=[site3.json]资源(使用site3.json获得)中指定this.getClass().getResourceAsStream(locatorsFile)和加载定位符