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
@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();
}