Элемент XPath, который содержит атрибут и родительский объект которого содержит другой атрибут - PullRequest
6 голосов
/ 02 февраля 2010

Это мой первый пост здесь, и так как я видел много отличных ответов, я решил попробовать.

Я пытаюсь использовать 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>

Используя приведенный выше пример (который упрощен в целях обращения за помощью), я хотел бы найти элемент ввода,name = 'q' и у которого есть предок, у которого 5 родителей с именем = 'f'.

Например, если бы я делал это в синтаксисе SWAT, который является веб-автоматизацией с открытым исходным кодомВ библиотеке тестирования, расположенной по адресу http://ulti -swat.wikispaces.com , синтаксис будет следующим:

| AssertElementExists | Выражение | name = q; parentElement.parentElement.parentElement.parentElement.parentElement.name = f | input |

Я только начал изучать XPath и пытаюсь понять, как объединять предикаты с осями.Можно ли сделать такие выражения с XPath?Если да, может кто-нибудь знающий, пожалуйста, помогите?

1 Ответ

13 голосов
/ 02 февраля 2010

Вы могли бы сделать:

//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 для проверки выражений XPath. базовый учебник можно найти здесь .

...