Как написать параметризованный xpath? - PullRequest
0 голосов
/ 07 июня 2018

У меня есть выпадающее меню «Выбор рабочей области», ниже приведен xpath (с использованием firebug) и HTML-код для этого.Проблема в том, что xpath постоянно меняется.Как параметризовать xpath для этого?Например, с одним xpath мне нужно написать функцию, которую можно использовать для вызова другого.

xpath -> .//*[@id='step-content-2']/div/md-content/form/div/div[1]/div[1]/md-card[1]/md-card-content/form-field-panel/div/ul/li[2]/div/div/div/span/span/span[1]

html -> <span class="k-input" unselectable="on">Select Work Area...</span>

Раскрывающийся список содержит 4 имени, ниже указаны его xpath и html

xpath -> html/body/div[3]/div/div[3]/ul/li[1]

html -> <li class="k-item" data-offset-index="0" unselectable="on" role="option" tabindex="-1">Cheyenne</li>

xpath -> html/body/div[3]/div/div[3]/ul/li[2]

html -> <li class="k-item" data-offset-index="1" unselectable="on" role="option" tabindex="-1">Pueblo</li>

и еще 2.

Мой код:

def _selectWorkArea(self, text): 
   self.ui.driver.find_element_by_xpath('//li[contains(text()=\'{}\')'.format(text)).click()

def selectName(self, name):
    self._selectWorkArea(name) 

1 Ответ

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

Почему бы не использовать что-то, что не генерируется случайным образом, например текст span?

Так что вы можете сделать что-то вроде:

self.ui.driver.find_element_by_xpath("//span[text()='Select Work Area...']")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...