【发布时间】:2012-10-30 08:53:15
【问题描述】:
我最近开始使用 Selenium2 和页面对象模式 与 Page Factory 结合使用。我有声明的 WebElements @FindBy 由 PageFactory 初始化的注解,当 类被初始化。但是我想使用@FindBy 带有 locators.properties 文件的注释。可惜我好像没有 能够做到这一点,因为注释仅限于允许 常量表达式。这似乎是Java中的一个限制 一般的注释,但我只是想知道是否有人找到了 解决方法。我宁愿从 外部来源,但我会失去使用的好处 页面工厂。
公共类登录页面{
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);
}
}
【问题讨论】:
-
我认为不可能。提供给任何注释的值是在编译时而不是在运行时计算的。但是,如果您的意图是将定位器存储在属性文件中,那么您可以使用 By 子句...这是一个示例 C# 代码: public By UserName() { return By.Id(locators.getProperty("login.usernameField") ); } 以后你可以使用 Driver.FindElement(UserName()).SendKeys("")..