Python + Selenium - Как найти динамический элемент - PullRequest
0 голосов
/ 29 декабря 2018

Я новичок в Selenium.Я пытаюсь нажать на элемент, структура HTML выглядит следующим образом:

<label>
     <span> text </span>
</label>

Мне нужно нажать на «текст» в <span>, все это находится внутри другого span / div / body и т. Д.и я пытаюсь сделать его динамичным, чтобы я мог найти его с другим текстом.

И я использую код ниже:

[...]
vote = input("Which option should I vote for you? :  ")
option = "//label/span[contains(.,'" + vote + "')]\""
option = str(option)
[...]
browser.find_element_by_xpath(option).click()

Ответы [ 3 ]

0 голосов
/ 29 декабря 2018

Дополнительная двойная кавычка делает ваш xpath недействительным - этот здесь, экранированный:

 "')]\""

Когда строится строка option, xpath заканчивается

//label/span[contains(.,'text')]"

, где " в конце разбивает его.

Просто бросьте его, и вам будет хорошо:

option = "//label/span[contains(.,'" + vote + "')]"

Вам не нужно разыгрыватьoption к строке - это уже такого типа.Кроме того, этот способ построения строки - с использованием форматирования строки - является более "питоническим":

option = "//label/span[contains(.,'{}')]".format(vote)
0 голосов
/ 29 декабря 2018

Для нажатия на динамический элемент вы можете использовать следующее решение:

vote = input("Which option should I vote for you? :  ")
browser.find_element_by_xpath("//label/span[normalize-space()='" + vote + "']").click()
0 голосов
/ 29 декабря 2018

Вы можете использовать CSS Selector, однако, не зная структуру остальной части DOM, это может быть недостаточно уникальным, чтобы надежно захватить нужный элемент:

find_element_by_css_selector("label span")

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