0

我正在尝试在我的 UI 测试中使用页面对象模式。许多示例假设在类字段中保存 By (Locator)。其他建议保存 WebElement(或 SelenideElement,如果您使用的是 Selenide)。虽然,两者都非常适合硬编码定位器,但我不知道如何将其用于路径包含变量的定位器。

例如,如何将这个定位器保存在类字段中?

public SelenideElement getTotal(String type) {
   return $(By.xpath("//h4[contains(text(), '"+ type +"')]");
}
4

2 回答 2

1

在我看来,您的解决方案是正确的。

我通常把它们放在我的 PageObject 顶部,紧挨着其他选择器,就像你所做的那样。SelenideElement只需像使用其中一个字段一样使用该方法。就像是:

private SelenideElement getTotalElementByType(String type) {
    return $(By.xpath("//h4[contains(text(), '"+ type +"')]");
}

我会成功的privateprotected因为使用页面对象模式,您的测试脚本不应该知道WebElements页面上的对象。

您可以公开访问的方法是这样的:

public int getTotalByType(String type) {
    string totalString = getTotalElementByType(type).getText();
    int total = //convert to int or whatever
    return total;
}

如果您想与元素交互而不是获取值,您将返回您希望转到的PageObject以遵循POPattern。:)

于 2017-02-21T20:10:58.603 回答
0

您实际上不需要将定位器保存到类字段。Page Object 不必在类字段中声明所有元素。页面对象是一个对象,这意味着它必须提供用于操作它的方法。

因此,您的解决方案非常理想。:)

于 2017-02-21T21:41:17.590 回答