Python. Кликнуть по элементу из списка find_elements_

Начинаю осваивать автоматизированное тестирование, и столкнулся с проблемой. Не могу понять, как правильно работать с find_elements на python.
Как пример, имеем страницу http://www.alfastrah.ru/individuals/auto/kasko/calc/
Нужно кликнуть по марке автомобиля. Но указание куда кликать надо задать не конкретную ссылку, а чтобы ссылка выбиралась из списка find_elements.
Я попытался сделать так

marka = “AUDI”

def auto_marka_select(self, marka):
    list = self.driver.find_elements_by_xpath('/html/body/div[1]/div/div/div[2]/div[4]/div[1]/div[4]/div[1]')
    for auto in list:
        if auto.text == marka:
            auto.click()
            break
    else:
        print('Такой марки авто нет: '+marka)

Был бы Вам признателен, если бы Вы подсказали, в каком месте у меня ошибка.

PS не обращайте внимания на такой корявый xpath — к сожалению, я еще не постиг этот дзен

Сделайте нормальный xpath с привязкой по тексту марки вместо перебора всех элементов и будет вам счастье :slight_smile:

Не совсем понял Ваш совет :frowning:

Наверно имелось виду использовать для поиска такой XPATH .//a[contains(text(),‘AUDI’)] А Ваш XPATH не возвращает список элементов кстати, он вернет 1-у запись - это общий div в котором находяться эти марки.

Примного благодарен. Обязательно попробую Ваш вариант.

А чтобы получить список всех ссылок c марками авто можно использовать что-то вроде .//div[@class=‘b-alphabet-list__column’]/a

  1. Придерживайся правил оформления на форуме. Три апострофа вначале и в конце оформят твой код как надо.
  2. По существу. Юзай нормальный xpath в твоем случае. Перебирать не надо.
driver.find_element_by_xpath("*//div[@class='b-alphabet-list__column']/a[contains(., 'BMW')]").click()

Вместо 'BMW` подставляй свою переменную.
Но сначала надо весь список раскрыть по ссылке “Другие марки”, иначе кликнуть не сможешь.

1 лайк
  1. раскрываем полностью список - b-kasko__more-makers b-link b-link_dotted js-toggle-block или ищем по имени ссылки, или через атрибут какой-либо. Кликаем.
  2. находим начальный тег всего списка - b-alphabet-list.
  3. У списка ищем ссылку которая имеет текст который вам нужно найти (link_text). Более хуже вариант, ищем все теги A, и по очереди спрашиваем текст атрибут, и поочередно сравниваем с вашим названием. Вообще вызов функции в цикле, это плохая практика, лучше тогда использовать filter, по отношению к листу возвращенных елементов

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

1 лайк