1030Appium app自动化测试经验分享-toast消息的获取及断言

个人博客:https://blog.csdn.net/zyooooxie

一)toast消息 获取及断言

什么是Toast?
在屏幕下方浮现出一个窗口,显示一段时间后又消失,这个可视化组件叫做 Toast,它主要用于提示用户某种事件发生了。如图3、图4

图3是 对某车牌操作成功后的提示

图4是 登录成功后的提示

Appium 官方文档:

Supported Platforms
Appium supports app automation across a variety of platforms, like iOS, Android, and Windows. Each platform is supported by one or more “drivers”

其中 Android
(BETA) The Espresso Driver
The UiAutomator2 Driver
(DEPRECATED) The UiAutomator Driver
(DEPRECATED) The Selendroid Driver

对Android 想定位toast元素,这里一定要注意automationName的参数是Uiautomator2才能定位到。

故而需要在最初的配置增加此项:desired_caps[“automationName”] = ‘Uiautomator2’

def get_toast(self, text):
    try:
        WebDriverWait(self.driver, 10, 0.05).until(
            EC.presence_of_element_located((By.XPATH, '//*[contains(@text, "%s")]' % text[1:3])))
        print('可以找到这个toast')
    except Exception:
        print('找不到这个toast')

这是我写的一个方法,只为了 能不能找到toast:

  1. 因为toast的存在时间还算比较久(2-3秒总有的),所以可以把显式等待的间隔查询时间设置大一点,像0.5秒;我是用这个0.05秒的间隔时间去查找 后面例子的‘正在刷新’和‘刷新完成’的
  2. 我最初又掉进‘经验主义’的坑:我要定位这toast,那我总得使用uiautomatorviewer或inspector来定位知道它的属性值啊,使用uiautomatorviewer始终没找到,我就无奈了。直到朋友提醒我,才醒悟:元素的text的属性值应该就是它的提示,完全就可以用xpath来完成定位;’//*[@text=“XXXX”)
  3. ‘//*[contains(@text, “%s”)]’ % text[1:3] 截取传入text的第二三位的值 作为定位toast的依据;我是想做断言的,用我传入的text值去定位 然后再作为断言的依据,感觉有点不太好,所以才会用 部分text 来定位,再用获取的text和传入的做断言。

如果我想做断言呢?

def toast_duanyuan(self, text):
    """这儿对于一闪而过的,就经常在第二次去找元素,想拿来某属性做断言;找不到的 就提示 + 断言失败"""
    duanyuan = True
    try:
        WebDriverWait(self.driver, 10, 0.05).until(EC.presence_of_element_located((By.XPATH, '//*[contains(@text, "%s")]' % text[1:3])))
        print('可以找到这个toast')
    except Exception:
        print('找不到这个toast')

        duanyuan = False

    if duanyuan is True:
        self.assertEqual(self.driver.find_element_by_xpath('//*[contains(@text, "%s")]' % text[1:3]).get_attribute('text'), text, '但是 text断言失败了')
        print('text属性值 断言成功')
    else:
        self.assertTrue(duanyuan, '断言失败')

这方法对于一闪而过的提示(或元素) 不保证能正常断言。

但是第二次去查找元素获取text属性值,可以用driver.find_element_by_android_uiautomator(‘textContains("%s")’ % text[1:3]).get_attribute(‘text’),会比起xpath定位略微更快。

二)刷新提示语 捕获

前面例子说的一闪而过的提示 即 本例:在很多新闻资讯类app或朋友圈等情景中(下方 图1、图2),往往会有下拉刷新的设计

不推荐给这个提示 作断言;太费力不讨好。如果非想确定到底有没有刷新成功,建议是确定 这个‘刷新完成’的提示 存在,就结束。

‘正在刷新’ ‘刷新完成’ 这也就是我为什么将前面写的方法中 text【1:3】 text截取第二三位,确保绝对不同(截取‘刷新’,有可能就判断成另一个)

交流技术 欢迎+QQ 153132336 zy
个人博客 https://blog.csdn.net/zyooooxie

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值