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

Техники локализации плавающих дефектов
онлайн, начало 19 апреля
Тестирование безопасности
онлайн, начало 21 апреля
Тестирование мобильных приложений
онлайн, начало 21 апреля
Автоматизатор мобильных приложений
онлайн, начало 21 апреля
Фотография

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 2.0: стартовый уровень
онлайн
Программирование на Java для тестировщиков
онлайн
Автоматизация функционального тестирования
онлайн
Selenium WebDriver: полное руководство
онлайн




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

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

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

Яндекс.Метрика
Реклама на портале