我们是否可以使用@findBy注释将webelements作为实例变量存储在接口中

时间:2015-01-09 11:21:38

标签: java selenium-webdriver annotations

接口中声明一个页面的 Webelements 之后,在我们的完整项目中编写selenium自动化脚本时,很容易获得元素。请建议怎么做。我收到此错误"在创建界面时,空白的最终字段title_page可能尚未初始化"

public interface PageElements {

    @FindBy(css="h2")
    public static WebElement title_page;
}

2 个答案:

答案 0 :(得分:2)

你做错了什么。你不能在这样的接口中有这样的语句:

public static WebElement title_page;

未初始化title_page

  

一旦我们在接口中声明了一个页面的Webelements而不是它   在我们的完整项目中,很容易获得元素   selenium自动化脚本

您可以通过在逻辑上分割 页面并在Java中遵循继承模式来实现相同目的。

比如说,如果您自动化SO网站,那么您可以创建一个HeaderPage,其中包含页面的标题中的所有元素。例如:

class HeaderPage{

    @FindBy(css="any")
    protected static WebElement review;

}

一旦你有了这个,你可以通过扩展HeaderPage 在其他标题页中重复它们。因为SO可以有一个名为SONavigationPage的页面对象,它可以是这样的:

class SONavigationPage extends HeaderPage
{
     //have access to review element. 
}

这是重用元素的好方法;

答案 1 :(得分:0)

你需要这个

   //initialised elements to use
   PageFactory.initElements(driver, page);

请参阅此处以获取更多信息:https://code.google.com/p/selenium/wiki/PageFactory 希望这有帮助