Транспортир: Как найти родного брата данного элемента?
<div>
<a href='...'>LINK</a>
<img class='image' />
</div>
<div>
...
</div>
Я хочу получить транспортир для img
пометить с image
учебный класс. Я уже знаю текст ссылки "ССЫЛКА". Другими словами, "Как мне найти родного брата данного элемента?".
Первая строка кода может выглядеть так:
browser.findElement(by.linkText('LINK'))
Есть идеи?
Спасибо и Приветствия
2 ответа
Спасибо за вдохновение. Вот мое решение, не то, на которое я надеялся, но оно работает:
element(by.css('???')).element(by.xpath('..')).element(by.css('???')).click();
Цепочки и by.xpath, который позволяет вернуться к родителю, являются ключами решения.
Это то, что я на самом деле реализую на объекте страницы:
this.widgets['select-status'] = this.ids['select-status']
.element(by.xpath('following-sibling::div[1]'));
this.widgets['select-status.dropdown'] = element(by.css('.btn-group.bootstrap-select.open'));
Страница основана на Bootstrap вместе с Bootstrap Select. В любом случае, мы проходим DOM вдоль following-sibling
ось. Обратитесь к спецификации XPATH для себя.
Использование селекторов Xpath - не лучший выбор, так как замедляет механизм поиска элементов.
Я разработал плагин для решения этой конкретной проблемы: https://www.npmjs.com/package/protractor-css-booster
Плагин предоставляет несколько удобных локаторов для лучшего поиска братьев и сестер и, что наиболее важно, с помощью селектора CSS.
используя этот плагин, вы можете напрямую использовать:
var elem = await element(by.cssContainingText('a','link text')).nextSibling();
elem.click(); //proceed with your work
или используйте это как локатор
var elem = element(by.cssContainingText('a','link text')).element(by.followingSibling('img'));
Вы всегда можете проверить другие удобные методы, доступные здесь...
Теперь вы можете найти такие веб-элементы, как:
- Поиск главного родительского элемента
- Поиск родительского элемента
- Поиск следующего брата или сестры
- Поиск предыдущего брата или сестры
- Поиск любого следующего брата или сестры
- Поиск первого дочернего элемента
- Поиск последнего дочернего элемента
И, знаете что, все, что можно найти с помощью селекторов CSS
Надеюсь, это вам поможет...