4

我最近开始将 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); 
    } 

}

4

2 回答 2

0

你暂时不能。

您总是可以编写一种方法来实现它,并将其作为可以应用回 Selenium 代码库的补丁提供:)

于 2013-02-14T14:32:48.030 回答
0

这是可能的,这个链接确实很有帮助Selenium Page Object Reuse ‌​se

我已经设法从配置中读取定位器,请看一下 Selenium Page Object。如何从外部源读取@FindBy 定位器?

于 2016-10-10T10:22:19.290 回答