mle*_*ing 6 java selenium pageobjects selenium-webdriver
我是一名相对较新的QA工程师,致力于学习Selenium(Java),我想使用页面对象来模拟我的页面.
目前,我正在这样做,我的页面对象类是静态变量(用于定位页面元素的对象)和静态方法(用于获取By对象和执行页面函数)的集合.这对我来说似乎是最简单的方法,因为我的方法不需要依赖任何实例变量,只需要依赖定位器.
我只是在我的测试代码中调用这些方法.
但是,我读到的关于页面对象的所有内容都涉及实例化它们并让方法返回页面对象.这似乎让一切变得更加复杂.例如,我没有一个登录方法,而是需要两个,一个用于登录成功,一个用于登录失败.
我知道它似乎是公认的最佳实践,但我想了解原因.谢谢.
这是我的pageObject代码,我的测试调用方法为 LoginPage.login(username, password);
package pageObjects;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
public class LogInPage {
private static By emailTxtB = By.id("user_email");
private static By passwordTxtB = By.id("user_password");
private static By logInButton =
By.xpath("/html/body/div/div[2]/form/div[2]/div[2]/div/button");
private static By signUpButton = By.xpath("/html/body/div/div[2]/form/div[2]/div[2]/div/a");
private static By valErrorMessage = By.id("flash_alert");
public static void logIn(WebDriver driver, String email, String password){
//Fill out form
driver.findElement(emailTxtB).sendKeys(email);
driver.findElement(passwordTxtB).sendKeys(password);
//Submit form
driver.findElement(logInButton).click();
}
public static void goToSignUp(WebDriver driver){
driver.findElement(signUpButton).click();
}
public static String getValErrorMessage(WebDriver driver){
return driver.findElement(valErrorMessage).getText();
}
public By getEmailTxtB(){
return emailTxtB;
}
public By getPasswordTxtB(){
return passwordTxtB;
}
public By getLogInButton(){
return logInButton;
}
public By getSignUpButton(){
return signUpButton;
}
}
Run Code Online (Sandbox Code Playgroud)
两个月前我开始使用 Selenium 和 Page Objects。我也对这个话题很好奇。大约 1 个月前,我决定使用类和静态方法。但随着代码库的成长,我开始考虑切换到对象实例。主要原因 - 对象可以有状态。在对象中,我可以检查我是否真的在使用正确的页面。对于类,我只能假设当前的 html 与类匹配(或者在页面对象的每个静态方法中使用断言来使我的代码膨胀)。另一个原因 - 自动完成。静态方法鼓励测试人员使用类,而不是类变量。因此,找到正确的类来调用方法变得越来越难。对于对象,如果您想调用任何方法,则必须声明一个变量。所以你可以调用的内容是有限的。使用类和静态方法,您可以随时调用任何方法(并且测试失败,因为预期的 html 不可用,例如)。当您尝试教您的团队成员使用您的代码时,它开始成为一个问题。只要您是唯一的测试编写者,就可以了。
| 归档时间: |
|
| 查看次数: |
3101 次 |
| 最近记录: |