Выражение Xpath для выбора элементов относительно текущего узла - PullRequest
0 голосов
/ 23 сентября 2019

Я использую Selenium Webdriver в Python.Я хочу перебрать и посчитать количество видимых элементов ввода с помощью type="text" или type="password" или type="button".Я хочу сделать это, сначала извлекая входные теги, а затем перебирая их.

Вот что я пробовал -

Text_Xpath2 = "./[@type='text' or @type='email' or @type='username']"
Pass_Xpath2 = "./[@type='password']"
Button_Xpath2 = "./[@type='button' or @type='submit']"

or 

Text_Xpath2 = "[@type='text' or @type='email' or @type='username']"
Pass_Xpath2 = "[@type='password']"
Button_Xpath2 = "[@type='button' or @type='submit']"


inputs = browser.find_elements_by_xpath('//input')

for input in inputs:
    if input.is_displayed():
        text_fields = input.find_element_by_xpath(Text_Xpath2)
        pass_fields = input.find_element_by_xpath(Pass_Xpath2)
        buttons = input.find_element_by_xpath(Button_Xpath2)

Я всегда получаю эту ошибку -

Строка './[@type='text' или @ type = 'email' или @ type = 'username'] 'не является допустимым выражением XPath.

Можеткто-нибудь укажет в чем ошибка?

1 Ответ

1 голос
/ 23 сентября 2019

Вам не хватает тега, например <div>

".//div[@type='text' or @type='email' or @type='username']"

Или любого тега

".//*[@type='text' or @type='email' or @type='username']"

В случае, если он вам не нужен, . in xpath используется для нахождения элемента-потомка текущего элемента, а не для повторного перемещения этого же элемента.Попробуйте

inputs = browser.find_elements_by_xpath('//input[@type="text" or @type="email" or @type="username"]')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...