如何在PageFactory @FindBy注释中使用属性文件值?

时间:2012-10-30 08:53:16

标签: java webdriver

我最近开始在页面对象模式中使用Selenium2 与Page Factory合作。我声明了WebElements @FindBy由PageFactory初始化的注释 class已初始化。但是我想使用@FindBy 使用locators.properties文件的注释。不幸的是我似乎没有 能够这样做,因为注释仅限于允许 常数表达式。这似乎是Java的一个限制 一般的注释,但我只是想知道是否有人找到了 解决方法。我更喜欢从一个加载定位器 外部来源,但后来我将失去使用的好处 PageFactory。

public class LoginPage {

    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); 
    } 

}

我想实现类似的东西,但我不能 因为注释不允许这样:

public class LoginPage {

    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); 
    } 

}

2 个答案:

答案 0 :(得分:0)

你现在不能。

您总是可以编写一种方法来将其作为补丁提供,然后将其应用到Selenium代码库中:)

答案 1 :(得分:0)

这是可能的,这个链接确实有用Selenium Page Object Reuse se

我已经设法从配置中读取定位器,请看一下 Selenium Page Object. How to read @FindBy locator from external source?