Использование PageObjects, Page Factory и WebDriverWait в Selenium WebDriver с использованием Java

я использовал Selenium WebDriver для реализации функциональных тестов для некоторых проектов, которые ямы работали с Я'Я пытаюсь использовать шаблон дизайна Page Object с Page Factory, чтобы отделить мои локаторы. Я'Мы также создали статический объект WaitTool (singleton), который реализует несколько методов ожидания с необязательными параметрами времени ожидания.

Моя текущая проблема заключается в том, что я хотел бы использовать мои методы ожидания, прежде чем 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 signIn(String username, String password, Class 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())));
    }
}

Я стараюсь размещать свою логику в объекте страницы как можно больше (включая ожидания), поскольку это делает тестовые примеры намного более читабельными.

Ответы на вопрос(1)

Ваш ответ на вопрос