私は Selenium WebDriver を使用して、私が取り組んできたいくつかのプロジェクトの機能テストを実装しています。Page Object 設計パターンを Page Factory で使用して、ロケーターを除外しようとしています。また、オプションのタイムアウト パラメーターを使用していくつかの待機手法を実装する静的な 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())));
}
}
テストケースをより読みやすくするため、ロジックをできる限り (待機を含めて) ページオブジェクトに配置する傾向があります。