Я работаю над приложением, в пользовательском интерфейсе которого есть вложенные фреймы. Некоторые фреймы iframe обновляются во время выполнения теста. Есть ли способ имитировать обновление iframe с помощью Selenium? Я пробовал использовать Javascript и WebDriverWait, но это не сработало.
Я использовал следующие методы:
public static void waitForIframeToLoad(String frameName){
WebDriverWait wait = new WebDriverWait(driver,60);
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(frameName));
}
public static void refreshIFrameUsingJavaScript(String iFrameName)
{
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript(String.format("document.getElementById('{0}').src = " +
"document.getElementById('{0}').src", iFrameName));
}
Однако оба эти метода не работают. Я могу переключаться между фреймами с помощью driver.switchTo (). Frame ("main"). SwitchTo (). Frame ("framename")
Фрейм main является родительским и содержит несколько дочерних фреймов. Дочерние фреймы обновляются после того, как пользователь нажимает какую-либо кнопку, и мне нужно проверить текст в дочернем фрейме после его обновления. Однако после обновления дочернего фрейма я не могу получить доступ к каким-либо элементам скрипта. Кто-нибудь работал по подобному сценарию? каков наилучший обходной путь для этого?
Вопросы, требующие помощи по отладке («Почему этот код не работает?»), Должны включать в себя желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для их воспроизведения в самом вопросе. Вопросы без четкой постановки проблемы не будут полезны другим читателям. См .: Как создать минимальный, полный и проверяемый пример.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Когда вы обновляетесь, ваши объекты веб-элементов становятся «устаревшими» и больше не являются теми же объектами. Вам необходимо (повторно) создать экземпляр объекта (ов) веб-элемента. Возможно, вам даже придется сначала переключиться обратно на родительский фрейм, затем перейти к дочернему фрейму и, наконец, создать экземпляры ваших объектов веб-элемента.