java - Selenium 页面对象。如何从外部源读取@FindBy 定位器?

标签 java selenium pageobjects

我只能在页面对象@FindBy注解中使用硬编码值 但我想动态解析定位器。

public class LoginPage extends BasePage {

    // hardocded value works ok
    @FindBy(name = "login field")
    WebElement usernameFld;

    // does not compile
    // this is a kind of what I would like to have  
    @FindBy( getLocatorFromExternalSource() ) 
    WebElement passwordFld;

}

我看到一些帖子提到可以通过实现自定义注释/装饰器/工厂来解决这些问题,但还没有找到示例。

问题: 有人可以提供一个示例,说明如何实现自定义 ElementLocatorFactory 以便动态解析定位器吗?

我知道我可以只使用普通的旧式调用,例如:

driver.findElement( getLocatorFromExternalSource("passwordFld") ).click()

但我想用

passwordFld.click() 

相反。

最佳答案

注释是元数据,因此它们需要在类加载期间在运行时启动时可用。你寻求的东西没有直接的答案,但黑客在那里使用反射,恕我直言,我会避免它,如果你需要外部化定位器,那么我建议你实现对象存储库,你可以在运行时动态地读取你的定位器一些外部资源。

关于java - Selenium 页面对象。如何从外部源读取@FindBy 定位器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39914981/

相关文章:

java - 如何使用一些参数从 Java 调用 .exe 文件

java - 在 "chrome://downloads/"页面找不到 Web 元素

javascript - Selenium 中通过 jQuery 生成获取元素

python - Webdriver + PhantomJS 只是卡在那里

javascript - Protractor - 失败 : prop is not defined

java - 文本验证失败

python - 填写后如何使用Selenium Python提交角度表格

Java+Selenium+PageObject - 在哪里可以获得工作示例?

ruby - 如何使用页面对象执行拖放?

java - 如何使用 java 异步 http 客户端 (ning) 库发布二进制字节