【求助】coftest里面的session生效晚于homepage,由于没有登录,元素无法定位。

问题

目录结构
image
conftest放在testcase里面,执行用例时先去了page里面的homepage模块,但是模块里面涉及到了登录之后才能操作定位元素,但登录又是作为fixture放在case里面的,运行的时候,没有先去执行conftest的登录判断,conftest里面的session执行后于page页面的操作,向大佬请教下,要如何优化呢?是否把driver初始化放置在conftest里面?

报错信息

环境

win7+python3.8+pytest

你的业务逻辑和你代码的执行逻辑都对应不起来。
登录理论上来说也是一个po,不应该放在fixture 里面。fixture里面可以放一些和业务逻辑本身无关的,比如driver的初始化

登录也是有一个单独PO的,但是单独某个模块的用例先执行没有找到对应的资料,所以我就想把登录放在fixture里面。如果driver初始化放在fixture里面的话,那我自己封装的basepage类,里面的对元素的操作,每个都要传这个fixture里面的方法,我觉得又有点麻烦。所以现在是有点迷茫了。。。

用setup不就可以了嘛
setup 本来就有类级别模块级别的

我有很多个PO。每个PO里面都要去写setup_class吗?有点麻烦。。。

你看下官方文档的说明吧,不是只有类级别的

https://docs.pytest.org/en/7.2.x/how-to/xunit_setup.html

是有不同的级,但是对于我手上的这个项目来说,区别不大 。。我基本上 一个modele 就是一个class,里面有各种方法。
image

我现在的疑问就是我以为scope =session,程序执行的时候,这个session从什么时候开始算,是否从po模块的basepage初试化就开始算吧,我执行的时候,每次要到执行用例的时候,才开始有我自己的fixture调试信息。
我现在是这样操作的,也能跑通过,就是感觉有点怪怪的。

其实我一直没明白你需求是什么,是想一个driver 实例跑完所有用例?

:sweat_smile:不好意思哈,没有表达得很清楚。我的需求就是先执行登录模块的用例,我现在是在basepage初始化driver的地方,引用了登录的方法,也能实现,我是感觉这样的调用不太科学来着,就是想了解下,还有没有其他方式能实现?
另多个模块的用例跑的时候能实现一个driver跑完吗?模块间的driver 传递 是不是框架帮忙做了?
谢谢老师。 :joy: