在真机上跑自动化脚本
发现一个问题:
在我点击了图中的确定按钮后
对话框确实消失了
但是手机屏幕的聚焦没有回到主页面
无法点击主页面中的任何元素
我在做 web 自动化的时候知道有一个 iframe 切换的概念?
难道 appium 中也有吗?
如果是的话,怎么切换呢?
没有 id,没有 name
xpath 好像。。。
一样的问题,还是用 driver.quit() 来规避这个地方,让我崩溃的是,用 Touchaction 或者 driver.quit() 有的时候都无法返回,最后直接写一个 for 循环遍历,点一次返回,验证一次,没验证到就继续点返回!
用屏幕坐标定位元素 +TouchAction 试试看
楼主找到好的方法 以及出现的原因了吗?我今天也碰到了,但是 inspector 的时候,发现很多分钟后,inspector 自己又能识别了。。只是这个时长 太慢了
其实也就是说并没能完全按照我原本的意图做到模拟用户的操作
我只是回避了直接点击屏幕中的控件
而采用系统级别的 back 函数
但是我确实是很想搞清楚为什么点击确定按钮以后,自动化脚本就失去了对屏幕的控制
为什么就识别不到页面中的控件了
我还是倾向于认为发生了 frame 的切换
只是我在点击 确定 按钮的时候确实没有主动切换 frame,而这在 web 自动化测试中是不可能的
在 web 中必须主动切换 frame,然后再主动切换回去
但是我在点击 确定 按钮之前没有切换 frame,结果可以正常点击
在点击 frame 之后,回不到主界面了。。。。
我找到了结果的方法,虽然看上去完全不符合逻辑,但脚本就是按照功能测试的目标运行的:
public void testMePage_ClearCache() {
goToMe();
action.click(By.xpath("//android.widget.TextView[@text=\"清空缓存\"]"), "点击清空缓存");
action.click(By.id("com.eisoo.anycontent:id/positiveButton"), "点击确定按钮");
// action.sleep(2, "调试");
// action.clickScreen(75, 147, 50, "");
action.back("");
action.click(By.id("com.eisoo.anycontent:id/ll_left"), "点击左上角的返回");
action.click(By.xpath("//android.widget.TextView[@text=\"设置\"]"), "点击设置");
boolean isExist = false;
isExist = action.verifyExist(By.xpath("//android.widget.TextView[@text=\"当前缓存:0B\"]"), "断言缓存已被清除");
FrameAssertion.isTrue(isExist, "断言缓存已被清除");
action.click(By.id("com.eisoo.anycontent:id/ll_left"), "点击左上角的返回");
}
我这里要解释一下,在点击如图所示的确定按钮之后
我本该做的操作是判断清除缓存的效果元素
可是获取不到
我就尝试点击左上角的返回图标
还是获取不到
这两种情况下,我开始怀疑是否存在 frame 切换的问题
可是在尝试了 driver.switchTo()
之后还是获取不到
没办法,最终想到了使用
driver.back()
但是让我困惑的也正出现在这里!!
driver.back() 确实起了效果,让我返回到上一个页面,但是这时候又能够点击左上角的返回图标了
问题是上一个页面中是不存在这个图标的,大家可以看第一个图,图中是没有左上角的返回图标的
所以,我现在怀疑存在一个时间差的问题
但是暂时没找到 root cause
大家有什么想法都可以留言
我查过了,目前 app 是 native,没有 webview
我换了一种思路来做这个脚本
从功能验证的角度来看是一样的
只是为什么点击完 popup 后就不能识别页面中的元素,我还
没有找到原因
真心觉得 appium 有太多坑
标记一下,要不不好找自己的帖子