Как дождаться загрузки указанного URL-адреса c перед вызовом функции с использованием Selenium и Python - PullRequest
1 голос
/ 14 января 2020

Это моя первая публикация на stackoverflow, и я несколько новичок в Selenium и Python.

Я не хочу запускать функцию, когда URL равен fx: https://www.example.com.

Я прочитал этот ответ в другом обсуждении, но я не совсем понял, что происходит.

Надеюсь, вы нашли время, чтобы ответить на мой вопрос.

Хорошо, я только что попробовал это:

driver.get('https://www.google.com')
time.sleep(4)
driver.get('https://www.stackoverflow.com')

if WebDriverWait(driver, 10).until(EC.url_to_be('https://stackoverflow.com')):
    print('Desired url was rendered within allocated time')
else:
    print('Desired url was not rendered within allocated time')

Но это не сработало. Есть идеи?
Консоль говорит

Traceback (most recent call last):
  File "/Users/holger/PycharmProjects/waitTest/wait.py", line 15, in <module>
    if WebDriverWait(browser, 10).until(EC.url_to_be('https://www.stackoverflow.com')):
  File "/Users/holger/PycharmProjects/waitTest/venv/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: 

1 Ответ

0 голосов
/ 14 января 2020

Если ваш сценарий использования должен запускать функцию, когда URL-адрес равен https://www.example.com, вы вызываете WebDriverWait несоответствие с любым из следующих ожидаемых_условий :

  • url_changes(url): ожидание проверки текущего URL, который не должен быть точным соответствием.

    WebDriverWait(driver, 30).until(EC.url_changes("https://www.example.com"))
    
  • url_contains(url): ожидание того, что URL текущей страницы будет содержать указанный c текст.

    WebDriverWait(driver, 30).until(EC.url_contains("example"))
    
  • url_matches(pattern): ожидание URL-адрес, соответствующий заданному регулярному выражению c.

    WebDriverWait(driver, 30).until(EC.url_matches("a_matching_pattern_of_the_expected_url"))
    
  • url_to_be(url): ожидание, что URL текущей страницы будет указанным c url.

    WebDriverWait(driver, 30).until(EC.url_to_be("https://www.example.com"))
    
  • Примечание : необходимо добавить следующие операции импорта:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    

Однако WebDriverWait в сочетании с вышеупомянутым expected_conditions может не гарантировать, что все элементы в DOM Tree полностью загружены.

Подробное обсуждение можно найти в Есть ли у нас какая-либо универсальная функция c, чтобы проверить, полностью ли загружена страница в Selenium


Обновление

Для запуска функции, если WebDriverWait возвращает True, вы можете использовать следующее решение:

try:
    WebDriverWait(driver, 30).until(EC.url_to_be("https://www.example.com")))
    print("Desired url was rendered with in allocated time")
    # now you can call the method/function
    # test_me("Holger")
except TimeoutException:
    print("Desired url was not rendered with in allocated time")

Примечание : необходимо добавить следующее import:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

Ссылка

Соответствующее подробное обсуждение можно найти в:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...