Доступ к элементу без атрибутов в Watir - PullRequest
6 голосов
/ 30 ноября 2011

Используя Watir, есть ли способ получить доступ к элементу без атрибутов?

Например:

<span>Text</span>

Я бы хотел избежать использования xpath, но если это единственный способэто круто.

Ответы [ 3 ]

11 голосов
/ 30 ноября 2011

Не обращая внимания на проблемы, связанные с WATIR, связанные с наличием тегов или запросом уникальных атрибутов у ваших разработчиков (или у вас самих), вы всегда можете получить доступ к элементу через его родительские элементы или по индексу.

Например: Текст

@browser.div(:name => "content").span(:index => 1)
#this is the first span element inside this div

Вы можете работать с любым количеством уникальных элементов, необходимых для достижения дочернего элемента span, без использования Xpath.Конечно, вам нужен только один уникальный родительский элемент для достижения этого конкретного дочернего элемента, и вы переходите от него к дочернему.

div(:how => what).table(:how => what).td(:how => what).span(:how => what).text

Другой пример, предполагая, что это nth span на странице: @ browser.span (: index => n )

Подход по индексу очень хрупок и склонен к разрыву при любом обновлении страницы, однако.

9 голосов
/ 01 декабря 2011

Если у него есть текст:

browser.span(:text => "Text")

Если вы знаете только часть текста, вы можете использовать регулярное выражение:

browser.span(:text => /Text/)
8 голосов
/ 01 декабря 2011

Существует три основных способа решения этой конкретной проблемы. Желько обратился к первому, который основан на , что внутри элемента , такого как известный текст. Адам обращается к наиболее распространенному способу: , что заключает или содержит элемент Я обращусь к третьему пути, который , что заключено в или рядом с элементом .

Если у вас есть известный элемент, который находится внутри того, который вы хотите, тогда вы можете начать с него и использовать метод .parent, чтобы получить элемент 'container'. Это также может быть использовано для поиска элемента «родственного элемента» с помощью .parent для перехода к нужному элементу через общий контейнер, такой как строка таблицы. Первое использование довольно очевидно, но второе, вероятно, более распространено и очень полезно при работе с таблицами.

Например, скажем, у вас есть таблица с несколькими строками данных, где один столбец является уникальным номером детали, а другой столбец имеет ссылки «добавить в корзину». Теперь, если вы хотите добавить определенную деталь в корзину, вы можете использовать индекс вместе с текстом «добавить в корзину», используя такой код, основанный на 5-й ссылке с этим конкретным текстом

browser.link(:text => 'add to cart', :index => 4).click

Но это хрупко, потому что как только результаты изменяются (что может часто случаться с живыми данными), ваша часть больше не будет 5-й в этой таблице, и ваш тест будет прерван. Вам понадобится подтверждение, что вы нашли правильную часть, а не что-то еще в этом ряду. Тем не менее, в Watir вы можете сделать что-то вроде этого:

browser.cell(:text => 'Part no. 123-45').parent.link(:text => 'add to cart').click

В случае ячейки таблицы, родительский элемент ячейки обычно будет строкой таблицы, и, таким образом, на простом английском языке это переводится как «найти ячейку с« деталью без 123-45 »в ней, а затем в этом В этой же строке найдите и нажмите на ссылку «Добавить в корзину». (хотя я предполагаю, что вы поняли это, просто прочитав код.)

Вы можете использовать это, чтобы получить любого «родного брата» или даже самого «родителя», где есть некоторый уникальный элемент рядом или внутри объекта, с которым вам нужно взаимодействовать.

Вероятно, вы можете сделать что-то похожее с Xpath, но удачи не имеют смысла, когда вы читаете код пять недель спустя. Это одна из причин, по которой я предпочитаю Watir и Watir-Webdriver против Selenium.

...