App自动化测试之特殊场景自动化
一、Toast弹出框处理
1、什么是Toast弹出框?
toast是Android中用来显示信息的一种机制,和Dialog对话框是不一样的,toast是没有焦点的,而且toast显示的时间是有限的,过一定的时间就会自动消失,并且也不能被点击。
2、toast获取
1)把 desired_capabilities 中指定对应属性 automationName 为 UiAutomator2(UiAutomator2,支持toast获取,只支持安卓版本5.0+)
caps = {}
caps['automationName '] = 'UiAutomator2'
2)通过xpath定位方式,获取toast信息(toast弹出框的文本信息)
# toast弹出框文本信息
toast_msg = '手机号码或密码不能为空'
# 通过@text写xpath表达式
toast_msg_xpath = "//*[contains(@text, {})]".format(toast_msg)
driver.find_element_by_xpath(toast_msg_xpath)
注意:toast弹出框设置显示等待只能使用 presence_of_element_located
WebDriverWait(driver,10,0.1).until(
EC.presence_of_element_located(MobileBy.XPATH,toast_msg_xpath))
二、混合应用-H5
1、native & web & hybrid简介
目前主流应用程序分为三类:Web App(网页应用)、Hybrid App(混合应用)、Native App(原生应用):
应用类型 | 优点 | 缺点 |
---|---|---|
native | 直接依托于操作系统, 交互性最强, 性能最好, 功能最为强大, 特别是在与系统交互中,几乎所有功能都能实现 | 开发成本高,无法跨平台,不同平台Android 和 iOS 上都要各自独立开发; 门槛较高,原生人员有一定的入门; 门槛,相比广大的前端人员而言较少; 更新缓慢,特别是发布应用商城后,需要等到审核周期; 维护成本高 |
web | 开发成本低,可以跨平台,调试方便; 维护成本低; 更新无需通知用户,不需要手动升级; 无需安装App,不会占用手机内存 | 无法获取系统级别的通知,提醒,动效等等 用户留存率低 设置受限制诸多; 体验较差 |
hybrid | 在应用程序中嵌入了webview,通过webview访问网页 开发成本较低,可以跨平台,调试方便; 维护成本低,功能可复用; 功能更加完善,性能和体验要比起web app 好太多; 更新较为自由 | 相比原生,性能仍然有较大损耗; 不适用于交互性较强的App |
2、怎么分辨一个App页面究竟是native还是web的?
通过元素定位工具:查看元素的 class 是否为 android.XXX.WebView
3、进入webview进行元素定位,需要添加浏览器驱动
需要在 desired_capabilities 属性中添加属性值 chromedriverExecutableDir,值为驱动的存放路径(尽量不要出现中文)
caps = {}
caps['chromedriverExecutableDir'] = "D:\deive\Chrome"
进入到webview中,就可以对元素进行定位,定位方法跟web元素定位一样。
定位webview,推荐一个 uc-devtools调试工具(在这个工具中,如果我们的元素是webview他就会显示,然后就可以看到浏览器版本,下载对应的驱动即可),
4、native和webview的切换
1)切换到webview
# 获取contexts
contexts = driver.contexts
print(contexts)
# 通过获取的contexts索引进行切换到webview
driver.switch_to.context(contexts[1])
# 通过名称进行切换到webview,名称格式为WEBVIEW_appPackage包名
# driver.switch_to.context('WEBVIEW_AppPackage包名')
2)切回到native
# 通过获取的contexts索引切回native
driver.switch_to.context(contexts[0])
# 通过名称进行切回native,名称为NATIVE_APP
# driver.switch_to.context("NATIVE_APP")