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

1 投票
3 回答
1520 浏览
提问于 2025-04-17 07:02

有没有简单的方法可以在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中包裹一个虚拟类,让它循环遍历一个浏览器列表,但如果某个测试失败了,那就意味着所有浏览器的测试都会失败,这样对于找出哪个浏览器出问题就不太实用了。

我还考虑过在测试函数上使用装饰器,这样可以为每个浏览器在模块中重新定义一次函数,起个不同的名字,但结果还是一样——funcarg没有办法知道该用哪个浏览器。

3 个回答

0

使用环境变量来提供浏览器的字符串,如果没有提供,就默认设置为一个有用的值(比如说,*firefox)。这样的话,你只需要在从命令行运行测试类之前设置这个值就可以了。

0

通过使用Selenium Grid,你可以在多个浏览器上同时运行一个测试。这是你想要的效果吗?

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中,我相信你可以使用生成测试来达到同样的效果。

撰写回答