Python Selenium использовать словарь для одного общего xpath для класса локатора? - PullRequest
0 голосов
/ 08 июня 2018

возможно ли получить один общий xpath для нескольких xpath, используя словарь python?В классе локаторов я хочу найти все элементы в формуле для автоматического ввода данных (для автоматизации тестирования).А в XPATH все, что изменяется для каждого поля, это просто ввод 'number + 1' каждый раз.Поэтому я создал этот словарь на python:

class CreateLabLocators(object):
formulaDictionary = {"labname":12,
                     "city":13,
                     "state":14,
                     "zipcode":15,
                     "street":16,
                     "number":17,
                     "country":18,
                     "website":19,
                     "phone":20,
                     "fax":21,
                     }

Можно ли использовать ключ и значение словаря, чтобы иметь локатор для каждого поля?Так что вместо этого:

labname = (By.XPATH, "//input[@id='__input12-inner']")
city = (By.XPATH, "//input[@id='__input13-inner']")
state = (By.XPATH, "//input[@id='__input14-inner']")
zipcode = (By.XPATH, "//input[@id='__input15-inner']")
street = (By.XPATH, "//input[@id='__input16-inner']")
number = (By.XPATH, "//input[@id='__input17-inner']") (etc...)

Есть что-то более общее.Как бы я это реализовал?Так что, если я хочу вызвать локатор вне класса, я смогу сделать это так, как ...

find_element(*CreateLabLocators.city).send_keys("abc")
find_element(*CreateLabLocators.zipcode).send_keys("123")

и так далее.Кстати, я использую Python 2.7.

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Ты мог бы сделать что-то вроде этого -

def xpath_builder(which_one):
     first_half = r"//input[@id='__input"
     second_half = r"-inner']"
     return (first_half + formulaDictionary[which_one] + second_half)

your_element = driver.find_element_by_xpath(xpath_builder(city))
0 голосов
/ 08 июня 2018

В вашем конкретном случае вы можете просто сделать следующее:

for index in range(12, 22):
    locator = (By.XPATH, "//input[@id='__input%s-inner']" % index)
    #  do something with locator

Или, если вы хотите использовать значения из словаря:

for item in formulaDictionary:
    locator = (By.XPATH, "//input[@id='__input%s-inner']" % formulaDictionary[item])
    #  do something with locator
...