2016-08-08 92 views
0

我想通過Selenium WebDriver自動化prestashop測試用例。我是否正確,尤其是頁面對象模型?我是否正在使用Selenium中的頁面對象模型?

這是我HomePagePOM類:

package pageObjects; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.Alert; 

public class HomePagePOM { 
    private static WebElement element = null; 
    private static WebDriver driver = null; 
    public static String correctLogin = "aaaa"; 

    public static void enterPage(WebDriver driver) { 
     driver.get("http://website.com"); 
    } 

    public static WebElement homeLogo(WebDriver driver) { 
     element = driver.findElement(By.id("header_logo")); 
     return element; 
    } 

    public static WebElement searchBar(WebDriver driver) { 
     element = driver.findElement(By.id("search_query_top")); 
     return element; 
    } 

    public static WebElement searchBarButton(WebDriver driver) { 
     element = driver.findElement(By.name("submit_search")); 
     return element; 
    } 

    public static WebElement contactUs(WebDriver driver) { 
     element = driver.findElement(By.id("contact-link")); 
     return element; 
    } 

    public static WebElement signIn(WebDriver driver) { 
     element = driver.findElement(By.className("header_user_info")); 
     return element; 
    } 

} 

這是我LoginPagePOM類:

package pageObjects; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 

public class LoginPagePOM { 
    private static WebElement element = null; 
    private static WebDriver driver = null; 
    public static String correctLogin = "client"; 
    public static String incorrectLogin = "client_incorrect"; 
    public static String correctPassword = "pass_correct"; 
    public static String incorrectPassword = "pass_incorrect"; 

    public static WebElement createAccountField(WebDriver driver) { 
     element = driver.findElement(By.id("email_create")); 
     return element; 
    } 
    public static WebElement registeredEmailField(WebDriver driver) { 
     element = driver.findElement(By.id("email")); 
     return element; 
    } 
    public static WebElement registeredPasswordField(WebDriver driver) { 
     element = driver.findElement(By.id("passwd")); 
     return element; 
    } 
    public static WebElement registeredSubmitButton(WebDriver driver) { 
     element = driver.findElement(By.id("SubmitLogin")); 
     return element; 
    } 
    public static WebElement createAccountButton(WebDriver driver) { 
     element = driver.findElement(By.id("SubmitCreate")); 
     return element; 
    } 
} 

,這是我LoginPageCorrectLogin類,執行一個單一的測試案例 - 正確的登錄到的Prestashop網站:

package testCases; 
import pageObjects.HomePagePOM; 
import pageObjects.LoginPagePOM; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.firefox.FirefoxDriver; 

public class LoginPageCorrectLogin { 
    public static WebDriver driver = null; 
    public static WebElement element = null; 
    public static void main(String[] args) { 
     driver = new FirefoxDriver(); 

     HomePagePOM.enterPage(driver); //Enter home site 
     HomePagePOM.signIn(driver).click(); //Find Sign In option and click 
     LoginPagePOM.registeredEmailField(driver).sendKeys(LoginPagePOM.correctLogin); // Input correct login to field 
     LoginPagePOM.registeredPasswordField(driver).sendKeys(LoginPagePOM.correctPassword); //Input correct password to field 
     LoginPagePOM.registeredSubmitButton(driver).click(); // Click on submit button 
    } 

} 

我是Selenium的begginer,但我想用最好的習慣ES。這是對的嗎?在這個例子中,我將創建其他類,如LoginPageCorrectPassword,LoginPageIncorrectLoginLoginPageIncorrectPassword
有關頁面模型對象的任何建議將非常有幫助。

+0

Prestashop的自動測試案例?祝你好運先生。 –

回答

3

由於這是一個開放式的問題,這裏有一些一般的指針:

  1. 你可能不會想要正確的密碼, 不正確的密碼,等多個頁面爲那些最有可能真的是沒有什麼不同 頁面。
  2. 將你的字符串,如URL和用戶名/密碼移動到 string-table/resource-file/config-file/something。讓他們在代碼中設置 意味着如果例如 密碼更改,您將被迫編輯代碼;還有許多其他的負面因素。
  3. 對頁面對象進行一般操作。簡單的例子:
    LoginPagePOM.login(username, password, isValidLogin)這樣你就不必登入碼重複無處不在,它是比較容易理解,而你只需要改變1點,如果/當你的登錄頁面,陳
1

當你編寫你的對象,儘可能地封裝所有的元素,這樣這些方法就不會綁定到訪問原始元素。他們應該更多地是一種行動。

下面是我看到你的代碼上面的東西。

首先,我創建了一個瀏覽器對象來處理瀏覽器相關的操作。瀏覽器的具體操作是最大化,調整大小,清除cookie等。

public class Browser { 

    public static Browser newBrowser(WebDriver driver) { 
     return new Browser(driver); 
    } 

    private final WebDriver driver; 
    private Browser(WebDriver driver) { 
     this.driver = driver; 
    } 

    public HomePage gotoHomePage() { 
     driver.get("http://website.com"); 
     return new HomePage(driver); 
    } 
} 

這是一個更簡單的主頁版本。你的方法應該描述一個動作。這樣更容易閱讀。

public class HomePage { 

    private final WebDriver driver; 
    public HomePage(WebDriver driver) { 
     this.driver = driver; 
    } 

    public LoginPage signIn() { 
     driver.findElement(By.className("header_user_info")).click(); 
     return new LoginPage(driver); 
    } 
} 

接下來是登錄頁面。如果你注意到,我有兩種版本的登錄方法,用於成功和失敗。也許這只是我自己,但當我做自動化時,我已經知道行動的結果,我正在做的就是將其轉化爲自動化。因此,登錄失敗可能會轉到不同的頁面,並且成功登錄可能會轉到其他頁面。那麼,我們需要在兩種情況下處理它們,以便我們的對象不會中斷。要記住的最重要的事情是條件(if-else)應該在測試用例中最小化。

public class LoginPage { 
    public static String correctLogin = "client"; 
    public static String incorrectLogin = "client_incorrect"; 
    public static String correctPassword = "pass_correct"; 
    public static String incorrectPassword = "pass_incorrect"; 

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

    public FailurePage registerAndFail(String email, String password) { 
     driver.findElement(By.id("email")).sendKeys(email); 
     driver.findElement(By.id("passwd")).sendKeys(password); 
     driver.findElement(By.id("SubmitLogin")).submit(); 
     return new FailurePage(driver); 
    } 

    public SuccessPage registerAndSucceed(String email, String password) { 
     driver.findElement(By.id("email")).sendKeys(email); 
     driver.findElement(By.id("passwd")).sendKeys(password); 
     driver.findElement(By.id("SubmitLogin")).submit(); 
     return new SuccessPage(driver); 
    } 
} 

這裏是你將如何編寫測試。

public class LoginPageCorrectLogin { 

    public static void main(String[] args) { 
     Browser browser = Browser.newBrowser(new FirefoxDriver()); 
     HomePage homepage = browser.gotoHomePage(); 
     // assertions here 
     LoginPage loginPage = homepage.signIn(); 
     //assertions here 
     SuccessPage sucessPage = loginPage.registerAndSucceed(LoginPage.correctLogin, LoginPage.correctPassword); 
     // assertions here 
    } 

} 
相關問題