Как я могу ссылаться на локатор, который меняется на конечный ди git в заполнителя в xpath в Selenium Python / pytest - PullRequest
0 голосов
/ 27 января 2020

Я пытаюсь щелкнуть и добавить несколько элементов подряд, которые находятся в разных элементах div, но имеют заполнитель, изменяющийся только на конечный ди git, как указано ниже.

input type="text" placeholder="Scale Point 1" value=""
input type="text" placeholder="Scale Point 2" value=""

и т. д.

Я пытался использовать для l oop, как показано ниже, чтобы избежать повторяющихся блоков кода.

for i in range(1,6,1):
        driver.find_element_by_xpath(abc.element_xpath+str(i)).click()

, где element_xpath равен

"//input[@placeholder="Scale Point"]"

Пожалуйста Предложите способ избежать повторяющихся блоков кода в Selenium Python (pytest) для описанного выше случая.

Ответы [ 2 ]

2 голосов
/ 27 января 2020

Вам нужно поместить заполнитель в element_xpath и вставить номер с помощью format

element_xpath = '//input[@placeholder="Scale Point {}"]'

for i in range(1,6,1):
    driver.find_element_by_xpath(abc.element_xpath.format(i)).click()
0 голосов
/ 27 января 2020

Есть пара вещей, о которых нужно позаботиться. В соответствии с HTML-файлами, которыми вы поделились:

<input type="text" placeholder="Scale Point 1" value="">

и

<input type="text" placeholder="Scale Point 2" value="">

Значение Точка шкалы точно не является заполнителем элементы, кроме частичного заполнитель . Таким образом, вам необходимо изменить определение element_xpath, используя один из следующих подходов:

  • Использование %s:

    "//input[starts-with(@placeholder, 'Scale Point') and contains(@placeholder, '%s')]"% str(i)
    
  • Использование format():

    '//input[starts-with(@placeholder, "Scale Point") and contains(@placeholder, "{}")]'.format(str(i))
    

Таким образом, фактически ваш кодовый блок будет:

for i in range(1,6,1):
    driver.find_element_by_xpath(abc.element_xpath).click()
...