代码之家  ›  专栏  ›  技术社区  ›  Derek

使用Django/Selenium测试多个视区大小

  •  0
  • Derek  · 技术社区  · 5 年前

    我正在尝试测试给定CSS中定义的不同视区大小和媒体的某些UI元素的特性。我有一个设置函数来实例化一个无头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)
    

    这样做的好处是非常清楚地显示给定测试失败的位置(即桌面或移动设备)。问题是,我希望对两个(可能是多个)视区大小运行完全相同的测试,并且不希望在多个类中维护完全相同的测试。

    我搜索的大多数参数化测试都会得到针对不同数据集运行相同测试的解决方案,但我还没有找到针对多个启动配置设置和运行相同测试的解决方案示例。

    有人找到解决这个问题的直截了当的办法吗?

    0 回复  |  直到 5 年前
        1
  •  0
  •   Carl Brubaker    5 年前

    我在一个 for 循环以迭代 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
    

    我还做了一个方法,使这一点更容易:

    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')