我只能在页面对象@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/