Доступ к элементу без атрибутов в Watir

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

например:

<span>Text</span>

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

3 ответов


игнорируя не-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 на странице: @броузер.span (: index => n)

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


если он имеет текст:

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

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

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

есть в основном три способа решения этой конкретной проблемы. Zeljko обратился к первому, который основан на что это внутри элемент например, известный текст. Адам обращается к наиболее распространенному способу,что это вшита или содержащие менее!--6--> элемент я обращусь к третьему способу, который что это заключен на или возле элемент.

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

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

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

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

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

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

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

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