本系列文章汇总了从 Appium 自动化测试从基础到框架高级实战中,所涉及到的方方面面的知识点精华内容(如下所示),希望对大家快速总结和复习有所帮助。
1.Appium 基础 1 (环境搭建和简介)
2.Appium 基础 2 (元素定位和元素常用方法)
3.Appium 基础 3 (手势操作和 uiautomator 查找元素)
4.Appium 基础 4 (显式等待)
5.Appium 基础 5 (toast 和参数化)
6.Appium 基础 6 (webview)
7.Appium_ 企业微信练习 (非 PO,增加和删除联系人)
8.Appium_ 企业微信练习 ( PO–增加联系人)
本文为第三篇,主要讲解 Appium Toast、参数化、WebView(附实例代码)。
-
为了给当前视图显示一个浮动的显示块,与 dialog 不同它永远不会获得焦点;
-
显示时间有限,根据用户设置的显示时间后自动消失;
-
本身是个系统级别的控件,它归属系统 settings,当一个 App 发送消息的时候,不是自己造出来的这个弹框,它是发给系统,由系统统一进行弹框,这类的控件不在 App 内、需要特殊的控件识别方法;
-
Appium 使用 UIAutomator 底层的机制来分析抓取 toast,并且把 toast 放到控件树里面,但本身并不属于控件
-
AutoMationName:UIAutomator2 这个是 Appium 本身的设置就自带的,不需要额外添加,默认就是UIAutomator2;
-
getPageSource 是无法找到 Toast 的;
-
必须使用 Xpath 去查找:
-
//*[@class=“android.widget.Toast”]
-
//*[contains(@text,“xxxxx”)]
-
adb shell dumpsys window | findstr mCurrent
-
这个命令可以找到当前的 activity,不知道 Android 高版本是不是还 ok,由于 API Demo 权限高,可直接跳到这个 activity 运行,其他 App 就不 ok 了;
-
driver.page_source 可以打印当前的页面,可以找到 Toast 的伪控件;
-
打印 toast 的 text 出来;
-
参数化要解决的是一个用例可以复用的问题,比如一个用例重复使用不同的数据,就可以使用参数化,比如同一个用例,有搜索股价,比较股价,都是同一个方法,只是数据不太一样;
-
@pytest.mark.parametrize(‘searchkey,type,price’,[
(‘alibaba’,‘BABA’,180),
(‘xiaomi’,‘01810’,10) -
用上面的方法去使用参数化;
-
def test_search(self,searchkey,type,price) 函数的参数要和参数化的参数的数量一样,字符串也要一样;
-
一个用例,有2组参数化,就会运行两次 setup 和 teardown 的方法;
-
使用 self.driver.find_element(By.ID,“com.xueqiu.android:id/search_input_text”).send_keys(f"{searchkey}"),使用f"{searchkey}"是一个好东西,可以搭配参数化使用;
-
手机端
-
被测浏览器:(不可以是第三方浏览器)safari for ios and chrome,chromium,or browser for Android
-
PC 端
-
安装 chrome 浏览器或者 chromium
-
下载对应手机浏览器对应的 driver
-
客户端代码:
-
“browserName”:“Browser” 或者 “browserName”:“Chrome” 这个是指定的浏览器
-
“chromedriverExecutable”:r"c:\chrome\chromedriver.exe" 这个是指定的chromedriver的路径
-
如何查找app的版本:adb shell pm dump com.android.browser | findstr version
-
desire_cap
-
步骤:
-
不通过包来打开浏览器
-
访问百度
-
输入 tongtong,并点击搜索
-
注意:
-
第一次运行 Appium,看后台的路径可以找到浏览器的 chromedriver 的版本,还可以找到 chromedriver 的路径
-
selenium之 chromedriver与chrome版本映射表(更新至v2.46)_huilan_same的博客-CSDN博客_chromedriver 1
-
这个网站的 chromedriver 和 chrome 版本的关系更加全
-
断网查看,如果断网显示网页加载不了就是 WebView
-
看加载条,有加载条通常是 WebView
-
看顶部是否有关闭按钮
-
下拉刷新,页面有刷新就是 WebView
-
下拉刷新的时候是否有网页提供者
-
用工具查看,如果元素显示 WebView,则是 WebView
-
是 Android 系统提供能显示页面的系统控件(特殊的 view)
-
< android4.4 WebView 底层实现 webkit 内部
-
=android4.4 采用 chromium 作为 WebView 底层支持,支持 HTML5、CSS3、JS
-
WebAudio:图形化的界面收听音频
-
WebGL:页面 3d 效果的渲染
-
WebRTC:直播等等,美颜
-
PC:
-
能够访问 Google
-
下载对应版本的 chromedriver
-
手机端:应用代码需要打开WebView的开关
-
代码中要添加 chromedriverExecutable
-
有一些 WebView 可以被 UIAutomatorview 查找到,但都不推荐,可能会出现兼容性的问题,比如 text 的显示字符串会不一样
-
如何查找当前 WebView 的网页
-
adb shell
-
logcat | grep http
-
就能找到访问的 HTTP 了
-
打开 API demo 的 WebView
-
向输入框输入文本
-
点击 i am link
-
退出应用
-
打开应用
-
点击交易
-
点击 A 股开户
-
输入用户名和密码
-
点击立即开户
-
退出应用
-
注:打开新的页面其实就是一个新的窗口了,要切换窗口句柄了
-
设备
-
Android 模拟器 6.0 默认支持 WebView,mumu 直接打开了,不用设置;
-
起码模拟器和物理机需要打开 App 内开关(WebView 调试开关);
-
PC 浏览器定位元素
-
Chrome 浏览器-62版本才可以更好的看见 webview 的内部,其他的版本都有一些 bug;
-
换成 chromium 浏览器可以避免很多坑,展示效果和速度要比 chrome 要快;
-
代码
-
有的设备可以使用 find_element_acessibility_id(), 不同的设备渲染的页面不同,兼容性不适合;
-
switch_to.context() 切换不同的 context,一个页面来说;
-
switch.to_window() 切换不同的窗口句柄,对不同的页面来说;
更多内容,我们在后续文章分享。
喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦