Метод поиска увеличивающегося элемента / локатора xpath — создание нескольких транзакций

#python #selenium #automation #robotframework

#python #селен #автоматизация #robotframework

Вопрос:

Robotframework-Selenium-PYTHON

Добрый день!

Проблема: я собирался создать скрипт для генерации нескольких транзакций, но проблема в том, что каждый раз, когда тест повторяется, появляется элемент, который увеличивается, и я не смог найти этот элемент

Сценарий 1: при первом запуске это значение элемента

наведите курсор мыши на xpath://b ody/div[4]/div[1]/ div[2]/form[1]/div[1]/ div[1]/ div[1] / div[9]/div[1]/ div[1] /div[1] /div[1]/div[1] / div[1]/ul[1]/li[1]/div[1]/img[1]

Сценарий 2: при втором запуске (повторите тест) теперь это значение элемента

наведите курсор мыши на xpath://body/div[4]/ div[1]/ div[2]/form[1]/div[1]/ div[1]/ div[1] / div[9]/ div[1]/ div[1]/div[1]/div[1]/ div[1]1]/div[1] / div [1]/ul[1] / li[2]/div [1]/img[1]`

Как вы можете видеть, тег li[1] из первого сценария становится li[2] во втором сценарии

Вопрос: Существует ли метод или условие, при котором мы можем выполнить тестовые шаги, если элемент / локатор изменяется или увеличивается? чтобы я мог непрерывно выполнять повторяющийся тест

Спасибо, что помогли с моей проблемой

Ответ №1:

Вы можете просто использовать while цикл в сочетании с f-strings для достижения этой цели. Вот как вы это делаете:

 from selenium.common.exceptions import NoSuchElementException

xpath_num = 1
while True:
    try:
        element = driver.find_element_by_xpath(f'//body/div[4]/div[1]/div[2]/form[1]/div[1]/div[1]/div[1]/div[9]/div[1]/div[1]/div[1]/div[1]/div[1]/ul[1]/li[{xpath_num}]/div[1]/img[1]')
        xpath_num  = 1
    except NoSuchElementException:
        break #Breaks when element is not found
  

Редактировать:

Чтобы реализовать то же самое в mouseover методе, попробуйте следующее:

 from selenium.webdriver.common.action_chains import ActionChains

xpath_num = 1
while True:
    try:
        element = driver.find_element_by_xpath(f'//body/div[4]/div[1]/div[2]/form[1]/div[1]/div[1]/div[1]/div[9]/div[1]/div[1]/div[1]/div[1]/div[1]/ul[1]/li[{xpath_num}]/div[1]/img[1]')
        xpath_num  = 1
        hover = ActionChains(driver).move_to_element(element)
        hover.perform()

    except NoSuchElementException:
        break #Breaks when element is not found
  

Комментарии:

1. спасибо за предложение, просто последующий вопрос, как я могу использовать этот метод в тестовом скрипте, например, наведите курсор мыши на него? #новичок

2. Не могли бы вы подробнее рассказать об этом? Кстати, если мой ответ вам помог, пожалуйста, примите мой ответ как лучший ответ.

3. Я имею в виду, куда мне поместить цикл while в сочетании с f-строками, о которых вы упомянули? Должен ли я создать еще один новый файл python и вызвать его в тестовом скрипте?

4. Вы можете добавить его в основной скрипт ur. Просто добавьте все действия, которые вы хотите выполнить с элементом, в try блок кода.

5. код не работает, появляется предупреждение Не удается найти ссылку ‘find_element_by_xpath’ в ‘driver.py «можете ли вы привести мне пример добавления условия к методу наведения курсора мыши