Korzystanie z PageObjects, Page Factory i WebDriverWait w Selenium WebDriver przy użyciu Java

Używam Selenium WebDriver do wdrażania testów funkcjonalnych dla niektórych projektów, z którymi pracowałem. Próbuję użyć wzorca projektu Obiekt strony z Page Factory, aby wyodrębnić moje lokalizatory. Stworzyłem także statyczny obiekt WaitTool (singleton), który implementuje kilka technik oczekiwania z opcjonalnymi parametrami limitu czasu.

Mój obecny problem polega na tym, że chciałbym użyć moich metod oczekiwania, zanim PageFactory podejmie próbę zainicjowania WebElements. Powodem, dla którego chciałbym poczekać, jest to, że PageFactory może próbować zainicjować elementy strony, zanim będą one dostępne na stronie.

Oto przykładowy obiekt 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);
    }
}

Oto przykładowy obiekt testowy:

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())));
    }
}

Mam tendencję do umieszczania mojej logiki w obiekcie strony tak bardzo, jak to możliwe (w tym oczekiwania), ponieważ sprawia, że ​​przypadki testowe są o wiele bardziej czytelne.

questionAnswers(1)

yourAnswerToTheQuestion