public void orderFrom(String name) {
System.out.println(offers.get(0).getText()); //Без этого куска луп не работает
for (SelenideElement x : offers) {
if (x.getText().equals(name)) {
x.find(withText("Заказать")).click();
break;
}
}
}
Если я перед объявлением лупа вызываю sout с такими данными -> offers.get(0).getText(), то я прохожу условие но программа крашится на кнопке “Заказать” (Element Not Found), как только убираю sout, ерроров не происходит, программа отрабатывает без ошибок (не проходит условие)
Проблема определенно в лупе, потому как при объявлении того же (что и выше) sout’а непосредственно в лупе - луп игнорируется и консоль пуста.
Собственно проблема то уже решена, я просто не могу понять почему без этого куска -> offers.get(0).getText());
Код не работает, но есть подозрение что дело в инициализации списка элементов
Всё просто. Оба селенидовских метода - и $, и $$ - реализованы через т.н. “ленивую загрузку”. Т.е. они не ломятся сразу загружать элементы, а только при обращении к методам. Изначально идея была в том, что вы должны вызывать только методы $$.should*() или $$.find(), потому что это единственные правильные методы в тестах. Вот эти методы и вызовут загрузку элементов. А всякие там $$.size() и тем более итераторы - это больше для отладки.