PageFactory.initElements方法,配合頁面對象模式,為每個頁面創建隱式等待


public static void initElements(ElementLocatorFactory factory, Object page) {
    final ElementLocatorFactory factoryRef = factory;
    initElements(new DefaultFieldDecorator(factoryRef), page);
  }

PageFactory類中的靜態方法,可以直接使用,傳入兩個參數ElementLocatorFactory和Object類型,ElementLocatorFactory參數可使用AjaxElementLocatorFactory類創建對象得到,AjaxElementLocatorFactory傳入一個SearchContext(傳入一個WebDriver對象即可)和int值(超時時間)。

如:

public class BasePage {
    public WebDriver dr;    
    

    //超時時間
    private final int TIMEOUT = 10;    

    public BasePage(WebDriver dr) {
        this.dr = dr;
        PageFactory.initElements(new AjaxElementLocatorFactory(dr, TIMEOUT) , this);
    }
    
    public BasePage(WebDriver dr, final String title) {
        this.dr = dr;
        
        //如果不進行判斷,
        WebDriverWait wait = new WebDriverWait(dr,TIMEOUT);
        try{
            boolean flag = wait.until(new ExpectedCondition<Boolean>(){
                @Override
                public Boolean apply(WebDriver arg0) {
                    // TODO Auto-generated method stub
                    String acttitle = arg0.getTitle();
                    return acttitle.equals(title);                    
                }});
        }catch(TimeoutException te) {
            throw new IllegalStateException("當前不是預期頁面,當前頁面title是:" + dr.getTitle());
        }
        
        PageFactory.initElements(new AjaxElementLocatorFactory(dr, TIMEOUT) , this);
        
    }
    
    //可以通過組合方式加入網頁header和footer的公共框架部分
    public CommonPage getCP() {
        return new CommonPage();
    }
    
}

通過initElements方法初始化的各個頁面對象,AjaxElementLocatorFactory方法可以查找元素時都會在指定的TIMEOUT時間內不斷重試,如果在指定時間內定位到元素則馬上繼續,如果指定時間內未找到則拋出NoSuchElementException異常。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM