Ожидает ли Selenium WebElement.Click() загрузки следующей страницы?

Я говорю Selenium подождать, пока он не увидит элемент — Selenium его увидит Я говорю Selenium нажать на этот элемент, это кнопка для ссылки на новую страницу - Selenium нажимает на нее.

Проблема в том, что после нажатия на нее Selenium будет ждать, пока следующая страница не будет полностью загружена (страница иногда загружается за секунду или ждет целую вечность, я думаю, что это проблема с Zen Desk Live Chat на этой странице).

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

Я попытался изменить время ожидания с помощью

driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);

однако это не помогает. я тоже пробовал

wait.until(ExpectedConditions.visibilityOfElementLocated(
By.xpath(element)));

Однако это имеет ту же проблему.

Ниже приведен код, который я сейчас использую.

try {
    wait.until(ExpectedConditions.visibilityOfElementLocated(
    By.xpath(element)));
    WebElement we = driver.findElement(By.xpath(element));
    we.click();
    System.out.println("Clicked: " + element);
}catch (Exception e){
    System.out.println(e.getMessage()); 
}   

Я ожидаю, что как только элемент будет нажат, Selenium просто продолжит работу, не заботясь о том, загрузилась ли следующая страница или нет.

Однако то, что происходит, когда загружается вторая страница, иногда страница зависает «в ожидании widget-mediator.zopim.com», и Selenium не будет продвигаться дальше строки click() до тех пор, пока не истечет время WebDriverWait (60 секунд) По истечении 60 секунд я вижу эту ошибку в выводе консоли:

[1561374309.111][SEVERE]: Timed out receiving message from renderer: 60.000
[1561374309.112][SEVERE]: Timed out receiving message from renderer: -0.002

Здесь что-то еще происходит? Или Click() ждет, пока страница загрузится, если этот щелчок приведет к новой странице? Если это так, есть ли способ сказать ему, чтобы он перестал ждать? У меня есть другой код, чтобы проверить, загрузилась ли страница или нет, но мне не нужен Click() для этого.

Заранее спасибо.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
1 314
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Стратегия загрузки страницы по умолчанию «нормальная» или ожидание завершения документа readyState. Если вы установите для него значение «none» в возможностях, запрошенных во время создания экземпляра драйвера, драйвер вообще не будет ждать. Выбор этого маршрута будет означать, что вам нужно будет обрабатывать всю синхронизацию для загружаемых страниц. Обратите внимание, что существует третья стратегия загрузки страницы, «нетерпеливая», но на момент написания этой статьи не все реализации WebDriver (в первую очередь chromedriver) ее поддерживают.

Вы можете настроить время ожидания загрузки страницы во время выполнения в коде Selenium. Один из подходов может состоять в том, чтобы уменьшить время ожидания до относительно низкого значения на время нажатия на этот конкретный элемент, а затем восстановить его до предыдущего значения. Недостатком здесь является то, что вам придется поймать исключение тайм-аута, которое возникает, когда время загрузки страницы истекает, прежде чем продолжить.

Другие вопросы по теме