在Selenium中使用单个测试定义测试多个浏览器

时间:2011-11-25 04:26:25

标签: python selenium

在Python中有一种简单的方法吗?我有一个如此定义的pytest funcarg;

def pytest_funcarg__selenium(request):
    sel = selenium('10.3.10.154', 5555, '*firefox', 'http://10.3.10.180:8000')
    sel.start()

    return sel

这显然无效,因为我无法在测试中更改指定的浏览器。我的意思是,我可以在这个funcarg中围绕selenium包装一个虚拟类,循环浏览一系列浏览器,但如果测试失败,那么所有浏览器都会失败,这对于找到失败的浏览器来说当然不是很实用。 / p>

我还想过在测试函数上使用装饰器的想法,它会在模块中为每个浏览器重新定义一次不同名称的函数,但结果相同 - funcarg无法知道使用哪个浏览器

3 个答案:

答案 0 :(得分:0)

我见过的一种技术是在一个类中组织测试并使用子类来切换类变量来指示要测试的浏览器:

class TestFirefox:
    browser = '*firefox'

    def pytest_funcarg__selenium(self, request):
        sel = selenium('10.3.10.154', 5555, self.browser, 'http://10.3.10.180:8000')
        sel.start()
        return sel 

class TestChrome(TestFirefox):
    browser = '*opera'

除了最大化代码重用之外,此技术还允许您为各种浏览器覆盖和自定义选定的测试。

在py.test中,我相信你可以使用generative tests来达到同样的效果。

答案 1 :(得分:0)

通过使用selenium Grid,您可以在多个浏览器中运行单个测试。这是你想要的吗?

答案 2 :(得分:0)

使用环境变量提供浏览器字符串,如果未提供,则将其默认为有用的内容(例如*firefox)。然后,您可以在从命令行运行测试类之前简单地设置该值。