Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Как получить идентификаторы чекбоксов в форме и затем использовать их?


(Рома Маринский) #1

Как получить идентификаторы чек боксов из определённой формы и затем использовать их?

Есть форма с производителями, отсортированная по алфавиту, с
айдишниками циферным - я их все знаю. Но адишка производителя с
производителем 10, может быть в конце этого списка. Если листать до
конца уйдёт слишком много времени. Мне нужно кликнуть на некоторое
количество чекбоксов производителей находящихся в начале этого списка.
Т.е. пролиснуть раз 20 и выбрать из тех айдишек которые прогрузились в
форме после пролистывания.

Для этого нужно определить какие чекбоксы прогрузились в форме и клинуть на некоторые из них

Сама суть того что я делаю, это создание уникальных рекламных
кампаний с помощью имеющейся системы. Не тестирование “создаётся
кампания или нет” - уже проверено.
Просто создать уникальные рекламные кампании


(Stan) #2

правильно ли я понимаю, что элементов нет в дом-е пока ты до них не доскролишь?


(Рома Маринский) #4

Да так и есть


(Stan) #5

Ну, так у вас и не получится манипулировать тем, чего нет. А какой тест кейс?
Если просто узнать айдишники - то, пока клиент о них не узнает, то и селениум ничего не сможет узнать. Скролл делает серверные запросы и получает ответы? Если так и вы не хотите скролить по-настоящему (то бишь и совершать все эти запросы), то надо имплементировать некий серверный api, через который и получать что-то из базы или с нужного вам сервиса.


(Eugene Tkachenko) #6

Ну если вы знаете idшники, я бы написал что-то типа этого(пишу на примере Руби+Page-object):

check_boxes(:checkboxes,:id=>/manufacturer_.*/)
check_checkboxes_elements[0]

У вас на руках будет набор чекбоксов, с которыми вы можете делать что угодно определяя какой вам нужен чекбокс по индексу.
Что касается скролла, если вы не доскролите до этих чекбоксов, тем самым не выполните кондишен их визабилити, то вы с ними ничего не сделаете. Доскролить вы можете множеством способов одним из вариантов, сделать кондишен, когда действие скролла закончится, тобишь скролить пока какой-то элемент не будет виден, что-то типа:

driver.send_keys(:page_down) unless checkboxes_elements[0].visible?

(Рома Маринский) #7

Это не совсем тест. Мне нужно создать рандомные рекламные кампании с помощью нашего сервиса, для тестирования поиска по таргетам и прочим установленным значениям на страницах (4 штуки) создания рекламной кампании с группами объявлений.
Проблемный участок сейчас, это подгружаемый список элементов, 2-ух видов: с id чекбокса manufacturer_12, у производителя только цифра меняется, это хорошо - но всё равно мне нужно знать какие чекбоксы подгрузились после скролинга формы. IDшники у них не по убыванию отсортированы на фронтенде

И есть определённые девайсы типа: id каждого sony_xperia_z2, samsung_galaxy_i9000 и прочие их 10000 примерно в базе. И мне нужно знать какие чекбоксы доступны для клика


(Рома Маринский) #8

Спасибо конечно. Но я на подобии этого уже делал, скролил много раз эту форму и кликал на доступные. Но суть в том что этот скролинг может занимать около 15 минут по времени. И то может не до конца списка дойти после этим 15 минут, производителей в базе много. Мне для тестирования поиска этого все чуда достаточно добавить 20 производителей из начала списка: доспустим 20 раз пролиснуть форму и выбрать из имеющихся чекбоксов в форме, рандомных производителей. Этого для тестирования поиска будет достаточно.

В ручную узнать какие есть чекбоксы производителей после 20 селениумных скролингов - не вариант :slight_smile: Их около 100 будет, определить все, инициализировать все и сделать выборку 20-ти - не целесобразно


(Eugene Tkachenko) #9

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


(Рома Маринский) #10

Есть форма с производителями, отсортированная по алфавиту, с айдишниками циферным - я их все знаю. Но адишка производителя с производителем 10, может быть в конце этого списка. Если листать до конца уйдёт слишком много времени. Мне нужно кликнуть на некоторое количество чекбоксов производителей находящихся в начале этого списка. Т.е. пролиснуть раз 20 и выбрать из тех айдишек которые прогрузились в форме после пролистывания.

Для этого нужно определить какие чекбоксы прогрузились в форме и клинуть на некоторые из них

Извиняюсь, что не ясно вам изложил свою мысль

Сама суть того что я делаю, это создание уникальных рекламных кампаний с помощью имеющейся системы. Не тестирование “создаётся кампания или нет” - уже проверено.
Просто создать уникальные рекламные кампании


(Рома Маринский) #11

Так листаю:

driver.findElement(By.xpath(idOfElement)).sendKeys(Keys.ARROW_DOWN);

Так проверяю наличие

try {
            driver.findElements(by);
            return true;
        } catch (Exception e) {
            return false;
        }

if (isElementPresent(By.id(idElement))) {...}

(Рома Маринский) #12

Может проверка на наличие или скролинг плохой. Предложите пожалуйста


(Stan) #13

Ну примерно также бы наверно и реализовал.

#сколько элементов надо чекнуть или любое другое условие остановки
while(idx != 20) {
   if (isElementPresent(By.id(idElement))) {
      tickCheckBox(...);
      idx++;
   }
   scroll();
}

(Павел Смолкин) #14

Перечитал еще раз, но вся равно не очень понятно, как вы хотите найти то, чего нет? Скорллить-то в любом случае придется.
Или вопрос в чем-то другом?


(Андрей Бахтиозин) #15

Зная id-шник, ты наверняка можешь где-то с базы дернуть и текст этого айдишника.

  1. попробуй рандом по всем айдишникам
  2. рандом выбрал какой-то айдишник
  3. залез в базу с этим айдишником, узнал его текстовое значение(текстовое значение чекбокса)
  4. забрал значение с базы, набил в фильтр полное название этого значения
  5. фильтр отдаст пул чекбоксов, первый из них 100% должен будет быть тот который тебе нужен, жмешь его
  6. повторяешь в цикле 20 раз.

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


(Eugene Tkachenko) #16

Плюсану, сделали бы какой-то веб-сервис, который бы выплевывал json и все дела. Тогда дело уже за малым.


(Stan) #17

Скорее вопрос в том как это сделать со скроллом наиболее эффективно.


(Рома Маринский) #18

Спасибо, вопрос решён)


(Sergey Korol) #19

Как решали то напишите.


(Stan) #20

Напиши как и чем решилось?


(Рома Маринский) #21

Пардон )

Удалил из базы данных лишних производителей осталось из 1000 около 600
Разработчики ускорили выгрузку производителей в форме
Поиск нужного элемента в форме, скролинг, и максимальное время поиска самого последнего элемента занимает не более 1 минуты