【问题标题】:Browser Choice with Automation Test in Python使用 Python 进行自动化测试的浏览器选择
【发布时间】:2019-07-07 08:26:20
【问题描述】:

最初,我有 def setup() 选项,可以从另一个文件中调用特定的 Web 浏览器,该文件包含有关如何设置 Web 浏览器的所有信息。标记出未使用的浏览器。

    def setUp(self):
    # Choose the Web Browser to test with
    operabrowser(self)
    # chromebrowser(self)
   ...

def test_one()
    ...
def test_two()
    ...

我试图摆脱每次编辑测试文件,我希望设置一个将调用浏览器的控制台输入,并且我已添加到 def setup()。

    browser_choice = input ( """Choose your browser
    Opera, [Firefox], Chrome or Safari
    > """ ).lower ()
    if browser_choice == 'opera':
        operabrowser()
    else chromebrowser()

这适用于单个单元测试,但如果文件中有多个测试,它每次都会询问浏览器选择。

对于将在测试文件中运行的所有测试,如何只询问一次此选项?我尝试了其他几种方法来解决这一切都失败了。

【问题讨论】:

    标签: python unit-testing selenium


    【解决方案1】:

    测试应该定义为类方法,在您的代码中,它们似乎是独立的函数,与拥有setUp() 方法的类没有直接关系。你只需要像这样修改你的代码:

    import unittest
    
    class YouTests(unittest.TestCase):
    
        def setUp(self):
            q = 'Choose your browser Opera, [Firefox], Chrome or Safari >'
            browser_choice = input (q).lower ()
            if browser_choice == 'opera':
                operabrowser()
            else: 
                chromebrowser()
    
        def test_one(self):
            pass
    
        def test_two(self):
            pass
    
    ...
    

    如果您有多个继承自 unittest.TestCase 的类,并且所有类都应使用相同的浏览器,则最好将浏览器选择插入您的 global 范围。例如:

    browser_object = None
    ...
    
    def operabrowser():
        global browser_object
        # Init opera object here
    
    def chromebrowser():
        global browser_object
        # Init chrome object here
    
    ...
    # Your tests using the browser_object
    ...
    
    if __name__ == '__main__':
        q = 'Choose your browser Opera, [Firefox], Chrome or Safari >'
        browser_choice = input (q).lower ()
        if browser_choice == 'opera':
            operabrowser()
        elif browser_choice == 'firefox':
            ...
        else: 
            chromebrowser()
    
        unittest.main()
    

    【讨论】:

    • 我有你目前在我的文件中添加的内容,谢谢,这只是我想要实现的目标的一个 sn-p。我正在尝试将第二个代码 sn-p 添加到设置中,而不需要为每个单元测试调用浏览器选择的输入。实际的测试文件是数百个单元测试。
    • @VCHealy 我已更新答案以解决您的评论。请检查它是否解决了您的问题。
    • 谢谢我已经添加了上面的内容,稍微调整了一下并将浏览器选项移动到一个单独的文件中并导入它们。它使维护更容易。浏览器打开,访问 url 并接受用户登录。不幸的是,实际的单元测试没有运行。除了点击几下元素之外,这些测试没什么特别的
    • @VCHealy 我知道您是 stackoverflow 的新手,但如果它解决了您的问题,您应该投票并接受答案。祝你好运!
    • 我按下了按钮,但它说我还不能公开注册。尽管浏览器设置的选择符合您的建议,但实际测试并未使用此解决方案运行。
    猜你喜欢
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    • 2013-09-23
    • 2021-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    相关资源
    最近更新 更多