Автотест на Java + Selenium. Подскажите по архитектуре Page Object и логике

Есть следующее задание:

На сайте интернет магазина https://shoptool.com.ua/

Написать автотест:

  1. Перейти в раздел "Скидки"
  2. Рандомно, на 3-х первых страничках выбрать товар, провалиться в карточку товара и проверить наличие акционной и старой цены
  3. Делаем это для 3-х товаров (выбор количества проверяемых товаров сделать гибким).

Собственно, как это представляю я:

  • Main-класс. Инициализация, переход на страницу со скидками, главная логика теста
  • Класс для страницы со скидками Находим все элементы товаров по xpath, выбираем 3 случайных товара и прописываем им метод click()(рандомные страницы пока упустим, всё делаем на первой)
  • Класс для страницы карточки товара Здесь мы должны проверить есть ли в каждом из 3 товаров такие элементы как акционная и старая цена. Чтобы это сделать, я так понимаю, нужно использовать FindElements(), который возвращает Лист элементов. Если в нём будут 2 значения, значит всё хорошо. Если меньше, значит с товаром проблема.

Собственно, я не совсем понимаю как это всё связать и как прописать главную логику. Буду очень благодарен за развёрнутые ответы.


Ответы (1 шт):

Автор решения: Senior Pomidor

ответ не истина последней инстанции. просто в комментариях не поместился бы. я бы предложил другой вариант.

как только вы нашли список WebElement, то после манипуляций на странице элементы из списка могут быть не доступны. Тогда вы получите NoSuchElementException. Поэтому, лучше получить список из страницы скидки, страницу не трогать, открыть каждый элемент в новой вкладке, получить скидку, закрыть вкладку, открыть другой элемент в новой вкладке.

  1. открыть страницу main
  2. перейти в страницу скидки
  3. описать страницу скидки таким образом, чтобы List заполнялись все товары. (по умолчанию их 24) (//*[@id="products_on_sale_pagination_contents"]/div вот их пути )
  4. пройтись по списку for-ом + ограничить количество вашим динамическим значением.
  5. для каждого элемента открыть его в новой вкладке switchToTab
  6. инициализировать новый класс, который описывает страницу товара, где описано как достать цену, акцию и прочее, new Products(webdriver).WaitForLoad().GetMePricePlease()
  7. тут можно либо закрыть таб, либо просто перейти в первый таб. где список товаров
  8. сделать тоже самое для другого элемента

итого вы собрали список нужных цен.

плюсы подхода в том, не получите NoSuchElementException, помимо этого элементы останутся на своих местах и не будут перемещены, если один из них исчез из скидок или новый добавился.

минусы: ограничение 24 элемента. либо вам перед инициализацией нужно кликать на "показать еще 24", "показать еще 24", "показать еще 24"

→ Ссылка