【发布时间】:2017-04-01 04:34:13
【问题描述】:
基本上,我想(从我的测试类)断言 WebElement 包含 text()。由于我所有的 WebElements 都在我的 page.class 中定义,我认为我必须将它们公开才能做到这一点。
我在使用 webdriver 和元素时遇到了一些问题,我认为这可能是因为多个测试类同时从页面类访问 WebElements。我的问题是:WebElements 必须是私有的有什么原因吗?
代码示例:
我见过的所有 PageFactory 教程都说要让你的 WebElements 私有,比如
@FindBy(xpath = "//*[@id='searchStringMain']")
private WebElement searchField;
但要断言一个元素包含文本(来自另一个类),我必须像这样定义它们:
@FindBy(xpath = "(//*[contains (text(),'Hrs')])[2]")
public static WebElement yourLoggedTime;
【问题讨论】:
-
PageObjects 的目的是封装有关页面元素的详细信息。如果您将它们公开,那么当(而不是如果)其中一个发生更改时,您将不得不寻找您引用它的所有地方并复制更改。通过将 Web 元素封装在页面对象中,您只需更改一次。您的测试应该关注行为(例如 searchFor),而不是有关操作哪些元素的详细信息。元素详细信息只能在 PageObjects 中找到。
标签: java selenium selenium-webdriver pageobjects