Я вытаскиваю массив чекбоксов в кол-ве 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 чекбоксов - это дичь какая-то. Нормальный юзер ведь никогда в жизни этим заниматься не станет; зачем же автотестом это делать?
Спасибо, ждал тут именно вашего ответа. Я же правильно объявил коллекцию со snapshot()?
ElementsCollection elements = $$(By.xpath("//table[@class='Table_table_540db80 HoldingStructure-module__enigma-tv__table--LKEQW']//input[@type = 'checkbox']")).snapshot();
Если да, то скорость изменилась процентов на 30. Теперь нажимаются чекбоксы с интервалом 1-3 секунды. Ну значит этот кейс будет долго бежать))
По поводу “для чего эта дичь” - это больше является проверкой негативного сценария, которые тоже нужны. И нужно посмотреть как себя поведет система.
Спасибо за ответ. Спасибо что посещаете этот форум, значит можно смело захаживать сюда с вопросами по селениду
Я бы сказал, что совершенно незачем проверять такой “негативный” сценарий. Траты большие, пользы ноль. Проверять надо реалистичные негативные сценарии: когда юзер не смог заплатить, забыл пароль и т.д.