• 明白了

  • 链式调用我理解,但是他怎么做到隔行的呢? python 隔行不是需要 \ 吗


  • 层主,我发现我并不是 idle 等待时间长
    我看了 appium 日志,他明明已经定位到元素了,为何,还要再定位
    我觉得是元素刷新过快,,页面变了、?

  • 你好,马哥,我有向您请教的问题:
    1、我观察到您的 PO 封装完,需要 return 一个 page 回去,我采用的是 return this,而您是 return new page。。请问您是故意不用 this 吗,是否有特殊的原因呢?
    2、我观察了您开源的微信公众号的 UI 自动化测试框架,您的 driver 是定义了 static 变量,供后续的 findElement 等等操作,但是这样在多线程下安全吗?线程 1 设置了 driver,被线程 2 修改,,请问这里是故意这么设计的吗?

  • 哇,你们俩头像太像了,全白色,我混淆了,抱歉抱歉。。。

  • 飞哥,我又有向您请教的问题:
    1、我观察到您的 PO 封装完,需要 return 一个 page 回去,我采用的是 return this,而您是 return new page。。请问您是故意不用 this 吗,是否有特殊的原因呢?
    2、看了您介绍很多的设计模式,但是我发现前期初搭项目时,为了更快生产、交付给老板,往往不能考虑到这么多设计。您是后续重构的时候,才开始将建造者、策略模式等等引入项目的吗?
    3、我观察了您开源的一个微信公众号的 UI 自动化测试框架,您的 driver 是定义了 static 变量,供后续的 findElement 等等操作,但是这样在多线程下安全吗?线程 1 设置了 driver,被线程 2 修改,,请问这里是故意这么设计的吗?

  • 多谢层主指路,我去翻了 Appium 文档,好像还真有说法,我现在去试试

  • conftest 怎么支持多级别 at 2020年12月18日

    我理解,conftest 是定义 fixture 的一块地方,至于各自 fixture 的作用域,还是它们自己的 scope 决定的吧?
    另外 conftest 只对和他一个目录的 test.py 生效。。
    不知道和楼主的提问点是否有信息差

  • 牛逼。
    飞哥的这文章我重新看了不止 56 遍了,每遍都多理解一些。
    这里有个小问题哈:
    您最后一张图,每个模型训练的 case 就 build + run + waitUntil。批跑起来了自动化,是每个 case 都只执行一遍吗?我并没有看到参数化,那是不是说,批跑一次,只会对每个 case 跑一遍(给一个 randomString 的输入,但是没有其他特殊情况的输入了呀)。这些 case 都只能算是冒烟测试吗?
    其实不是很明白 UI 自动化到底该怎么执行参数化与 ddt,希望飞哥解惑。。

  • response = self.Action.__getattribute__(self.locator.get('method'))(self.locator)
    

    这里我用过 exec(string) 的方式逃过课,哈哈
    相当于,

    string = "response = self.Action.{}({})".format(self.locator.get('method'), self.locator)
    exec("string")
    

    exec 执行 string 的时候,已经拼接成正常的 python 代码了
    不过楼主方法更优雅,更 python

  • 楼主,求助一下 Driver 单例的问题:
    我第一个用例跑完用一个 driver 进行连接,也创建了一个 Action 单例,没问题,
    但是我该怎么释放这个单例呢?我接下来跑第二个用例,需要重新用 desired_caps 启动 app 呀,那应该是一个新的 driver,而且也得用这个新 driver 创建新的 Action 单例。。。那这时候怎么析构掉上一个 Action 单例呢?
    我这块儿我没有想明白,烦请楼主指教了。