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

Фотография

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

Selenium Python PageObject Select

  • Авторизуйтесь для ответа в теме
В теме одно сообщение

#1 EGORSAN

EGORSAN

    Новый участник

  • Members
  • Pip
  • 1 сообщений
  • ФИО:Гусенков Егор Александрович

Отправлено 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:
 


  • 0

#2 vladMat

vladMat

    Новый участник

  • Members
  • Pip
  • 13 сообщений

Отправлено 19 августа 2020 - 03:29

Не уверен, что это "правильный" вариант, но могу предложить:

1) тесту точно не нужно знать об объекте select

2) В объекте корзины я бы создал вложенный объект товар

class CartPage(ProductDetailPage):
    class Product:
        def __init__(self, browser)

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

Тогда вызов в тесте будет:

cart_page.Product().select_size(1)

  • 1



Темы с аналогичным тегами Selenium, Python, PageObject, Select

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных