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