Как заставить Selen WebDriver в Python ждать 5 минут после отправки определенной формы? - PullRequest
0 голосов
/ 10 июля 2019

Я не хочу менять неявное ожидание WebDriver, поскольку эта проблема возникает только при конкретном щелчке.

Обратите внимание: после оператора click не выполняется код.Это не обычный сбой ожидания.Я попытался добавить простой «print (« test »)» после driver.find_element_by_xpath (xpath) .click (), но выполнение завершается с ошибкой при самом щелчке. Печать не выполняется. Тайм-аут веб-драйвера при ожидании загрузки страницы (вверхиз 5 минут).

Мне нужно отправить определенную форму. Эта форма занимает много времени после нажатия на кнопку отправки. Загрузка следующей страницы может занять до 5 минут.

Тайм-аут WebDriver после нажатия этой кнопки с исключением «TimeOut».

Вот трассировка стека:

Трассировка (последний последний вызов):

Файл "C: /Users/user.domain/PycharmProjects/server_config/server_config.py", строка 704, в # Применить файл сброса "C: /Users/user.domain/PycharmProjects/server_config / server_config.py ", строка 222, в server_reset logger.info (" Сброс конфигурации сервера ") Файл" C: \ Program Files (x86) \ Python36-32 \ lib \ site-packages \ selenium \ webdriver \ remote \webelement.py ", строка 80, в клике self._execute(Command.CLICK_ELEMENT) Файл "C: \ Program Files (x86) \ Python36-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ webelement.py", строка 501, в _execute возвращает self._parent.execute (команда, params) Файл «C: \ Program Files (x86) \ Python36-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py», строка 308, в исполняемом файле self.error_handler.check_response (response) (response)C: \ Program Files (x86) \ Python36-32 \ lib \ site-packages \ selenium \ webdriver \ remote \ errorhandler.py ", строка 194, в check_response поднять исключительный_класс (сообщение, экран, отслеживание стека) selenium.common.exceptions.TimeoutException: сообщение: timeout (информация о сеансе: chrome = 75.0.3770.100) (информация о драйвере: chromedriver = 74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs / Branch-Heads / 3729 @ {# 29}), платформа = Windows NT 1086643)

Иногда страница выдает ошибку и даже не показывает целевую страницу.В других случаях это занимает 5 минут или даже больше.

Как я могу обработать этот конкретный клик?Что является более элегантным способом обработки запроса ожидания вместо изменения значений неявного ожидания до и после этого нажатия?

Ответы [ 3 ]

1 голос
/ 10 июля 2019

implicit wait не влияет на загрузку страницы, оно имеет отношение только к поиску веб-элементов с функциями find_element().

Вы можете использовать driver.set_page_load_timeout(timeout), чтобы увеличить время, которое драйвер ожидает загрузки страницы(хотя согласно спецификации w3c значение по умолчанию уже 5 минут).

Если страница вообще не загружается, вы можете использовать try except, если хотите что-то сделатькроме завершения за исключением

try:
    driver.find_element_by_xpath(xpath).click()
except TimeoutException:
    print('Failed to load next page')
    # do something
    # or rethrow the exception with 'raise'
0 голосов
/ 10 июля 2019

Проверьте наличие элемента html, который существует в случае как успешной, так и недопустимой отправки формы, если он существует, дождитесь изменения состояния / значения этого конкретного элемента html.

Например, приведенный ниже код написан на Java.

WebDriverWait wait = new WebDriverWait(driver, 10);
element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id(<message>)));
String result = null;

if(element.isDisplayed() && element.getText().contains("Successfully"))
     result = driver.findElement(By.id(<name>)).getText();
else
    result = element.getText();
0 голосов
/ 10 июля 2019

Я имел в виду что-то вроде:

   WebElement.click();
  int counter = 0;
  do
    {

      switch (elementStatus)
      {
        case "Element is not present":

          Thread.sleep(100000);
          counter++;
          if (counter == 4)
            throw new AutomationException("Form submission is taking time. Please check manually.");
          break;

        case "Element is present":
          counter = 4;
          break;

      }

    } while (counter < 4);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...