从PageClasses放置Findby元素的位置

时间:2018-03-14 19:06:41

标签: java selenium automated-tests pageobjects findby

我正在准备testFramework,并想知道在PageClasses中保留所有Findby对象是否是一个好主意,例如:

我有PageClasses:

public class MainPage extends BaseExtendablePage implements Dataaa {

@FindBy(xpath = photo1) WebElement photo1;
@FindBy(xpath = "//p/i/a/img[@src= 'http://demoqa.com/wp-content/uploads/2014/08/pattern-14-300x237.png']") WebElement photo2;
@FindBy(xpath = "//div/i/a/img[@src= 'http://demoqa.com/wp-content/uploads/2014/08/pattern-14-300x237.png']") WebElement photo3;
...

我尝试了类似于实现接口Dataaa并将其放入至少来自xpath的String,id's ......:

public interface Dataaa {

String photo1 = "//p/a/img[@src= 'http://demoqa.com/wpcontent/uploads/2014/08/pattern-14-300x237.png']";
}

这是一个好方法还是有更好的想法来保留这些元素或如何将它们移动到不同的位置?

1 个答案:

答案 0 :(得分:0)

在我们的项目中,我们将元素保存在它所属的PageObject中。如果在更多页面中使用了元素,那么我们尝试通过普通父母分享它们。

如果要单独存储字符串/定位器,可以创建一个Constants类并将它们存储为常量:

public class Const {

    private Const() {}

    public static final String PHOTO1 = "//p/a/img[@src= 'http://demoqa.com/wpcontent/uploads/2014/08/pattern-14-300x237.png']";
    public static final String PHOTO2 = "//p/i/a/img[@src= 'http://demoqa.com/wp-content/uploads/2014/08/pattern-14-300x237.png']";
...
}

请记住Java约定:常量应使用大写字母定义。