Прерванный клик в Selenide - PullRequest
0 голосов
/ 25 июня 2019

Я пишу некоторый код автоматизации в Selenide для практики.

У меня следующая проблема: я не знаю, что происходит, но иногда по методу clickFillExpertsApplication Selenide нажимает на локализованную кнопку, начинается загрузка новой страницы, но через 1 секунду загрузка новой страницы прекращается, страница останавливается при просмотре с элементом, который я хотел щелкнуть, и программа выдает мне исключение (элемент из следующего шага (на следующей странице) не найден).У вас есть опыт работы с «прекращенными» кликами?

Я пытался избежать этого, добавляя функцию второго клика в функцию, но, вероятно, это не идеальное решение, которое иногда дает сбой

    fillExpertsApplication.shouldBe(enabled).click();
    Thread.sleep(100);
    if (fillExpertsApplication.isDisplayed()){
       log.info("retry fill experts click");
       fillExpertsApplication.click();
    }

Может бытьпроблема в моем проекте, возможно я написал что-то глупое там, я не знаю

1 Ответ

0 голосов
/ 09 июля 2019

Чтобы понять корень проблемы, мне нужно больше информации. Но, изучая ваш код, я понимаю, что причиной сбоя может быть написание кода:

Никогда не используйте Thread.sleep () и оператор if с isDisplayed (). Причина: Thread.sleep () - всегда заставляет ваше приложение ждать n раз, что абсолютно бесполезно при использовании Selenide. Если вы хотите дождаться, чтобы что-то произошло, используйте функцию Condition, предоставленную Selenide, например: $ ("some_css_selector"). ShouldBe (Condition.visible). Это гарантирует, что что-то должно быть видимым, и ожидает n времени, настроенного в ваших тайм-аутах.

Если оператор - проблема с этим: обычно ваш браузер и элементы не загружаются в этом операторе, и вы не можете управлять им с помощью Thread.sleep, потому что если что-то загружается больше, чем ваш сон, тест пропустит ваш оператор if как это не будет видно в то время, когда он был там. Решение аналогично описанному в предыдущем разделе: использовать условия селенида $ (byText ("Submit")). shouldBe (Condition.visible); Это будет ждать, пока текст (например, кнопка отправки текста) будет виден, и будет ждать его, пока не истечет время ожидания.

...