我最近开始将 Selenium2 与 Page Object Pattern 与 Page Factory 结合使用。我有使用 @FindBy Annotations 声明的 WebElements,它们在类初始化时由 PageFactory 初始化。但是,我想将 @FindBy 注释与 locators.properties 文件一起使用。不幸的是,我似乎无法做到这一点,因为注释仅限于允许常量表达式。一般来说,这似乎是 Java Annotations 的一个限制,但我只是想知道是否有人找到了解决方法。我宁愿从外部源加载定位器,但我会失去使用 PageFactory 的好处。
公共类登录页面 {
protected WebDriver driver;
@FindBy(id = "username")
private WebElement usernameField;
@FindBy(id = "password")
private WebElement passwordField;
@FindBy(id = "button_login")
private WebElement loginButton;
public LoginPage(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}
}
我想实现与此类似的东西,但我不能,因为注释不允许这样做:
公共类登录页面 {
protected WebDriver driver;
Properties locators = new Properties();
@FindBy(id = locators.getProperty("login.usernameField"))
private WebElement usernameField;
@FindBy(id = locators.getProperty("login.passwordField"))
private WebElement passwordField;
@FindBy(id = locators.getProperty("login.loginButton"))
private WebElement loginButton;
public LoginPage(WebDriver driver) {
this.driver = driver;
// Load the locators.properties File here
PageFactory.initElements(driver, this);
}
}