java - @Findby vs. 按缺点和优点?

标签 java selenium-webdriver factory-pattern

我启动了一个 PageFactory 框架并开始使用 @FindBy,除了了解到这是一种高级方法之外,我对它并没有太多了解。

我意识到 ExpectedConditions.presenceOfElementLocated 不适用于 WebElements。所以我不得不使用 .visibilityOf 这是不一样的,有时它不会对我的元素执行操作。

所以我将其更改为 By 方法,现在定位器再次完美工作。

By 类对于存储元素是否更健壮?

哪一个更不容易出现问题? @FindbyBy

最佳答案

@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/

相关文章:

python - 如何使用 Python 在 Selenium Webdriver 中选择一个具有通用类名的元素?

java - 默认 Maven 编译器设置

java - 选择复选框时在 katalon 中出现过时元素异常

java - 我应该创建一个新的 quartz 作业和触发器还是一个作业和多个触发器?

Python Selenium 动态表格单元格返回空字符串

java - Java 中的工厂类 - Android

constructor - 如何使用工厂构造函数在 Dart 中实现单例模式?

java - 使用 Spring 实现工厂方法

java - cglib:没有构造函数的类的Java动态代理(HttpUrlConnection)

java - 大规模时间触发事件处理