在页面对象模型中,为什么我们使用Webelements而不是String作为类变量?

时间:2018-12-11 19:31:21

标签: selenium selenium-webdriver webdriver

简而言之:在实现POM框架时,我们有Pagefactory初始化pageobject中的所有元素。为什么要这样做而不是将xpath / css选择器存储为字符串并根据需要调用它们呢?

例如:

@FindBy(xpath = "//Button[text()='Add and Edit']")
@CacheLookup
private WebElement addAndEdit;

vs

private String addAndEdit;

1 个答案:

答案 0 :(得分:-1)

这不是页面对象模型的一部分,它是由PageFactory定义的,@FindBy是初始化页面对象中元素的辅助类。这样做的目的是建立代理,以便由WebElement定义元素的位置策略,并且您可以引用By,当您使用引用时,它将为您查找。< / p>

如果要存储定位符,请不要存储字符串,而应存储PageFactory定位符。它具有定位器 TYPE 的附加信息,例如By.id,By.cssSelector等。我认为这是一种更简洁的方法,将使您不必以某种方式确定该字符串变量是哪种定位符。这是我在所有编写和/或维护的Selenium项目中使用的方法。

根据硒的贡献者,PageFactory不应该使用。参见首席提交人西蒙·斯图尔特(Simon Stewart)的this yt video,指出不使用它(27:26),以此类推,以及为什么。链接开始于导致他对aws s3 ls s3://mybucket --recursive --output text --query "Contents[?contains(LastModified) > '2018-12-8']" 发表评论的部分。