Слишком длинный интервал между нажатиями

Я вытаскиваю массив чекбоксов в кол-ве 1340 элементов с сайта вот таким методом

ElementsCollection elements = $$(By.xpath("//table[@class='Table_table_540db80 HoldingStructure-module__enigma-tv__table--LKEQW']//input[@type = 'checkbox']"));

И затем мне нужно отметить 345 чекбоксов это я делаю так

        for (int i = 0; i <Integer.parseInt(testData); i++) {
            elements.get(i).scrollTo().click();
        }

Как итог нажатия происходят, но примерно с интервалом 3-4 секунды! Я думал может коллекия какая то медленная и пробовал и немного другие подходы. Запихивал в обычный лист. Не помогло. Пробовал forEach, не помогло

List<SelenideElement> elements = $$(By.xpath("//table[@class='Table_table_540db80 HoldingStructure-module__enigma-tv__table--LKEQW']//input[@type = 'checkbox']"));
elements.forEach(i->i.click());

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

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

а вообще зачем вы вообще изначально определяете коллекцию? ищите конкретный чекбокс и его активируйте (ну в плане можно найти кнопку по тексту и рядом с ней найти уже нужный чекбокс)

У меня есть кейс нажать 350 чек-боксов. Я же не буду объявлять 350 элементов, или искать их определенные имена. Для этого и нужна коллекция. И мой метод будет нажимать столько раз, сколько потребуется ручному тестировщику, который будет его запускать.
То есть вы утверждаете что дело в размере коллекции? Ну это странно, коллекцию то я вычитываю один раз. А дальше просто перебор идет, почему он должен быть долгим? Это ж не миллион элементов. Думаю есть какое то другое объяснение

Дело именно в размере.
При каждом вызове elements.get(i) Селенид пересчитывает заново коллекцию (а вдруг она изменилась?).

В вашем случае подойдёт метод $$.snapshot(): он как раз сделает “снимок” коллекции, и пересчитывать больше не будет.

P.S. А вообще кликать 350 чекбоксов - это дичь какая-то. Нормальный юзер ведь никогда в жизни этим заниматься не станет; зачем же автотестом это делать?

2 лайка

Спасибо, ждал тут именно вашего ответа. Я же правильно объявил коллекцию со snapshot()?

ElementsCollection elements = $$(By.xpath("//table[@class='Table_table_540db80 HoldingStructure-module__enigma-tv__table--LKEQW']//input[@type = 'checkbox']")).snapshot();

Если да, то скорость изменилась процентов на 30. Теперь нажимаются чекбоксы с интервалом 1-3 секунды. Ну значит этот кейс будет долго бежать))
По поводу “для чего эта дичь” - это больше является проверкой негативного сценария, которые тоже нужны. И нужно посмотреть как себя поведет система.
Спасибо за ответ. Спасибо что посещаете этот форум, значит можно смело захаживать сюда с вопросами по селениду :slight_smile:

Да, правильно.
Попробуй ещё включить TextReport, он покажет детальнее, какие шаги сколько времени занимают:
https://ru.selenide.org/documentation/reports.html

Я бы сказал, что совершенно незачем проверять такой “негативный” сценарий. Траты большие, пользы ноль. Проверять надо реалистичные негативные сценарии: когда юзер не смог заплатить, забыл пароль и т.д.

1 лайк