Ответ 1
Попробуйте это вместо:
element.all(by.css("ul.nav button")).first()
В основном, это говорит Транспортеру, что вы уже знаете там более одного элемента, и вам просто нужен первый (как вы сказали в своем вопросе).
В одном из моих тестов я обнаруживаю элемент с помощью CSS selector
:
element(by.css("ul.nav button"))
Существует несколько элементов, соответствующих запросу, но, поскольку мне нужен только первый, я в порядке с селектором.
Проблема заключается в том, что protractor
выдает предупреждение:
ПРЕДУПРЕЖДЕНИЕ - найдено более одного элемента для локатора By.cssSelector( "ul.nav button" ) - будет использован первый результат
Можно ли подавить предупреждение? Другими словами, как я могу позволить protractor
знать, что я знаю о проблеме и не хочу, чтобы предупреждение было показано больше?
Использование protractor
версии для разработки (устанавливается непосредственно из ведущей ветки).
Попробуйте это вместо:
element.all(by.css("ul.nav button")).first()
В основном, это говорит Транспортеру, что вы уже знаете там более одного элемента, и вам просто нужен первый (как вы сказали в своем вопросе).
Предупреждение существует по какой-то причине. Вы слишком тесно связали свои тесты с вашими данными. Селектор слишком общий, и вы должны быть более конкретным. Либо говоря element(by.css("ul.nav button:nth-child(1)"))
, либо просматривая ваш поиск по-другому. Протракторные тесты не должны тестировать стиль или дом, они должны тестировать бизнес-логику.
Меньше кода:
$$("ul.nav button").first()