2011-04-05 56 views
12

我一直在使用硒1,但現在想遷移到selenium2/webdriver。說實話,我發現有點難以從selenium2/webdriver開始。實質上,我不知道如何在頁面對象之間工作。這是我的例子:Selenium2和webdriver的一個很好的工作例子

public class LoginPage { 
    private final WebDriver driver; 

    public LoginPage(WebDriver driver) { 
     this.driver = driver; 
    } 

    public void loginAs(String username, String password) { 
     driver.get("http://url_to_my_webapp");   
     driver.findElement(By.id("username")).sendKeys(username); 
     driver.findElement(By.id("pwd")).sendKeys(password); 
     driver.findElement(By.className("button")).submit();     
    } 

    public static void main(String[] args){ 
     LoginPage login = new LoginPage(new FirefoxDriver()); 
     login.loginAs("user", "pass"); 
    } 
} 

現在,用戶登錄後,重定向到不同的頁面出現。據我瞭解,現在我應該創建一個代表當前頁面的新頁面對象...事實是我不知道如何?我在哪裏可以找到超越「hello world」級別的好工作示例? 我應該如何繼續這個例子?

提前致謝!

+0

建議您改寫標題以使其與問題相關 - 查看右側的相關項目以獲得想法。 – YXD 2011-04-05 21:18:20

+1

我可能無意中在[另一個問題](http://stackoverflow.com/a/13486414/1068649)中回答了這個問題! – 2012-11-21 05:59:03

回答

8

這些網站都舉一些例子:

http://luizfar.wordpress.com/2010/09/29/page-objects/

http://www.wakaleo.com/blog/selenium-2-web-driver-the-land-where-page-objects-are-king

本頁提供有關使用PageFactory支持頁面對象的一些細節: http://code.google.com/p/selenium/wiki/PageFactory

您可以將您的例子延伸到通過爲每個頁面創建一個類來處理頁面對象,例如:

public class MainPage 
{ 
    private final WebDriver driver; 

    public MainPage(WebDriver driver) 
    {  
    this.driver = driver; 
    } 

    public void doSomething() 
    {  
    driver.findElement(By.id("something")).Click;  
    } 
} 

,改變loginAs返回一個類,它表示該頁面的瀏覽器導航到登錄後:

public MainPage loginAs(String username, String password) 
{  
    driver.get("http://url_to_my_webapp");    
    driver.findElement(By.id("username")).sendKeys(username);  
    driver.findElement(By.id("pwd")).sendKeys(password);  
    driver.findElement(By.className("button")).submit(); 
    // Add some error checking here for login failure 
    return new MainPage(driver);     
} 
+0

此鏈接'http://www.wakaleo.com/blog/279-selenium-2web-driver-the-land-where-page-objects-are-king'返回404 – 2016-04-22 02:39:54

+0

正確的鏈接是http:// www .wakaleo.com/blog/selenium-2-web-driver-the-land-where-page-objects-are-king @EnricoGiurin – azizunsal 2017-02-07 08:47:14

4

這個問題是很老,但我認爲它可能仍然是值得分享。

通常,我將首先創建所需的頁面對象類。 然後,我爲測試邏輯創建了一個單獨的類,在這裏您可以將「用戶工作流程」放到點擊和其他頁面交互中。從提供的示例代碼中,我假設這個類將取代main()。這也是我包含testNG/junit,測試註釋和dataProviders之類的類(不是嚴格要求的,但是如果你使用這些東西,那可能會有幫助)在這個類中,你可以實例化頁面的類您將與互動爲您需要它們,因爲您創建的webdriver對象控制瀏覽器,而不是頁面類。

通過這種方式進行操作,可以對測試工作流進行簡單的更改,並且可以在頁面對象發生變化或剛剛有新的測試需求時進行更改。

這種方法我最喜歡的副作用是帶有工作流的類可以是測試的一個非常可讀的「腳本」,在實際測試中隱藏在諸如loginPage.Login()和loginPage之類的調用中的所有醜陋細節.LoginSucceeded()這樣一個隨意的通行證不會看到用戶憑證查找的詳細信息,處理404的/ 400的,查找並單擊登錄按鈕等。

相關問題