Тестирование нескольких размеров области просмотра с Django / Selenium - PullRequest
0 голосов
/ 14 марта 2020

Я пытаюсь протестировать характеристики определенных элементов пользовательского интерфейса, учитывая разные размеры области просмотра и мультимедиа, определенные в CSS. У меня есть функция настройки для создания экземпляра безголового браузера Chrome, который, по-моему, имеет размер области просмотра по умолчанию 800x600:

class NewDesktopVisitorTest(StaticLiveServerTestCase):

    def setUp(self):
        self.chrome_options = Options()
        self.chrome_options.add_argument('--headless')
        self.browser = webdriver.Chrome(options=self.chrome_options)

. Это хорошо подходит для тестирования того, что я считаю версией страницы для настольного компьютера, но я Также хотелось бы убедиться, что мобильная версия отображается так, как я ожидал. Я могу создать совершенно отдельный класс с другой настройкой и указать размер области просмотра следующим образом:

class NewMobileVisitorTest(StaticLiveServerTestCase):

    def setUp(self):
        self.chrome_options = Options()
        self.chrome_options.add_argument('--headless')
        self.chrome_options.add_argument('--window-size=375,800')
        self.browser = webdriver.Chrome(options=self.chrome_options)

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

Большинство моих поисков для параметризованного тестирования дают решения для выполнения одних и тех же тестов с различными наборами данных, но мне еще предстоит найти примеры решений для настройки и запуска одних и тех же тестов для нескольких начальных конфигураций.

Я не решаюсь (хотя не желая) переключиться на другую среду тестирования или установить дополнительные пакеты только для решения этого конкретного случая c.

Кто-нибудь нашел простое решение этой проблемы?

1 Ответ

0 голосов
/ 15 марта 2020

Я запускаю свои разные размеры в for l oop, чтобы выполнить итерацию list размеров окна, поэтому мне не нужно снова писать одни и те же тесты.

XS = [320, 568]
SM = [568, 320]
MD = [768, 1024]
LG = [1024, 768]
XL = [1200, 750]

WINDOW_SIZES = [XS, SM, MD, LG, XL]

# Loops through all of the sizes.
for window in WINDOW_SIZES:

    # Set the window size       [320,568], etc...
    driver.set_window_size(window[0],window[1])

    # Load the page you want to test.
    driver.get('mypage')

    # rest of test assertions

I также сделал метод, который делает это немного проще:

def get_page(self, url_extention, window=XS):
    return (
        driver.set_window_size(window[0], window[1]),
        driver.get(self.live_server_url + url_extention)
    )

Затем в тесте я могу запустить

self.get_page('mysite', window=window) # or MD if that is all I want to test

Я обычно начинаю со всех из них, а затем (аналогично bootstrap) когда я двигаюсь вверх по размеру окна, меняя то, что мне нужно. Так что для MD и выше:

# Tests small sizes.
def test_mypage(self):
    self.get_page('mysite', window=window)

    self.assert('Assertions for all sizes')

# Tests larger sizes.
def test_mypage_MD(self):
    self.get_page('mysite', window=[MD,LG,XL])

    self.assert('The things that are different from the previous test')

PS - я знаю, что мои точки останова отличаются от Bootstraps.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...