Подождите, пока появится один из двух элементов, используя By.XPATH, '// * [contains (text (), - PullRequest
0 голосов
/ 13 июля 2020

Ни в одном из примеров, которые я нахожу, не используется By.XPATH,'//*[contains(text(),.

У меня есть работа Syntheti c, где есть вероятность появления одного из двух текстов. Если появится хоть один из них, я хочу уйти. Я хочу использовать or, а не два отдельных WebDriverWait.

Мой текущий код для проверки только одного текста, который работает:

WebDriverWait(driver,30).until(EC.presence_of_element_located((By.XPATH,'//*[contains(text(), "More than 3000 results")]')))

Я пробовал следующие три, но ни один из них не работает. Он не находит текст, или я получаю синтаксическую ошибку в первом примере.

WebDriverWait(driver, 30).until(ExpectedConditions.or(
    EC.presence_of_element_located((By.XPATH,'//*[contains(text(), "More than 3000 results")]')),
    EC.presence_of_element_located((By.XPATH,'//*[contains(text(), "The search returned zero results")]'))
    )); 

WebDriverWait(driver,30).until(EC.presence_of_element_located((By.XPATH,'//*[contains(text(), "More than 3000 results")]', '//*[contains(text(), "The search returned zero results")]')))

WebDriverWait(driver,30).until(EC.presence_of_element_located((By.XPATH,'//*[contains(text(), "More than 3000 results")]')) or ((By.XPATH,'//*[contains(text(), "The search returned zero results")]')))

Если я смогу найти работы, я заключу его в Try/Except с driver.quit() в Try.

Ниже приведены дополнительные вопросы, которые мне задали:

Я привел три примера того, что я пытался. Только в первом примере отображается синтаксическая ошибка. Второй и третий примеры просто не видят ни одного из двух сообщений, и сценарий просто продолжается.

Это синтаксическая ошибка:

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

Try the new cross-platform PowerShell https://aka.ms/pscore6

PS C:\Github\appd-selenium-scripts\Prod>  & 'python' 'c:\Users\uswarv41\.vscode\extensions\ms-python.python-2020.6.91350\pythonFiles\lib\python\debugpy\launcher' '63733' '--' 'c:\Github\appd-selenium-scripts\Prod\Claims_CC_PROD_Document_Integration_Validation_Synthetic_Script.py'
  File "c:\Github\appd-selenium-scripts\Prod\Claims_CC_PROD_Document_Integration_Validation_Synthetic_Script.py", line 271
    WebDriverWait(driver, 30).until(ExpectedConditions.or(
                                                       ^
SyntaxError: invalid syntax
PS C:\Github\appd-selenium-scripts\Prod> 

Оба следующих работают сами по себе, вот почему я хочу найти правильный способ использования or

try:
    time.sleep(1)
    WebDriverWait(driver,30).until(EC.presence_of_element_located((By.XPATH,'//*[contains(text(), "More than 3000 results")]')))
    driver.quit()
except:
    print("Did not see More than 3000 results text")

Continue with script...
try:
    time.sleep(1)
    WebDriverWait(driver,30).until(EC.presence_of_element_located((By.XPATH,'//*[contains(text(), "The search returned zero results")]')))
    driver.quit()
except:
    print("Did not see The search returned zero results text")

Continue with script...

Ответы [ 2 ]

0 голосов
/ 13 июля 2020

Используйте следующий xpath, который вернет оба элемента.

WebDriverWait(driver,30).until(EC.presence_of_element_located((By.XPATH,'//*[normalize-space(.)="More than 3000 results" or normalize-space(.)="The search returned zero results"]')))

ИЛИ вы также можете использовать ниже xpath. #

//*[contains(text(),"More than 3000 results") or contains(text(),"The search returned zero results")]
0 голосов
/ 13 июля 2020

Ваш код выглядит довольно правильным. Можете ли вы опубликовать сообщения об ошибках, которые вы получаете, и, возможно, html, с которым вы работаете, чтобы мы тоже могли его протестировать? строка может все испортить. Обычно я избегаю всех кавычек внутри строки при использовании селена, так что, возможно, вы могли бы попробовать это. Таким образом, ваша строка xpath становится:

'//*[contains(text(), \"More than 3000 results\")]'

На самом деле, из вашего редактирования, я думаю, проблема в том, что ее просто нет в python. Посмотрите здесь и здесь . Я думаю, что текущий синтаксис, который вы используете, существует только в Java.

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