Как обрабатывать динамические c xpath в селене (python) - PullRequest
0 голосов
/ 18 марта 2020

Я автоматизирую веб-сайт, у меня есть несколько цифр 6 di git (например, 111111, 222222, 333333)

Если я беру 111111 (внутри для l oop) и идентифицирую путь:

driver.find_element_by_xpath("//a[@class='button' and @title='Create Work Item Copy']").click()

в первый раз он может найти его и щелкнуть по нему, но когда l oop работает во второй раз и так далее (для 222222, 333333, ... n) Я получаю:

Сообщение: нет такого элемента: Невозможно найти элемент: {"method": "xpath", "selector": "// a [@ class = 'button' и @ title = 'Создать копию рабочего элемента'] "}

Приведенное выше сообщение об ошибке относится к кнопке, которую я хочу нажать, после проверки" Проверить элемент ",

Я обнаружил, что «id» меняется для каждой итерации, которую выполняет l oop.

<span class="jazz-ui-toolbar-Button" **id="jazz_ui_toolbar_Button_16"** widgetid="jazz_ui_toolbar_Button_16" style=""><a class="button" dojoattachpoint="titleNode,focusNode" href="#" dojoattachevent="onclick:_onClick,onkeypress:_onKeyPress" role="button" title="Create Work Item Copy" aria-disabled="false" tabindex="-1"><img src="/ccm/web/dojo/resources/blank.gif?etag=azf6UBC" class="button-img sprite-image-15" alt="Create Work Item Copy"><span class="button-label" dojoattachpoint="_label" style="display:none"></span></a>

, которую вы видите выше HTML, «id» "is id =" jazz_ui_toolbar_Button_16 "равен 16 для 1-й итерации для l oop, но для второй эта 16 станет некоторым случайным числом на 2-й итерации для l oop и так далее.

Следовательно, я получаю ошибку.

Я пытался использовать абсолютный xpath, ничего хорошего. Пожалуйста помоги.

Если вам нужна дополнительная информация, дайте мне знать.

1 Ответ

0 голосов
/ 18 марта 2020

Использование contains функция:

driver.find_element_by_xpath("//span[contains(@id, 'jazz_ui_toolbar_Button_')]").click()

* ОБНОВЛЕНИЕ

Если есть несколько элементов, вы можете использовать последовательность [number] в последнем xpath, как this:

driver.find_element_by_xpath("(//span[contains(@id, 'jazz_ui_toolbar_Button_')])[1]").click()

Или используйте .find_elements:

elements = driver.find_elements_by_xpath("//span[contains(@id, 'jazz_ui_toolbar_Button_')]")
#elements[index].click()
elements[0].click()

Вышеприведенное относится к первому элементу.

...