简而言之:在实现POM框架时,我们有Pagefactory初始化pageobject中的所有元素。为什么要这样做而不是将xpath / css选择器存储为字符串并根据需要调用它们呢?
例如:
@FindBy(xpath = "//Button[text()='Add and Edit']")
@CacheLookup
private WebElement addAndEdit;
vs
private String addAndEdit;
答案 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']"
发表评论的部分。