Appium Appium 如何处理 toast

匿名 · 2015年11月02日 · 最后由 鲁婧 回复于 2016年01月25日 · 3105 次阅读

一直被这个头痛,因为好多提示都是 toast 类型。使用 uiautomatorview 识别不了,像一个浮层。使用 hierarchyviewer 识别到 id 之类的,但是无法处理。使用 seledroid 可以处理。请问下如何个用 appium 处理 toast 控件,提前多谢了
其实针对 popupwindow,我也有这种疑问。

共收到 47 条回复 时间 点赞

UIAutomator 模式下暂时没有很直接的办法去解决...

匿名 #3 · 2015年11月02日

#1 楼 @anikikun 请问下,除了 seledroid,还有什么办法可以解决

#2 楼 @bree uiautomator 模式下暂时没了解到有什么很好的办法。

https://github.com/appium/appium/issues/4824

除了跨 app, 一般不要用 uiautomator, 那个没有 selendroid 稳定.

匿名 #44 · 2015年11月02日

#3 楼 @anikikun 谢谢

hierarchyviewer 能识别到的,一般都能获取

匿名 #8 · 2015年11月03日

#6 楼 @shixue33popupwindow可以识别,通过 id 识别的时候提示找不到控件,是我哪里做的不对吗?

匿名 #9 · 2015年11月03日

#6 楼 @shixue33 这种能处理吗?

#8 楼 @bree 我错了,我本意是想讲 uiautomatorViewer 可以识别的,一般可以找到。。。。uiautomatorViewer 是找不到 popupindow 和 toast 的,这一类寄希望于 Robotium,selendroid 一类的框架吧。

匿名 #11 · 2015年11月03日

#9 楼 @shixue33 为了你这句话,我看了半天的官网,不过还是学了不少东西,同样谢谢你

没办法,截图吧,然后用图片对比方法= =

请问一下各位,关于上图,我想点击 “允许” 按钮,但是 “允许” 按钮不属于要测试的应用,这种情况如何处理?

匿名 #15 · 2015年11月05日

#12 楼 @kukumao 属于 popupbotton 吧,可以用 hierarchyviewer 识别的到。换 seledroid 自动化引擎吧,或者直接点击坐标点可以解决。也是没有办法。我也等大神出来

我本来想将脚本上传到云测做兼容性测试,但不同手机的坐标和自带管家类应用都不同,只有通过文本识别,可又需要跨进程

我们这边 uiautomator 模式下检查 toast 都用的文字识别,当然,不是特别稳定

匿名 #14 · 2015年11月06日

#14 楼 @kukumao 求教下,文字识别如何做?

匿名 #1 · 2015年11月06日

#15 楼 @xubin98246 求教下,文字识别如何做?

#12 楼 @kukumao 我今天也遇到了 popup window 要进行操作,实验了一下,发现发送两次 KEYCODE_ENTER 就是确认操作,返回操作只需要发送一次 KEYCODE_BACK 就好了😁

48楼 已删除

@bree 不知道你用的什么语言写脚本,我们是购买了一个文字识别的商用解决方案,python 中也有个 pytesser 模块可以直接使用

匿名 #20 · 2015年11月16日

#18 楼 @weamylady 我试过这种不行,因为你取不到焦点,执行 KEYCODE_ENTER 就是针对当年鼠标所在的点。

#14 楼 @kukumao 你开个多线程,用 uiautomator 去检查有没有安全警告,有就点允许,很简单的事。

匿名 #22 · 2015年11月17日

#22 楼 @sunrise 求教下,seledroid 模式下可以处理 popup window 吗?

#23 楼 @bree selendroid 可以处理 toast,popup window 不确定能不能处理,一般我都是用 uiautomator 来处理的。

匿名 #25 · 2015年11月18日

#24 楼 @sunrise selendroid 可以处理 toast,使用的是 waitforelement。但是对于固定弹出的 popup window ,因为要对其上面的控件进行操作,不仅仅是确认和取消。请问下该如何处理。能讲述的清楚点吗?求教啊。我现在采用的就是坐标点封装的形式。

#25 楼 @bree 不知道你说的 popup window 是什么样的,下面这个我亲测用 uiautomator 是可以的

from uiautomator import Device
d = Device("93d1243b")
el = d(text="长宁区")
el.click()

匿名 #24 · 2015年11月19日

#26 楼 @sunrise 不是的,这种 uiautomatorViewer 可以识别,所以可以直接操作。我说的是这种

匿名 #27 · 2015年11月19日

#26 楼 @sunrise 通过 uiautomatorviewer 无法识别,通过 hierarchyviewer 识别为

#21 楼 @bree 我的是那种 android 页面底部弹出的一个 popup window,可能跟你的类型不一样吧,可以跟开发确认下是否能让 popup window 监听 keycode enter

#28 楼 @bree 我拿这个 app 看了下,似乎 selendroid 和 uiautomator 都不能获取。这个控件比较特殊,弹出后周围区域还是可以点击的。


我用的是 hierarchyviewer 显示的 Toast,这种怎么搞啊?不会用 Toast Recorder 录制的那种,selendroid 或者文字识别都可以,求大神赐教。

@xubin98246您提到的 PyTesser 我找了资料说【在测试使用过程中,发觉只对英文内容识别较理想,而对中文无法处理识别!
】,还有别的工具么?

大神快快出现!我最近也遇到了这个问题,找了半天都没有找到解决方案,求问 appium 处理 toast 有没有可行的方案?

#14 楼 @kukumao 朋友,你解决这问题了吗?我现在也是苦恼云测时总会卡在这

driver.findElementByXPath 识别到了。。

#34 楼 @snowmaster xpath 能识别 toast 吗,怎么识别的能说下吗

#32 楼 @erinys 文字识别终究是个不稳定的方案,所以现在我们改成了用一个辅助 apk 的方式来获取 toast 信息,大概原理是通过继承系统的 AccessibilityService 类,重写 onAccessibilityEvent 方法,监听 Toast 事件,获取文本,最后再通过 socket 返回脚本比较(也可以直接通过 adb logcat 读日志来比较),4.0 以上应该都可以,供参考。

#35 楼 @neyo 我是用来处理 12L 那种情况的,但这 2 天发现还是有问题。针对 12L 的问题,云测平台的人说他们平台有图片识别处理了,至于 toast 的情况就不清楚了

#37 楼 @snowmaster 好的,谢谢,我也再研究下

@snowmaster 很久没来了,你是在哪个云测平台

#39 楼 @kukumao 阿里云测 没用过其他平台,也不好对比

@snowmaster 也是阿里云,已经通过他们客服解决了,谢谢。

#41 楼 @kukumao 你好,想问问你在使用阿里云的时候,本地通过后,然后提交云测后的日志会不会经常会出现些莫名其妙的问题
我自己折腾了几天也没有解决,已经有点不想再折腾云测了

uiautomator 没有 api 提供 toast 识别功能,只能转换 webdriver 使用 selendroid 操作,后者可以识别 toast

#43 楼 @turinblueice 我现在用的也是 appium 的 selendroid 模式来获取 toast,但是感觉没有 appium 好用,可以混合使用么?

#44 楼 @erinys 不能的,因为连接两个 driver 需要两个接口,如果混合使用,必须开两个进程,连接两个接口,在判断 toast 的情况下,用 selendroid 的进程去执行 toast 判断方法。类似于主进程执行常规 case 验证,然后到判断 toast 时候,将这个方法作为进程的执行参数传入,然后将该进程的的结果存入一个进程安全的结果队列 queue,之后主进程去该队列读取结果。

#4 楼 @seveniruby 你好,你的意思是安卓測試,一般推薦用 selendroid mode 嗎? 可以解釋下嗎? 感謝!!

#44 楼 @erinys 可以示範下,用 selendroid mode 如何獲取 toast 麼?謝謝!

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