Selenium Webdriver test step by step

Refactor

分离测试数据和逻辑

  • Extract Constant alt + command + C
public static final String URL = "http://www.amazon.cn";
public static final String SIGN_IN_TITLE = "nav-signin-title";
public static final String YOUR_ACCOUNT_SECTION = "nav-your-account";
public static final String SIGN_IN_LINK_TEXT = "免费注册";
public static final String SIGN_IN_PAGE_TITLE = "Amazon.cn 注册";
public static final String USER_NAME_TEXTBOX = "ap_customer_name";
public static final String PASSWORD_TEXTBOX = "ap_password";
public static final String PASSWORD_CONFIRM_TEXTBOX = "ap_password_check";
public static final String EMAIL_CONFIRM_TEXTBOX = "ap_email_check";

public static final String USER_NAME = "12345test";
public static final String PASSWORD = "welcome123";
public static final String USER_EMAIL_TEXTBOX = "ap_email";
public static final String USER_EMAIL = "12345test@test.com";

提取方法

  • Extract Method alt + command + M
 public void testShoppingFlow() throws Exception {

    webDriver = new ChromeDriver();

    try {
        webDriver.get(URL);
        navToSignIn();
        clickSignIn();
        fillRegistrationInfo();
    }

    finally{
        webDriver.close();
    }
}

Page Object & WebDriver Annotation

Page Object & Findby Annotation

public static final String USER_NAME_TEXTBOX_ID = "ap_customer_name";
public static final String USER_EMAIL_TEXTBOX_ID = "ap_email";
public static final String EMAIL_CONFIRM_TEXTBOX_ID = "ap_email_check";
public static final String PASSWORD_TEXTBOX_ID = "ap_password";
public static final String PASSWORD_CONFIRM_TEXTBOX_ID = "ap_password_check";

@FindBy(id= USER_EMAIL_TEXTBOX_ID)
public static WebElement user_email_textbox;

@FindBy(id = USER_NAME_TEXTBOX_ID)
private static WebElement user_name_textbox;

@FindBy(id= EMAIL_CONFIRM_TEXTBOX_ID)
public static WebElement email_confirm_textbox;

@FindBy(id= PASSWORD_TEXTBOX_ID)
public static WebElement password_textbox;

@FindBy(id= PASSWORD_CONFIRM_TEXTBOX_ID)
public static WebElement confirm_password_textbox;


public void fillUserName(String userName) {
    user_name_textbox.sendKeys(userName);
}

public void fillEmail(String userEmail) {
    user_email_textbox.sendKeys(userEmail);
}

public void confirmEmail(String userEmail) {
    email_confirm_textbox.sendKeys(userEmail);
}

public void fillPassword(String password) {
    password_textbox.sendKeys(password);
}

public static void confirmPassword(String password) {
    confirm_password_textbox.sendKeys(password);
}

PageFactory.initElements()

registrationInfoPage = PageFactory.initElements(webDriver, RegistrationInfoPage.class);

Junit Annotation

JUnit setup & tearDown Method

@Before
public void setUp() throws Exception {
    webDriver = new ChromeDriver();
    amazonHomePage = PageFactory.initElements(webDriver, AmazonHomePage.class);
    registrationInfoPage = PageFactory.initElements(webDriver, RegistrationInfoPage.class);
    wait = new WebDriverWait(webDriver, TIME_OUT_IN_SECONDS);
}

...

@After
public void tearDown() throws Exception {
    webDriver.close();
}

After Refactor

重构之后 AmazonShoppingFlowTest测试

@Before
public void setUp() throws Exception {
    webDriver = new ChromeDriver();
    amazonHomePage = PageFactory.initElements(webDriver, AmazonHomePage.class);
    registrationInfoPage = PageFactory.initElements(webDriver, RegistrationInfoPage.class);
    wait = new WebDriverWait(webDriver, TIME_OUT_IN_SECONDS);
}

@Test
public void testShoppingFlow() throws Exception {
    webDriver.get(AmazonHomePage.URL);
    wait.until(ExpectedConditions.presenceOfElementLocated(By.id(AmazonHomePage.SIGN_IN_TITLE_ID)));
    amazonHomePage.navToSignIn();
    wait.until(ExpectedConditions.presenceOfElementLocated(By.linkText(AmazonHomePage.SIGN_IN_LINK_TEXT)));
    amazonHomePage.clickSignIn();
    wait.until(ExpectedConditions.titleIs(AmazonHomePage.SIGN_IN_PAGE_TITLE));
    fillRegistrationInfo();
}

private void fillRegistrationInfo() {
    registrationInfoPage = new RegistrationInfoPage();
    registrationInfoPage.fillUserName(USER_NAME);
    registrationInfoPage.fillEmail(USER_EMAIL);
    registrationInfoPage.confirmEmail(USER_EMAIL);
    registrationInfoPage.fillPassword(PASSWORD);
    registrationInfoPage.confirmPassword(PASSWORD);
}

@After
public void tearDown() throws Exception {
    webDriver.close();
}