Size: a a a

Selenide на русском

2020 September 14

YM

Yevgeniy Mikhailov in Selenide на русском
Artur Mkrtychian
Подскажите, как решить следующую проблему.

1) Тест нажимает на кнопку
2) Появляется лоадер
3) Лоадер пропадает
4) Тест берет значение элемента.

Код примерно такой:
$("div.main").click
$("div.spinner-container").shouldBe(not(visible));
String elText = $("div.data").getText();

Периодически возникает проблема:
Element should be not visible {div.spinner-container}
Element: 'Ups, failed to described the element [caused by: StaleElementReferenceException: stale element reference: element is not attached to the page document]'
Actual value: StaleElementReferenceException: stale element refe
А дождаться появления лоадера и далее дождаться, что пропадет не вариант?
источник

AM

Artur Mkrtychian in Selenide на русском
Yevgeniy Mikhailov
А дождаться появления лоадера и далее дождаться, что пропадет не вариант?
$("div.spinner-container").shouldBe(appear);
   $("div.spinner-container").shouldBe(disappear);

с таким кодом результат такой же
источник

SR

Stas Rusakov in Selenide на русском
Yevgeniy Mikhailov
Не звучит стабильно, если честно. Элемент, из которого должны брать значение, уже может быть, и тогда будет взято не то, что надо, разве нет? Но это  зависит от приложения
Согласен)
Совсем правильно было бы не брать текст из элемента)
А сделать
$("div.main").click
$("div.data").shouldHave(text("Текст который ожидаем увидеть"));
источник

AM

Artur Mkrtychian in Selenide на русском
Stas Rusakov
Селенид и придуман для таких проблем)
Код должен быть просто

$("div.main").click
String elText = $("div.data").shouldBe(visible).getText();

Если лоадер долгий можно влепить дополнительное ожидание

$("div.main").click
String elText = $("div.data").shouldBe(visible, 10_000 ).getText();//максимум подождет 10 секунд, но если элемент станет видимым раньше - сразу побежим дальше
так элемент $("div.data") доступен еще до нажатия на кнопку, просто по нажатию на кнопку должен обновиться текст элемента
источник

SR

Stas Rusakov in Selenide на русском
Сообщением выше описал)
источник

AS

Andrei Solntsev in Selenide на русском
Artur Mkrtychian
так элемент $("div.data") доступен еще до нажатия на кнопку, просто по нажатию на кнопку должен обновиться текст элемента
Ну да, тогда надо ждать нового текста. Пофиг лоадер.
источник

YM

Yevgeniy Mikhailov in Selenide на русском
Вероятно, дело в условии. Судя по ошибке, оно ругается, что спиннера нет в доме, тогда мб стоит проверять существует ли он или нет?
источник

SR

Stas Rusakov in Selenide на русском
Работать с вебом - это как работать с промисами или WebFlux)
Нужно иметь ввиду что вещи не происходят синхронно с вашими действиями)
Ваша изначальная ошибка возникает по той же причине - лоадер меняется, иногда вы его успеваете поймать в нужном вам статусе иногда он уже исчез)
Селенид позволяет победить все это с помощью своих should
Когда вы начинается делать getText и всякие if - вы "тереяте поток"
источник

AS

Andrei Solntsev in Selenide на русском
По-моему, эта ошибка говорит о том, что
1. Тест ждал (допустим, 4 секунды), пока лоадер пропадёт. Но лоадер не пропал.
2. Спустя 4 секунды селенид решил, что пора бы завалить тест, и начал составлять сообщение об ошибке.
3. А вот тут как раз лоадер и пропал.
источник

AS

Andrei Solntsev in Selenide на русском
Помогает тупо увеличение таймаута.
источник

AM

Artur Mkrtychian in Selenide на русском
Спасибо!
источник

SA

Situation Act in Selenide на русском
Приветствую
Подскажите, есть ли готовое решение у Селенида, чтобы вытаскивать Куку?
источник

SA

Situation Act in Selenide на русском
Вплане из текущей сессии
источник

DZ

Dmitry Zemlyanitsyn in Selenide на русском
WebDriverRunner.getWebDriver().manage().getCookies();
источник

SA

Situation Act in Selenide на русском
Dmitry Zemlyanitsyn
WebDriverRunner.getWebDriver().manage().getCookies();
Спасибище.
Слушай, а может есть статья с доходчивым объяснением работы старта драйвера, начиная от запуска менеджера и заканчивая как к нему обращается селенид, тем более в селениде вроде два вида инициализации драйвера, короче говоря, думаю, что, боле -менее, ясно задал вопрос.
источник

A

Anton in Selenide на русском
Situation Act
Спасибище.
Слушай, а может есть статья с доходчивым объяснением работы старта драйвера, начиная от запуска менеджера и заканчивая как к нему обращается селенид, тем более в селениде вроде два вида инициализации драйвера, короче говоря, думаю, что, боле -менее, ясно задал вопрос.
есть такая штука, открытый исходный код =)
источник

SA

Situation Act in Selenide на русском
Anton
есть такая штука, открытый исходный код =)
Да я летал через Ctrl + B ,  но там что то прям очень запутано, еще скилл не позволяет до такого прям дойти
источник

SA

Situation Act in Selenide на русском
Кстати, недавно, узнал, что именно для этого собесят алгоритмы на листочке в Яндексе, чтоб исходники ребята могли читать спокойно, без лишних проблем. Хотя... может просто пойти по принципу РТФТ 😅
источник

S1

Sceptic 1234 in Selenide на русском
не думаю, что знание алгоритмов сильно поможет читать чужой код.
а вот сделать задачу оптимальным путём, а не, например, городить велосипед из циклов и ветвлений - поможет.
источник

AK

Andrey K in Selenide на русском
интересно каким образом умение решать алгоритмы на бумажке поможет в чтении исходников?
источник