Size: a a a

2019 November 12

AP

Alexander Popov in JS for testing
Ну это более кастомный кейс, я вот такого не видел никогда) и сейчас трудно представить кейс
источник

AP

Alexander Popov in JS for testing
Ленивость можно убрать да, если надо... Но это очень опасно
источник

AB

Alexei Barantsev in JS for testing
а почему опасно?
источник

AP

Alexander Popov in JS for testing
Она позволяет переискивать всю цепочку элементов для проверки, а если мы будем строго опираться на существующий элемент то здравствуйте стейл референс опять
источник

AB

Alexei Barantsev in JS for testing
нет, подождите, "переискивать" и "ленивость" это разные фичи
источник

AB

Alexei Barantsev in JS for testing
ленивость может быть и без переискивания
источник

AB

Alexei Barantsev in JS for testing
просто поиск откладывается до момента совершения действия. при этом вполне может возникнуть stale element reference exception всё равно, просто вероятность снижается, так как между поиском и действием промежуток времени минимизируется
источник

AP

Alexander Popov in JS for testing
Ну это связано... Когда они ленивые при действии один или больше елементов ищутся, потому что раньше не искались никем... А когда есть уже веб елемент, мы можем упасть не на поиске, а на стейл этого элемента
источник

AB

Alexei Barantsev in JS for testing
и наоборот, переискивание может быть без ленивости, у меня есть такой жадный переискивающий инструмент
источник

AP

Alexander Popov in JS for testing
Alexei Barantsev
просто поиск откладывается до момента совершения действия. при этом вполне может возникнуть stale element reference exception всё равно, просто вероятность снижается, так как между поиском и действием промежуток времени минимизируется
Ну стейл сильно вряд-ли возникает, так как вся цепочка переискивается до отсутствия проблем на каждом звене
источник

AP

Alexander Popov in JS for testing
Я в целом не сильно понимаю зачем вообще что то искать, если юзер чаще хочет кликать или ассертить
источник

AB

Alexei Barantsev in JS for testing
ещё раз: "переискивание" и "ленивость" не связаны, они могут быть реализованы отдельно
источник

AP

Alexander Popov in JS for testing
Могут, но переискивание в ленивости безопаснее :))
источник

AB

Alexei Barantsev in JS for testing
если есть переискивание — ленивость уже не добавляет безопасности
источник

AB

Alexei Barantsev in JS for testing
но я согласен, что сочетание этих фич достаточно удобно для конечного пользователя
источник

AP

Alexander Popov in JS for testing
Alexei Barantsev
если есть переискивание — ленивость уже не добавляет безопасности
В ленивом переискивании почти невозможен стейл, зато часто вылетают ошибки "не нашёл то и сё", а если переискивать от конкретного элемента когда он протухнет всему капец и юзеру стейл, что не так понятно как not found (как по мне)
источник

AB

Alexei Barantsev in JS for testing
переискивание может быть вверх по цепочке и без ленивости (протух элемент, в котором надо искать — сначала переискиваем его, а потом ищем в нем)
источник

AB

Alexei Barantsev in JS for testing
у меня есть ровно такая обёртка над ванильным селениумом (на Java), которая не ленивая, но полностью избавляет от stale element reference exception
источник

VG

Vitalii Grygoruk in JS for testing
Саша, Алексей совершенно прав, переискивание и ленивость это совсем разные вещи.
Переискивание помогает тебе иметь стабильные тесты, а ленивые элементы только снижают риск того что нужно будет переискивать цепочку и позволяют писать код так как тебе нравится, а не как форсит тебя wdio сейчас (или просто линейно писать в тесте или только в методах или геттерах пейдж обжекта).

Кстати, wdio умеет переискивать цепочку элементов если элемент уже Stale
источник

VG

Vitalii Grygoruk in JS for testing
и вот этот вот стыд c кастомными мачерами для чая

expect(() => { $(‘foo’) }).to.have.text(“foo”)

было бы лениво - можно было бы писать вот так
expect($(‘foo’)).to.have.text(“foo”)
источник