Селен - Как получить все кадры с помощью шаблона 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")));
Другие вопросы по тегам