chrome的devtool
chrome://inspect/#devices
inspect某个手机浏览器上的网址
uiautomator二次刷新的一个magic技巧
第一次刷新的时候
二次刷新
雪球的webview组件
二次刷新后,webview被转换为native控件,在11版本里是text属性不同,更早的版本可能是content-desc与resource-id
不同android版本的差别,一个app的webview组件,可以使用android系统自带的webview组件,也可以自己内嵌完整的webview组件(微信小程序与手机QQ浏览器)
webview测试
微信小程序
执行js
webview的原理
未打开开关,chromedriver版本也不对,仍然可以用native控件识别做自动化
未打开开关,只有模拟器才可以进行webview控件识别(chromedriver的版本必须对应)
打开调试开关的情况下,模拟器和真机都可以进行webview控件识别
打开开关,但是chromedriver版本不对应,也无法识别webview控件
webview自动化
io.appium.java_client.NoSuchContextException: An unknown server-side error occurred while processing the command. Original error: No Chromedriver found that can automate Chrome ‘82.0.4085’. See https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/web/chromedriver.md for more details. You could also try to enable automated chromedrivers download server feature
解决方法: chromedriver下载地址与webview自动化关键代码
示例代码
https://github.com/ceshiren/JavaSDET3/blob/master/src/test/java/test_app/webview/WebViewTest.java
课后作业
采用webview方式实现(推荐使用模拟器,搞定环境是最难的,所以第一节课不讲那么快)
交易 A股开户 输入手机号 验证码 立即开户
校长能不能把代码的git地址再贴一下 之前都没拉过代码
Jetfish
(supernova)
2020 年7 月 1 日 12:48
5
raivan
(辛另)
2020 年7 月 1 日 12:52
7
我的怎么看不到雪球的webview?
看不到是因为没有chromedriver,那么这个chromedriver是安装在哪里的?
chrome://inspect/#devices可以用mumu模拟器吗 ?
Jetfish
(supernova)
2020 年7 月 1 日 13:09
10
请问老师,那webview的元素定位是建议用chrome inspect呢还是用uiautomator这种原生结构定位方式?
或者二者的利弊能大概再总结一下吗?
最近在测试MAC PC客户端,采用原生的壳子+web浏览器(debug模式下可以打开跟Chrome一样的开发者工具),我想做自动遍历,感觉跟今晚讲的原理差不多,但是不知道怎么去驱动客户端。老师,可以给点建议吗?
实际测试开发过程中怎么快速判断当前页面是原生应用还是webview控件、还是toast等其它类型的控件呢? 比如企业微信中日程页面有一个时间选择控件(time-picker),用uiautomatorviewer 和 mumu 的inspector都识别不到,不直到怎么能快速判断这个是啥控件
看class属性,class一般可以表示控件最原始的类型。如果是android.view.View,那么就是复杂的自定义控件了,这种实现会比较麻烦,可以通过相对坐标去点击。识别内容会比较麻烦。
1、虚拟机上直接打开雪球app一直跳转到登录页面
2、idea运行的时候打开雪球app也是一直跳转到登录页面
3、试了各种版本的雪球雪球App,虚拟机也试了安卓7.0 7.11 8.0 10 ,一直是这样,求解决
我是模拟器浏览器访问百度,然后搜索 雪球app下载
,进入如下页面,下载后在模拟器里面安装;打开雪球时不会显示登录页面;你可以试试~
课后作业
遗留问题:
测试用例无断言,打算通过获取toast来判断,但需要在返回PO前判断是否需要切换回NATIVE_APP
缺少对正常、异常的情况的处理,目标是无论哪种情况,是否切换了context,是否切换了window,封装的方法应该都能适当根据PO返回原生APP
https://github.com/vankillua/hogwarts-test/blob/master/AppiumTest/src/main/java/com/vankillua/snowball/page/TradePage.java
遇到的问题(通过下方同学的方式解决此问题 )
使用as模拟器(Android version 11)和mumu模拟器,打开雪球App,进入“交易”页面后,没有找到webview上下文,无法切换
inspect
工具没有显示WebView,无法知道chromium版本,所以也不知道要下载哪个版本的chromedriver
getContextHandles
返回的只有 NATIVE_APP ,没有 WEBVIEW_com.xueqiu.android
getPageSource
返回的都有 android.webkit.WebView
课后作业:
https://github.com/Groot2001/appiumdemo/blob/master/src/main/java/test_app/xueqiu/page/TradePage.java
过程遇到的坑 :
点击交易后找不到webview,点击“A股开户”后才出现
模拟器突然无法找到webview了,无论是否加sleep,打印出来的context一直都是native_app
结论:同一份代码无缘无故可以后来又出现失效,看起来识别模拟器上的webview context不稳定。
解决问题 :
顺着是否有某种方法能打开模拟器webview开关的想法,搜索发现这种办法比较合适(稍微麻烦但是确实可行),参考文章:混合 App 打开 H5 调试开关
结果如图:已经可以获取到webview 上下文,接下来下载指定版本合适的chromedriver即可。
2 个赞