我想我已经掌握了PageObject模式的要点,但是有些部分我没有得到。
所以我正在学习本教程,现在我有了这个Page类:
public class SignUpPage extends AbstractPage {
AndroidDriver<MobileElement> driver;
public SignUpPage(AndroidDriver<MobileElement> driver) {
super(driver);
}
public void signUpAllFieldsEmpty() {
signup_button.click();
}
public void signUpOnlyFirstName() {
first_name_edittext.sendKeys("First name");
hideKeyboard();
signup_button.click();
}
@AndroidFindBy(id="signup_button")
private MobileElement signup_button;
@AndroidFindBy(id="first_name_edittext")
private MobileElement first_name_edittext;
@AndroidFindBy(id="last_name_edittext")
private MobileElement last_name_edittext;
@AndroidFindBy(id="signup_email_edittext")
private MobileElement signup_email_edittext;
@AndroidFindBy(id="signup_password_edittext")
private MobileElement signup_password_edittext;
@AndroidFindBy(id="confirm_password_edittext")
private MobileElement confirm_password_edittext;
}
然后我有这个Test类:
public class Test_001_SignUp extends AbstractTest {
public Test_001_SignUp() {}
@Test
public void signUp_allFieldsEmpty() {
app.landingPage().goToSignUpPage();
app.signUpPage().signUpAllFieldsEmpty();
}
@Test
public void signUp_onlyFirstName() {
app.signUpPage().signUpOnlyFirstName();
}
}
我不确定我是否正确行事,因为如果我创建另一个与测试相关的@Test方法,看起来测试类中的方法会变得多余。
我怎么能改善这个?或者我在这次测试中做错了什么?
答案 0 :(得分:1)
你的Page
类应该是愚蠢的 - 它只是控制页面。
public void signup() {
signup_button.click();
}
public void enterFirstName(String firstName) {
first_name_edittext.sendKeys(firstName);
}
public String getFirstName() {
etc...
您的Test
类具有为每次测试调用哪种方法的逻辑。
其他几点:
getSuccessMessage
方法或getPageTitle
(或者在注册完成后在您的页面上发生的任何事情 - 您的测试可以检查它是否有效!)。然后,您的测试可以断言文本存在且正确。StepDef
类。答案 1 :(得分:0)
如果您的所有测试都具有相同的起点,则可以使用@Before
注释和带@After
注释的干净方法在设置方法中执行此操作。它们将在每个测试方法之前和之后运行,并将执行将测试带到其起点所需的操作
public class Test_001_SignUp extends AbstractTest {
public Test_001_SignUp() {}
@Before
public void setUp() {
app
.landingPage()
.goToSignUpPage();
}
@Test
public void signUp_allFieldsEmpty() {
app
.signUpPage()
.signUpAllFieldsEmpty();
}
@Test
public void signUp_onlyFirstName() {
app
.signUpPage()
.signUpOnlyFirstName();
}
@After
public void cleanUp() {
// roll back to initial state
}
}
作为旁注,我们以signUp_allFieldsEmpty()
测试为例。 goToSignUpPage()
应返回SignUpPage
个实例,以便您可以链接下一步
@Test
public void signUp_allFieldsEmpty() {
app
.landingPage()
.goToSignUpPage()
.signUpAllFieldsEmpty();
}