Успешное прохождение шага с click, но фактически не кликает

Периодически падают тесты из за того, что шаг с кликом на менюшку проходит успешно, а фактически клик не совершается. Локаторы максимально стабильные и уникальные.
DropMeFiles – free one-click file sharing service в первый раз тест проходит, как ожидается, во второй прогон спотыкается.
Происходит это довольно часто, из 35 тестов за один прогон может упасть до 10 шт. (но, бывает, всё отрабатывает без ошибок). Пайплайны всегда красные, команда ругается, ценности от тестов 0.
При мануальных проверках такого поведения ни разу поймать не удалось.

Пытался увеличивать время ожидания, добавлять .shoudBe(visible). Стабильность уменьшается или не изменяется.

Самый простой пример кода
@Test
@DisplayName(“CompetencesList”)
void shouldDisplayCompetencesList() {
loginManager.masterRole();
$(“[data-test="nav-left-item-settings"]”).click();
$(“[data-test="nav-left-item-competences"]”).click();
$(“[data-test="breadcrumbs"]”).shouldHave(text(“Компетенции”));
$(“[data-test="table"]”).shouldBe(visible);
}

падает на $(“[data-test="breadcrumbs"]”).shouldHave(text(“Компетенции”));, потому что фактически может находиться НЕ в разделе Компетенции, хотя этот этап (шаг 2) проходит успешно.

Ошибка всегда однотипная Element not found {…}
Expected: visible

Windows 10, linux
IntelliJ IDEA, Java 11, selenide:6.7.4

а в дебаге как оно работает? если каждый шаг с дилэем делать, будет падать или нет? ну и проверки на видимость наверно недостаточно, надо clickable ждать

1 лайк

на что смотреть при дебаггинге? я могу один выбранный тест подряд прогнать 10 раз и он ни разу не упадёт, а может и подряд 3-4 раза завалиться. боюсь, не отловлю ничего путного
добавление дилеев мне не нравится, общее время выполнения и так больше 5 минут, если для каждого клика добавить хотябы по секунде, боюсь получится непозволительно долго

  1. Поменяйте на clickable, как @madvlaydin посоветовал.
  2. Добавьте retry на ту операцию, где падает.
    Что-то типа
    if ([data-test=“breadcrumbs”].text != “Компетенции”)
    $("[data-test=“nav-left-item-competences”]").click();
    Ну и главное - разберитесь, почему падает именно там. Чем предыдущая кнопка (nav-left-item-competences) отличается от других? Может, форма дольше отрисовывается или кнопка может иметь состояние не enabled (кстати, click по такой кнопке возможен, действие выполнено не будет, но ошибки тоже не будет) или ещё что-нить. Дерзайте :slight_smile:
1 лайк

да, можно в лог записать outerHTML до нажатия и после нажатия и посмотреть, чем оно отличается в зелёном тесте и красном, мейби там реально надо дождаться какого-то атрибута

А у тебя меню Настройки, скрывается и остается в том же state или каждый раз возвращается на свернуто? (развернуто/свернуто т.е. видно дочерние элементы или нет)
$("[data-test=“nav-left-item-settings”]").click(); вот про этот шаг

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

давайте по существу
если у вас периодически не срабатывает клик, и это воспроизводится руками - это дефект, надо смотреть что происходит в консоли бразуера, мейби там ошибка

если же это не воспроизводится, то спросите у фронтедеров, что должно случиться с js-ным кодом или DOM-деревом, чтобы клик срабатывал, мейби код автотестов молотит быстрее, чем браузер успевает отрисовать правильно менюшку

скорее всего, проблема была не в клике. в большинстве случаев тест таки кликал.
захардкодил слип в 1 секунду после 2 шага, тесты стали проходить почти без падений. видимо, система не успевала отрисовывать что то.
Падения очень сильно снизились, на оставшиеся нестабильные тесты вместо аннотации @Test добавил
@RepeatedIfExceptionsTest(repeats = 3), которая делает ретрай всего теста и считает тест пройденным, если хотябы 1 из 3 прогонов прошёл успешно (не активируется, если первый прогон был успешен).