公司产品是金融交易类型的,使得界面上盘口与价格一旦开盘后,会刷新的非常快非常快。但是我要定位的元素是不会一直变动的(他们只是在一个界面而已) 因此我观察到:
在网上自己搜索了很多,似乎与 “动态页面很难定位” 话题有关系,但是他们遇到的问题并不是和我特别一致。 我用的是 appium,现在用了相对坐标的方式避开了定位慢的问题。但是还是想用 locator 定位,更加稳定、健康
所以有前辈也遇见过这个问题吗?
既然已经 “避开” 了问题,又何必苦苦探究如何 “解决” 问题呢?凡事不可太认真啊!
按以前对 appium 底层 dump 元素用的 uiautomator 原理看,用 locator 定位,前提是要能拿到完整的元素树。但元素持续高频变动,那元素整个树的结构就不稳定,导致很难 dump 出来(dump 基本要从根节点开始向下递归,会有一定耗时)。这个原理决定了比较难用 locator 定位。
相对坐标这个方法还是挺不错的,如果担心由于设备屏幕大小不同导致坐标要适配,可以考虑用图像元素识别类的定位方法。
原因 android 的 uiautomator 元素查找方法 android.support.test.uiautomator.UiDevice#findObject =>android.support.test.uiautomator.UiDevice#getWindowRoots => android.support.test.uiautomator.UiDevice#waitForIdle() waitForIdle 判定是根据 多少秒内没收到 accessibility event,动态界面更新会一直触发 accessibility event;然后 waitForIdle 会等待到设置的超时后退出, 默认的超时时间是 10 秒(结果就是同样的脚本,页面的操作就非常非常缓慢) 调用 android.support.test.uiautomator.Configurator#setWaitForIdleTimeout 可以修改默认超时时间,
appium 中的话, 可以看看 appium server 有没有提供这个参数的设置
多谢层主指路,我去翻了 Appium 文档,好像还真有说法,我现在去试试
层主,我发现我并不是 idle 等待时间长 我看了 appium 日志,他明明已经定位到元素了,为何,还要再定位 我觉得是元素刷新过快,,页面变了、?
图像元素识别类的定位方法是什么?
可以看看 airtest ,appium 好像也有类似的插件。
请问楼主解决动态页面加载速度慢的问题了吗
请问这个问题解决了吗