我启动了一个 PageFactory 框架并开始使用 @FindBy
,除了了解到这是一种高级方法之外,我对它并没有太多了解。
我意识到 ExpectedConditions.presenceOfElementLocated
不适用于 WebElements
。所以我不得不使用 .visibilityOf
这是不一样的,有时它不会对我的元素执行操作。
所以我将其更改为 By 方法,现在定位器再次完美工作。
By
类对于存储元素是否更健壮?
哪一个更不容易出现问题? @Findby
或 By
最佳答案
@FindBy
属性对于静态元素非常有帮助。使用 @FindBy
属性可以轻松地以更清晰的方式映射未动态加载的元素。您正在使用预期条件,因为元素不会立即加载,Selenium 需要等待元素加载或定期检查它是否存在。在这种情况下,@FindBy
将不起作用,您必须使用 By
选择器。在这种情况下,我创建私有(private)字段以减少代码重复。
据我所知,使用 @FindBy
是页面对象模式中元素映射的一种更清晰的方法,但不可能在每个场景中都使用它,这是使用它的唯一好处。
如何使用私有(private)字段进行元素映射的示例
private static readonly By TestSelector = By.XPath("Your xpath");
public void ClickUpdate()
{
//Use same selector/field
Driver.FindElement(TestSelector).Click();
}
public void ClickUpdate2()
{
//Use same selector/field
Driver.FindElement(TestSelector).Click();
}
注意:C# 代码
关于java - @Findby vs. 按缺点和优点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29930641/