Python Selenium XPATH с несколькими тегами
13 просмотра
2 ответа
У меня есть автоматический скрипт Python для проверки любых изменений в DOM. У меня есть xpath, который работает:
//td[@class='high-bg']/a[@class='link-action'][@data-hintbox='1'][@data-hintbox-static='1'][@role='button'][@href='javascript:void(0)']
Но это дает мне больше результатов, чем мне нужно, и некоторые из них вызывают ошибки. Итак, я хочу получить абстрактные элементы, которые мне нужны, из xpath, поэтому я пытаюсь использовать что-то вроде этого:
//table[@id't5c711109b1eea263276674']/tbody[]/tr[]/td[@class='warning-bg']/a[@class='link-action'][@data-hintbox='1'][@data-hintbox-static='1'][@role='button'][@href='javascript:void(0)']
Но это не работает, так можно ли даже искать xpath с таким количеством тегов?
<table id="example">
<tbody>
<tr>
<td class="average-bg">
<a class="link-action" data-hintbox="1" data-hintbox-static="1" role="button" href="javascript:void(0)">1</a>
</td>
</tr>
</tbody>
</table>
Автор: Montė Čiuklys
Источник
Размещён: 17.05.2019 03:00
Ответы (2)
0 плюса
Вот.
XML
<root>
<e1 role='a' class='y'></e1>
<e1 role='a' class='t'></e1>
<e1 role='a' class='z'></e1>
</root>
XAPTH
//e1[@role='a' and @class='t']
Выход
Element='<e1 class="t" role="a"/>'
Автор: balderman
Размещён: 23.02.2019 09:53
0 плюса
О ваших испытаниях кода:
В первой попытке вы попытались использовать все атрибуты элемента для создания xpath :
//td[@class='high-bg']/a[@class='link-action'][@data-hintbox='1'][@data-hintbox-static='1'][@role='button'][@href='javascript:void(0)']
Элементы с похожими атрибутами могут присутствовать, но в другом положении / местоположении. Следовательно, он возвращает больше желаемых результатов, которые вам нужны.
Во второй попытке вы создали абсолютный xpath, который является хрупким :
//table[@id't5c711109b1eea263276674']/tbody[]/tr[]/td[@class='warning-bg']/a[@class='link-action'][@data-hintbox='1'][@data-hintbox-static='1'][@role='button'][@href='javascript:void(0)']
Решение
Согласно предоставленному вами текстовому HTML, для идентификации нужного элемента вы можете использовать одно из следующих решений:
xpath
:driver.find_element_by_xpath("//table[@id='example']//td[@class='average-bg']/a[@class='link-action' and text()='1']")
css_selector
:driver.find_element_by_css_selector("table#example td.average-bg>a.link-action")
Вопросы из категории :
- python Обработка XML в Python
- python Как я могу использовать Python itertools.groupby ()?
- python Python: На какой ОС я работаю?
- python Как я могу создать непосредственно исполняемое кроссплатформенное приложение с графическим интерфейсом на Python?
- selenium Есть ли способ одновременно запускать тесты Bamboo?
- selenium Selenium xpath flow
- selenium Доступ к диалоговому окну загрузки файлов в Firefox
- selenium Как отключить Javascript при использовании Selenium?
- xpath Какой правильный XPath для выбора атрибутов, которые содержат «foo»?
- xpath Создать XML-узлы на основе XPath?
- xpath XPath выберите узел с пространством имен
- xpath Использование Xpath с пространством имен по умолчанию в C #
- webdriver Как проверить, является ли элемент видимым с помощью WebDriver
- webdriver Лучший способ сделать скриншоты тестов в Selenium 2?
- webdriver Как Webdriver / Selenium «общается» с вашим локальным веб-браузером?
- webdriver Как выбрать опцию из выпадающего списка, используя Selenium WebDriver C #?
- xpath-1.0 Проверьте тип узла в шаблоне XSL
- xpath-1.0 Как использовать начальный-с (), содержит () и заканчивается-в () в XPath, чтобы найти внутренний текст XML-узла? в XPATH 1.0
- xpath-1.0 XPath 1.0: используйте значение атрибута родителя текущего узла, чтобы найти другой соответствующий узел
- xpath-1.0 Могу ли я рефакторинг, чтобы избежать "self ::" и "parent ::"?