我一直在使用Selenium WebDriver爲我一起工作的一些項目實現功能測試。我試圖在Page Factory中使用Page Object設計模式來分解我的定位器。我還創建了一個靜態的WaitTool對象(單例),它實現了幾個可選的超時參數的等待技術。在使用Java的Selenium WebDriver中使用PageObjects,Page Factory和WebDriverWait
我目前的問題是,我想在PageFactory嘗試初始化WebElement之前使用我的等待方法。我想等待的原因是因爲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())));
}
}
我傾向於把我的邏輯在Page對象儘可能多地(包括等待),如它使測試案例更具可讀性。
我想這意味着我不能在signIn函數中返回'PageFactory.initElements(driver,expectedPage)'。 – 2013-04-25 22:32:19
'PageFactory.initElements(driver,this.class);'似乎不起作用。提供'this'或'this.getClass()'可行,但我不確定這是否正在做我想做的。 – 2013-04-25 22:38:51
對不起,這是我的答案中的錯誤。我的意思就是這個(回答更新顯示正確的代碼片段) – Ardesco 2013-04-26 05:29:30