Size: a a a

QA — Автоматизация

2020 February 03

АА

Андрей Алексеевич in QA — Автоматизация
Aleksandr Shipovalov
Брать массив этих элементов и добавлять из него по индексам
👍 А массив уже есть в find_elements )
источник

R(

Roman (rpwheeler) in QA — Автоматизация
Konstantin L
Привет. Подскажите, пожалуйста, как сделать (Selenium only):
Есть список товаров отображаются плиткой (вариант отображения менять нельзя), всего их 14, отображаются по 3 в ряд,  2 ряда в окне, чтобы отобразить остальные нужно скроллить страницу. Мне нужно каждый товар добавить в корзину. Как поступить?) Я пробую через find_elements искать часть товаров и добавлять их, потом скроллить страницу -  искать и добавлять следующие товары и т.д. Но во-первых не очень получается (хотя с этим я разберусь), а во-вторых это не круто (и что делать, если кол-во товаров изменится?). Есть решение получше?
Во первых строках я хочу сказать что это какой-то странный тест (14 элементов, добавить в корзину ВСЕ).

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

Можно собрать список элементов на экране до "маленького" скроллинга. Поскролить, проверить список элементов который сейчас на экране.

Тут возможны варианты.

1) Список не изменился вообще.
2) Список изменился частично.
3) Список изменился полностью.

Покопавшись, можно организовать добавление только новых элементов (запоминать уже добавленные, добавлять недобавленные).

Если за N скроллов ничего не меняется, значит мы доехали до конца, завершаем операцию.
источник

KL

Konstantin L in QA — Автоматизация
Aleksandr Shipovalov
Брать массив этих элементов и добавлять из него по индексам
ок. Массив получаем методом find_elements? Тогда как получить часть после скролла просто добавить их в список?
источник

KL

Konstantin L in QA — Автоматизация
Roman (rpwheeler)
Во первых строках я хочу сказать что это какой-то странный тест (14 элементов, добавить в корзину ВСЕ).

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

Можно собрать список элементов на экране до "маленького" скроллинга. Поскролить, проверить список элементов который сейчас на экране.

Тут возможны варианты.

1) Список не изменился вообще.
2) Список изменился частично.
3) Список изменился полностью.

Покопавшись, можно организовать добавление только новых элементов (запоминать уже добавленные, добавлять недобавленные).

Если за N скроллов ничего не меняется, значит мы доехали до конца, завершаем операцию.
Так я решил сделать проверку цен) Добавляем все товары в корзину -> в корзине берем сумму итого и сравниваем с эталонной суммой, если они равны - всё огонь) иначе - у товара/товаров не верная цена. По решению подумаю (пока не понял, но постараюсь разобраться). Спасибо
источник

АА

Андрей Алексеевич in QA — Автоматизация
1. Скролл
2. Получение всего массива.
источник

A

Alex in QA — Автоматизация
Konstantin L
Так я решил сделать проверку цен) Добавляем все товары в корзину -> в корзине берем сумму итого и сравниваем с эталонной суммой, если они равны - всё огонь) иначе - у товара/товаров не верная цена. По решению подумаю (пока не понял, но постараюсь разобраться). Спасибо
а почему бі просто не сравнить цены?
источник

KL

Konstantin L in QA — Автоматизация
Alex
а почему бі просто не сравнить цены?
по одной? геморно как-то.
источник

A

Alex in QA — Автоматизация
Konstantin L
по одной? геморно как-то.
вытяни все цены и сравни со списком ожидаемых
источник

VK

Vadim Karpievich in QA — Автоматизация
Ну скроль и добавляй по мере скролла. Сделай хпат контайнс по слову добавить в корзину, а потом добавляй первый элемент пока не закончатся .nth-child:1 или (xpath)[1] помогут
источник

KL

Konstantin L in QA — Автоматизация
Андрей Алексеевич
1. Скролл
2. Получение всего массива.
Это работает!) лучшее решение, спасибо
источник

R(

Roman (rpwheeler) in QA — Автоматизация
Konstantin L
Так я решил сделать проверку цен) Добавляем все товары в корзину -> в корзине берем сумму итого и сравниваем с эталонной суммой, если они равны - всё огонь) иначе - у товара/товаров не верная цена. По решению подумаю (пока не понял, но постараюсь разобраться). Спасибо
А откуда берётся "эталонная сумма" ?
источник

АА

Андрей Алексеевич in QA — Автоматизация
Konstantin L
Это работает!) лучшее решение, спасибо
✌️
источник

KL

Konstantin L in QA — Автоматизация
кажется разобрался. Итак как я сделаю: скролим страницу до конца -> получаем список всех элементов -> идём в начало списка и циклом: скроллим страницу до следующего элемента в списке - добавляем его в корзину - следующая итерация цикла
источник

KL

Konstantin L in QA — Автоматизация
Roman (rpwheeler)
А откуда берётся "эталонная сумма" ?
это будет задаваться из файла до старта тестов
источник

KL

Konstantin L in QA — Автоматизация
Alex
вытяни все цены и сравни со списком ожидаемых
можно и так) подумаю
источник

A

Alex in QA — Автоматизация
Konstantin L
можно и так) подумаю
ну вообще не можно а нужно) ибо ui тесты и так не стабильны а ты еще и хочешь лишними движениями его нагрузить
источник

AK

Andrey K in QA — Автоматизация
Oleg Chukashev
XPath хорош, но есть проблема, он очень часто меняется. Представь, что в каждой новой фиче у тебя ломается вся автоматизация. Если селектор на css он меняется реже.
ой как сильно это зависит от разрабов... ой прям очень сильно.
источник

AK

Andrey K in QA — Автоматизация
Konstantin L
Привет. Подскажите, пожалуйста, как сделать (Selenium only):
Есть список товаров отображаются плиткой (вариант отображения менять нельзя), всего их 14, отображаются по 3 в ряд,  2 ряда в окне, чтобы отобразить остальные нужно скроллить страницу. Мне нужно каждый товар добавить в корзину. Как поступить?) Я пробую через find_elements искать часть товаров и добавлять их, потом скроллить страницу -  искать и добавлять следующие товары и т.д. Но во-первых не очень получается (хотя с этим я разберусь), а во-вторых это не круто (и что делать, если кол-во товаров изменится?). Есть решение получше?
1) если все элементы уже в DOMe, то логично их собрать в массив через findElements
2) К каждому элементу массива можно попробовать переместиться (чтобы не скролить вручную через JS):
Actions actions = new Actions(driver);
var element = driver.FindElement(locator);
actions.MoveToElement(element);
actions.Perform();
источник

KL

Konstantin L in QA — Автоматизация
Andrey K
1) если все элементы уже в DOMe, то логично их собрать в массив через findElements
2) К каждому элементу массива можно попробовать переместиться (чтобы не скролить вручную через JS):
Actions actions = new Actions(driver);
var element = driver.FindElement(locator);
actions.MoveToElement(element);
actions.Perform();
ну фактически так и запилю) выше описал уже решение
источник

AK

Andrey K in QA — Автоматизация
Konstantin L
ну фактически так и запилю) выше описал уже решение
хм... может быть. Но зачем скролить страницу для получения списка?О_о У вас элементы динамически подгружаются/выгружаются из DOMa?
источник