Элемент XPath, который содержит атрибут и родитель родителя которого содержит другой атрибут
Вопрос
Это мой первый пост здесь и с тех пор, как я видел много великих ответов, я думал, что попробую.
Я пытаюсь использовать XPath для получения определенного элемента в документе HTML. Вот пример, основанный на выключении веб-страницы Google:
<html>
<head>
<title>XPath Test</title>
</head>
<body>
<form name='f'>
<table>
<tbody>
<tr>
<td>
<input name='q' type="text" />
</td>
</tr>
</tbody>
</table>
</form>
</body>
</html>
Используя пример выше (который упрощается для целей просьбы о помощи), я хотел бы иметь возможность найти входной элемент, имя которого = 'q' и у кого есть предком, который составляет 5 родителей с именем = 'f '.
Например, если я должен был сделать это в синтаксисе SWAT, который является библиотекой тестирования веб-автоматизации с открытым исходным кодом, расположенной в http://ulti-swat.wikispaces.com., Синтаксис будет следующим:
| AssertElementExists | Выражение | имя = q; parentelement.parentelement.parentelement.parentelement.parentelement.name = f | вход |
Я только начал изучать XPath и пытаться понять, как объединить предикаты с осями. Можно ли делать такие выражения с XPath? Если так, может кто-то знающий, пожалуйста, помогите?
Решение
Вы могли бы сделать:
//input[@name='q' and ancestor-or-self::*[@name='f']]
// -- input element whose name='q' and who has an ancestor with the name='f'
или
//input[@name='q' and ../../../../../../*[@name='f']]
// -- input element whose name='q' and who is 5 parents up with the name='f'
Вы можете использовать этот рабочий стол XPath Visualizer Чтобы проверить ваши выражения XPath. А. Базовое учебное пособие можно найти здесь.