Использование 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())));
}
}
Я стараюсь размещать свою логику в объекте страницы как можно больше (включая ожидания), поскольку это делает тестовые примеры намного более читабельными.