2012-04-09 59 views
0

使用Java WebDriver和PageFactory,我們正在實現一個新的自動化項目,並且我們一直在嘗試使用各種方法創建PageObjects。我們對一些不同的想法有所詬病,並且想確保我們不會把自己變成一個角落。什麼是使用PageFactory初始化和使用WebDriver PageObject的最佳方式?

如WebDriver文檔中所記錄,最好是將一個初始化的WebDriver提供給PageFactory,以及用於創建新Page Page的類模板?

driver.get(URL); 
PageObject page = PageFactory.initElements(driver, PageObject.class); 

// elsewhere 
class PageObject { 
    private WebDriver driver; 

    public PageObject(WebDriver driver) { 
    this.driver = driver; 
    this.validateUrl(); 
    } 

    public void validateUrl() throws Exception { 
    if (!driver.getUrl().equals(url)) { 
     throw new Exception("URL not valid"); 
    } 
    } 
} 

然而,由於PageObject知道了很多關於自己,比如也許它的URL,就不能有Page對象做的工作?

PageObject page = new PageObject(driver); 
page.goToUrl(); 

// elsewhere 
class PageObject { 
    private WebDriver driver; 
    private String url; 

    public PageObject(WebDriver driver) { 
    PageFactory.initElements(driver, this); 
    } 

    public void goToUrl() { 
    driver.get(url); 
    } 
} 

我想我沒有看到太多的優勢,具有PageFactory做實例而不是隻初始化,但是我不希望從標準設置由建築師去流浪,如果有它的一個原因。

感謝

回答

0

一個頁面廠的優勢:

場景:

在你的應用程序,你有在頁面100場。同一頁面被調用50次。

如果這種類型的場景是通過使用頁面對象的方式完成的,它會一次又一次地找到每個元素。性能可能會降低。

如果通過使用Page Factory意味着完成相同的場景,它將僅在第一次找到元素,然後它將從緩存中取出。由此,性能提高。

0

最好的辦法就是讓抽象出來的PageObjects及其初始化的框架,如蓋布和修昔底德。我一直在使用Geb + Spock BDD組合,迄今爲止的結果非常好。

相關問題