Селен - Как получить все кадры с помощью шаблона Pom Object и PageFactory?
Веб-страница содержит 2 кадра.
Мой сценарий Selenium:
@FindBy(how = How.XPATH, using = ".//iframe") private List <WebElement> framesList;
public myPage (WebDriver driver){
this.driver = driver;
PageFactory.initElements(driver, this);
}
public void goFrame2() {
if (framesList.size() >= 1) {
driver.switchTo().frame(framesList.get(1));
}
}
Когда я выполняю скрипт, размер liste framesList всегда равен 1. Обнаружен только один кадр. Если я добавлю Thread.sleep за 5 секунд до PageFactory.initElements(это драйвер); второй кадр обнаружен и размер списка равен 2.
Конечно, я не хочу использовать Thread.sleep. Как правильно определить 2 кадра?
Julien
2 ответа
Вы должны использовать AjaxElementLocatorFactory
Создайте конструктор класса, как показано ниже:
public class Login{
public Login(WebDriver driver) {
// TODO Auto-generated constructor stub
this.driver = driver;
PageFactory.initElements(new AjaxElementLocatorFactory(driver, 20), this);
}
}
Он будет ожидать элементы в течение указанного (20 секунд) времени.
Итак, вы должны явно найти селектор xpath/css второго фрейма (он определенно будет отличаться от первого) и ждать до тех пор, пока он не появится. Только после этого вы можете использовать свой код. Вот пример того, как вы можете ждать фрейм, содержащий класс с именем "class":
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(
ExpectedConditions.visibilityOfElementLocated(By.cssSelector("frame.someclass")));