Как дождаться появления текста в элементе?

Можно ли дождаться появления видимого элемента на основе текста внутри элемента STRONG ниже? Содержащийся текст всегда меняется в зависимости от триггера.

<div class = "alert message alert-success alert-danger" style = "margin-top: 5px; width: 330px; height: auto;">
  <button class = "close" type = "button" data-dismiss = "alert">x<button>
    <span>
      <strong>
        This Video Title has already been choosen - please choose a unique title that best describes the content of the video.
      </strong>
    </span>
</div>

Я пробовал с этим кодом, но получил ошибку

if wait.until(EC.visibility_of_element_located((By.XPATH, "//strong[contains(text(),'This Video Title has already been choosen - please choose a unique title that best describes the content of the video.']"))):
        print("Success")
    else:
        print("Failed")

Это то, что появляется перед текстом внутри STRONG выше

<div class = "alert message alert-success alert-danger" style = "margin-top: 5px; width: 330px; height: auto;">
  <button class = "close" type = "button" data-dismiss = "alert">x<button>
    <span>
      <strong>
        Proccessing...
      </strong>
    </span>
</div>

поэтому я пробую условие if и получаю эту ошибку:

Traceback (most recent call last):
  File "C:\Python311\Lib\runpy.py", line 198, in _run_module_as_main
    return _run_code(code, main_globals, None,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python311\Lib\runpy.py", line 88, in _run_code
    exec(code, run_globals)
  File "c:\Users\Zephyr\.vscode\extensions\ms-python.python-2022.18.2\pythonFiles\lib\python\debugpy\adapter/../..\debugpy\launcher/../..\debugpy\__main__.py", line 
39, in <module>
    cli.main()
  File "c:\Users\Zephyr\.vscode\extensions\ms-python.python-2022.18.2\pythonFiles\lib\python\debugpy\adapter/../..\debugpy\launcher/../..\debugpy/..\debugpy\server\cli.py", line 430, in main
    run()
  File "c:\Users\Zephyr\.vscode\extensions\ms-python.python-2022.18.2\pythonFiles\lib\python\debugpy\adapter/../..\debugpy\launcher/../..\debugpy/..\debugpy\server\cli.py", line 284, in run_file
    runpy.run_path(target, run_name = "__main__")
  File "c:\Users\Zephyr\.vscode\extensions\ms-python.python-2022.18.2\pythonFiles\lib\python\debugpy\_vendored\pydevd\_pydevd_bundle\pydevd_runpy.py", line 321, in run_path
    return _run_module_code(code, init_globals, run_name,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "c:\Users\Zephyr\.vscode\extensions\ms-python.python-2022.18.2\pythonFiles\lib\python\debugpy\_vendored\pydevd\_pydevd_bundle\pydevd_runpy.py", line 135, in _run_module_code
    _run_code(code, mod_globals, init_globals,
  File "c:\Users\Zephyr\.vscode\extensions\ms-python.python-2022.18.2\pythonFiles\lib\python\debugpy\_vendored\pydevd\_pydevd_bundle\pydevd_runpy.py", line 124, in _run_code
    exec(code, run_globals)
  File "e:\Coding Space\test.py", line 164, in <module>
    input_data()
  File "e:\Coding Space\test.py", line 105, in input_data
    if wait.until(EC.visibility_of_element_located((By.XPATH, "//strong[contains(text(), 'This Video Title has already been choosen - please choose a unique title that best describes the content of the video.')]"))):
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python311\Lib\site-packages\selenium\webdriver\support\wait.py", line 95, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:
Stacktrace:
RemoteError@chrome://remote/content/shared/RemoteError.sys.mjs:8:8
WebDriverError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:182:5
NoSuchElementError@chrome://remote/content/shared/webdriver/Errors.sys.mjs:394:5
element.find/</<@chrome://remote/content/marionette/element.sys.mjs:134:16

Каковы различные примеры текста, который находится в элементе STRONG? Являются ли они тонкими вариациями или совершенно разными? Сколько разных строк может быть? 10? 10 000? Кстати, вы не можете использовать селектор CSS для поиска элемента по содержащемуся тексту, который должен быть XPath.

JeffC 20.04.2023 03:46

я добавил разницу с изображением там. разница только в тексте внутри элемента STRONG. Перед текстом внутри первого изображения находится текст «Обработка...». Но он изменился, как и первое изображение

Daniel 20.04.2023 04:03

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

JeffC 20.04.2023 04:10

ладно подмечено, в следующий раз так и сделаю. извините за это, все еще новичок в stackoverflow

Daniel 20.04.2023 04:17

Намерение состоит в том, чтобы вы исправили ЭТО *и* все будущие вопросы

JeffC 20.04.2023 04:22
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
5
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Для этого уже есть ExpectedCondition... дождитесь появления указанного текста в элементе, EC.text_to_be_present_in_element(locator, expected_string).

Вы можете использовать его как

expected_string = "This Video Title has already been choosen - please choose a unique title that best describes the content of the video."
wait = WebDriverWait(driver, 10)
try:
    wait.until(EC.text_to_be_present_in_element((By.XPATH, "//strong")), expected_string)
    print("Success")
except TimeoutException:
    print("Failed")

См. документы для получения дополнительной информации.


Альтернативный

if wait.until(EC.visibility_of_element_located((By.XPATH, "//strong[contains(text(), 'This Video Title')]"))):
        print("Success")
    else:
        print("Failed")

я пытался изменить локатор, это все равно не удалось.

Daniel 20.04.2023 04:31

В чем ошибка? Вы уверены, что ожидаемая строка ВСЕГДА одна и та же? Точно так же? Можно ссылку на страницу?

JeffC 20.04.2023 04:38

он просто продолжает печатать Failed. Да, ожидаемая строка ВСЕГДА одна и та же, точно такая же. Извините, я не могу, вам нужно войти для этого

Daniel 20.04.2023 04:40

У меня был совершенно неправильный локатор в моем ответе ... Я, должно быть, скопировал его откуда-то еще. Я обновил его до правильного локатора. Если это не сработает, вам нужно проверить и посмотреть, находится ли элемент внутри IFRAME или теневого корня и т. д.

JeffC 20.04.2023 04:57

не внутри IFRAME или теневого корня, но все равно печатается Failed. ах, я собираюсь поискать и настроить больше, надеюсь, это напечатает успех

Daniel 20.04.2023 05:18

Давайте сделаем резервную копию и сделаем что-нибудь простое, чтобы убедиться, что мы не делаем ошибки. Попробуйте альтернативный ответ, который я только что добавил. Убедитесь, что этот код не находится внутри try, чтобы мы могли увидеть полное сообщение об ошибке.

JeffC 20.04.2023 05:23

я уже пробовал с условием if и получил ошибку

Daniel 20.04.2023 13:52

Какое сообщение об ошибке?

JeffC 20.04.2023 15:55

проверьте мой пост выше, я отредактировал его и добавил ошибку

Daniel 20.04.2023 15:59

Попробуйте код в моем ответе под альтернативным заголовком.

JeffC 20.04.2023 16:03

извините, мой плохой, это уже работает. спасибо за помощь

Daniel 20.04.2023 16:51

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