Можно ли дождаться появления видимого элемента на основе текста внутри элемента 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. Перед текстом внутри первого изображения находится текст «Обработка...». Но он изменился, как и первое изображение
Скриншоты пользовательского интерфейса великолепны, скриншоты кода или HTML — нет. Пожалуйста, прочтите, почему скриншот кода/HTML — плохая идея. Вместо этого вставьте HTML как текст и правильно отформатируйте его.
ладно подмечено, в следующий раз так и сделаю. извините за это, все еще новичок в stackoverflow
Намерение состоит в том, чтобы вы исправили ЭТО *и* все будущие вопросы
Для этого уже есть 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")
я пытался изменить локатор, это все равно не удалось.
В чем ошибка? Вы уверены, что ожидаемая строка ВСЕГДА одна и та же? Точно так же? Можно ссылку на страницу?
он просто продолжает печатать Failed. Да, ожидаемая строка ВСЕГДА одна и та же, точно такая же. Извините, я не могу, вам нужно войти для этого
У меня был совершенно неправильный локатор в моем ответе ... Я, должно быть, скопировал его откуда-то еще. Я обновил его до правильного локатора. Если это не сработает, вам нужно проверить и посмотреть, находится ли элемент внутри IFRAME или теневого корня и т. д.
не внутри IFRAME или теневого корня, но все равно печатается Failed. ах, я собираюсь поискать и настроить больше, надеюсь, это напечатает успех
Давайте сделаем резервную копию и сделаем что-нибудь простое, чтобы убедиться, что мы не делаем ошибки. Попробуйте альтернативный ответ, который я только что добавил. Убедитесь, что этот код не находится внутри try
, чтобы мы могли увидеть полное сообщение об ошибке.
я уже пробовал с условием if и получил ошибку
Какое сообщение об ошибке?
проверьте мой пост выше, я отредактировал его и добавил ошибку
Попробуйте код в моем ответе под альтернативным заголовком.
извините, мой плохой, это уже работает. спасибо за помощь
Каковы различные примеры текста, который находится в элементе STRONG? Являются ли они тонкими вариациями или совершенно разными? Сколько разных строк может быть? 10? 10 000? Кстати, вы не можете использовать селектор CSS для поиска элемента по содержащемуся тексту, который должен быть XPath.