Перейти к содержимому

EGORSAN

Регистрация: 12 мар 2020
Offline Активность: 22 окт 2020 05:15
-----

Мои темы

Selenium+Python+Page Object, работа с Select

06 августа 2020 - 04:18

Python 3.7.5, Selenium 3.141.0
 

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

Необходимо реализовать проверку корректной работы функционала корзины, а именно изменение размера. Как правильно реализовать работу с элементом Select (что-то рабочее я сделать могу, но мне интересно, как это сделать "правильно" и "вкусно" с точки зрения архитектуры) ?

Шаблон теста:

def test_guest_can_resize_the_product_in_the_cart(browser):
    cart_page = CartPage(browser, InputValues.LINK)
    cart_page.open_cart_with_a_random_product() //Открываем корзину с продуктом
    next_size = cart_page.get_size(1) // считываем размер товара, который будет выбран 
    cart_page.select_size(1) // меняем размер
    cart_page.reload() // перезагружаем страницу
    new_size = cart_page.get_current_size() // считываем размер товара после изменения 
    cart_page.check_product_size(next_size, new_size) // проверяем, что изменения прошли успешно

Суть вопроса, как лучше работать с объектом Select, каждый раз создавать новый объект внутри каждого метода работы со списком:

class CartPage(ProductDetailPage):
    def select_size(self, value):
        select = Select(self.browser.find_element*CartPageLocators.SELECT_SIZE)
        select.select_by_index(value)

Или реализовать хранение Select внутри самого теста, передавая его каждый раз в методы:

def test_guest_can_resize_the_product_in_the_cart(browser):
    cart_page = CartPage(browser, InputValues.LINK)
    cart_page.open_cart_with_a_random_product() //Открываем корзину с продуктом
    sizing_object = cart_page.get_size() // ВОЗВРАЩАЕМ объект Select
    cart_page.select_size(sizing_object, 1) // меняем размер
    cart_page.reload() // перезагружаем страницу
    new_size = cart_page.get_current_size(sizing_object) // считываем размер товара после изменения 
    cart_page.check_product_size(next_size, new_size) /проверяем, что изменения прошли успешно

или есть более оптимальные методы решения данной задачи?
Критику и советы крайне приветствую :rtfm: