Appium android 的 toast 如何得到

crisy · 2014年03月19日 · 最后由 笑哼 回复于 2018年06月12日 · 2663 次阅读

亲们,请接题~

由于 toast 是动态的,上面的文字通过 UIautomator 看不到,webdriver 更不知道怎么校验了,各位这块都是怎么做的呢?

共收到 19 条回复 时间 点赞

这的确是个问题, toast 其实是 app 的逻辑, 但是控件不属于 app 自身,所以 uiautomator 估计是没法取到的。也许 appium 应该提供一个 hook, 来验证是否收到了一些跨 app 的消息,看大家有什么好意见。

我个人的观点是监控 api 调用, 只要调用 toast 的 show 方法就可以了。如果发出了请求, 但是系统没处理,那也是系统的问题,不是 app 的问题。

UIautomator 不太会,不过我确定 robotium 可以的:有个 waitForText() 方法,返回布尔值。把 toast 里面的内容当做搜索条件就可以,找到返回 true,找不到就是 false

#2 楼 @joshua 用的是什么原理那, 看过代码没

On iOS, the dev team implemented their own version of toast messages. It's a message that appears in a tiny box for a few seconds. If they add the proper labels then it should work.

On Android, I'm not sure what can be done as it's an upstream uiautomator issue. Maybe there's some way to monitor accessibility events directly?

UIautomator 的确不支持。

#3 楼 @seveniruby waitfortext,貌似是等待了一个时间,默认在 sleep 中有一个等待时间。然后将其中抓取到的 view 全部加入一个 list。然后做一个验证

#5 楼 @monkey toast 的接管是系统, 还是 activity 自带的功能? 如果 robotium 能搞, 貌似就不是系统负责展现的了。robotium 能搞, appium 肯定也能搞的, 估计还没实现。

#6 楼 @seveniruby appium 的 uiautomator 不能搞,没有开放 api。 Selendroid 估计可以。

#6 楼 @seveniruby toast 从 api 上看是系统层面的,但是调用是在 activity 里面调用的。你说的这个接管是指啥?appium 从逻辑上来讲肯定是拿得到的。

#7 楼 @lihuazhang 自己能在这个上面封装么?uiautomator

#7 楼 @lihuazhang 我觉得 uiautomator 也可以搞的,只不过 uiautomator 太慢, 都来不及抓。他有个 uiwatcher 应该可以解决。

现在有办法解决这个问题吗

#10 楼 @seveniruby
uiwatcher 也搞不了
uiautomator 目前没有开发的 api 可以获取到这个信息,而且估计以后也不太可能,除非 android sdk 中做调整
当出现 toast 提示时,后面的代码不会执行,被阻塞住了,只有当 toast 消息消失后,后面的代码才会执行,这是捕获不到的真正原因
比如
element.click() ; // 单击出现 toast 消息
system.out.print("go on"); //只有当上面单击产生的 toast 消息消失后才会输出

如果要用 appium,貌似现在只有截屏,对比图片可以搞定

#12 楼 @hz453673181 我看了 appium 的最近 issue, 貌似是已经支持了, 我没验证那

#13 楼 @seveniruby 是吗?我看 API 中没有相关的方法?前段时间去 github 上提问,官方回复说 appium 处理不了,让用 selendroid,selendroid 虽然可以处理,但没有 appium 好用

是不是用 misc 对象的 acceptAlert 或者 dismiss Alert 可以选择 toast 上的按钮?

没后续了嘛这帖子,有人搞出来 uiautomator 怎么获取 toast 吗

Plasma 回复

XCUITest 可以获取 toast 吗?

iOS 的 toast 怎么去获取???? 有没有像安卓的机子 一样 用 UIAUTOMATOR 去获取的

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