Selenium 如何让当前 UI 自动化用例失败不影响下一条用例执行?

狂天 · 2022年11月07日 · 最后由 狂天 回复于 2022年11月07日 · 4091 次阅读

我使用 Selenium 和 pytest 做 UI 自动化。
我的用例中会包含一个操作完整的开启和关闭流程,
比如:在列表中点击按钮打开 A 弹窗,操作,之后关闭 A 弹窗。然后再去执行下一条用例。
可这样有一个问题就是,我打开 A 弹窗在操作时候报错了(比如前端更改了页面结构导致的元素定位报错),
这样一来就导致页面仍然停留在弹窗,下一条用例也执行失败。

我想到一个解决方法,因为我同一个页面的用例写在一个测试文件里,这些用例的共同点就是都
是在同一 URL 下执行的。我可以加一个页面刷新功能(就是重新请求一下 URL),在遇到用例失败时,自动执行一次。
我在 conftest.py 里写了一个自动截图功能,我想在截图后重新请求这个 URL,
可这样就得往 conftest.py 的方法里传参数,这个配置文件里的方法不是自动加载的吗?该怎么给里面的方法传参啊?

共收到 3 条回复 时间 点赞

一般 A 用例失败,B 用例都没法进行下去的,其实都是把 A 和 B 写到了一条用例中。

我们的做法是在 setup 里做处理,确保每条用例是从指定的页面开始。
在 selenium 里面就是把这个页面的 URL 保存起来,在这一步就是强制跳转到这个页面;
在 appium 里面因为没有指定页面跳转,所以一般是点返回,直到返回到了想要的根页面为止。

如果返回某个页面出错了,还会重新登录。

整个过程处理起来比较复杂,但是对提高整体的通过率是很有帮助的。

Jerry li 回复

我想在失败截图后,driver 请求一下我在用例文件中设置的刷新地址。
这个该咋实现呢?
我失败截图是用的 conftest.py 里面的@pytest.hookimpl(tryfirst=True, hookwrapper=True)
在里面判断用例状态为失败时,就截图。
我要想失败后让 driver 请求我的指定页面的话,就得给这个方法传地址参数,该咋传呢?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册