【发布时间】:2013-04-24 02:02:23
【问题描述】:
我一直在使用 Selenium WebDriver 为我参与过的一些项目实施功能测试。我正在尝试将页面对象设计模式与页面工厂一起使用来分解我的定位器。我还创建了一个静态 WaitTool 对象(单例),它使用可选的超时参数实现了几种等待技术。
我当前的问题是我想在 PageFactory 尝试初始化 WebElements 之前使用我的等待方法。我想等待的原因是因为 PageFactory 可能会在页面元素可用之前尝试初始化它们。
这是一个示例 PageObject:
public class SignInPage extends PageBase {
@FindBy(id = "username")
@CacheLookup
private WebElement usernameField;
@FindBy(id = "password")
@CacheLookup
private WebElement passwordField;
@FindBy(name = "submit")
@CacheLookup
private WebElement signInButton;
public SignInPage(WebDriver driver) {
super(driver);
WaitTool.waitForPageToLoad(driver, this);
// I'd like initialisation to occur here
}
public MainPage signInWithValidCredentials(String username, String password){
return signIn(username, password, MainPage.class);
}
private <T>T signIn(String username, String password, Class<T> expectedPage) {
usernameField.type(username);
passwordField.type(password);
signInButton.click();
return PageFactory.initElements(driver, expectedPage);
}
}
这是一个示例 TestObject:
public class SignInTest extends TestBase {
@Test
public void SignInWithValidCredentialsTest() {
SignInPage signInPage = PageFactory.initElements(driver, SignInPage.class);
MainPage mainPage = signInPage.signInWithValidCredentials("sbrown", "sbrown");
assertThat(mainPage.getTitle(), is(equalTo(driver.getTitle())));
}
}
我倾向于将我的逻辑尽可能多地放在页面对象中(包括等待),因为它使测试用例更具可读性。
【问题讨论】:
标签: java selenium-webdriver pageobjects