Selenium: Firefox с WebDriver: проблема загрузки страницы - PullRequest
1 голос
/ 31 августа 2011

Версия SeleniumServer: 2.5.0, версия Firefox: 4.0.1

У меня есть ситуация, когда гиперссылка «Новый вопрос» отображается через вызов Ajax. Как только загрузка страницы будет завершена, мне нужно нажать на эту гиперссылку, чтобы продолжить. Я использую что-то вроде ниже, чтобы подождать, пока ссылка не появится, а затем нажать на нее.

while (!(driver.findElement(By.xpath("//a[text()='New Question']")).isEnabled())) {
            Thread.sleep(1000);
}
driver.findElement(By.xpath("//a[text()='New Question']")).click();

Это работает как шарм в IE. Но в Firefox ссылка не нажата.

Это говорит мне о том, что Firefox сообщает Selenium, что страница загружается, когда она загружена не полностью, тогда как IE делает правильные вещи.

Чтобы проверить, происходит ли на самом деле щелчок, я добавил javascript: alert("Hello From Chandra"); к нажатию гиперссылки. Всплывающее окно появилось в IE, но не в Firefox.

Вопрос: я делаю что-то не так / неадекватно? Есть ли обходной путь?

Спасибо. PS: Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

Ответы [ 3 ]

3 голосов
/ 03 сентября 2011

Вам не нужен цикл while, вы можете неявно использовать Wait при инициализации драйвера. Это заставит драйвер опрашивать на наличие элемента в течение 90 секунд, прежде чем выбрасывать исключение «элемент не найден».

 driver.manage().timeouts().implicitlyWait(90, TimeUnit.SECONDS);
 driver.findElement(By.xpath("//a[text()='New Question']")).click();
0 голосов
/ 10 октября 2016

Вы все еще можете ускорить выполнение скрипта, ожидая наличия (не ожидая видимости, isEnabled) ожидаемого элемента, скажем, 5-8 секунд, а затем отправляя JS-скрипт window.stop (), чтобы остановить загрузку других элементов, не ожидаядля загрузки всей страницы или перехвата исключения тайм-аута для загрузки страницы через 5-8 секунд, затем вызывается window.stop ()

Потому что, если на странице не используется метод ленивой загрузки (загрузка только видимого элемента и загрузка остальных элементов)только после прокрутки) он загружает каждый элемент перед возвратом состояния window.ready, поэтому будет медленнее, если какой-либо элемент займет больше времени для рендеринга.

0 голосов
/ 05 сентября 2011

Спасибо Nilesh и prestomanifesto, но я пробовал «WebDriverWait» и «implicitlyWait» перед тем, как включить цикл while (который также не работал), и он не работал.Я немного покопался и, похоже, нашел решение следующим образом.Существует текстовое поле «поиск», которое получает фокус после завершения загрузки страницы.Я использовал 'activeElement', чтобы проверить, действительно ли фокус установлен.

 while (!driver.findElement(By.id("searchValue")).isEnabled()) {
            WebElement currActiveElement = driver.switchTo().activeElement();
            if (currActiveElement.getAttribute("id").equals("searchValue")) {
                break;
            }
            Thread.sleep(1000);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...