webview测试与微信小程序基础

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测试

微信小程序

image

执行js

image

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股开户 输入手机号 验证码 立即开户

建议用edge,和chrome一样还不用fq

校长能不能把代码的git地址再贴一下 之前都没拉过代码 :joy:

https://github.com/ceshiren/JavaSDET3

我的怎么看不到雪球的webview?

看不到是因为没有chromedriver,那么这个chromedriver是安装在哪里的?

chrome://inspect/#devices可以用mumu模拟器吗

:pray:谢谢

请问老师,那webview的元素定位是建议用chrome inspect呢还是用uiautomator这种原生结构定位方式?
或者二者的利弊能大概再总结一下吗?

最近在测试MAC PC客户端,采用原生的壳子+web浏览器(debug模式下可以打开跟Chrome一样的开发者工具),我想做自动遍历,感觉跟今晚讲的原理差不多,但是不知道怎么去驱动客户端。老师,可以给点建议吗?

实际测试开发过程中怎么快速判断当前页面是原生应用还是webview控件、还是toast等其它类型的控件呢? 比如企业微信中日程页面有一个时间选择控件(time-picker),用uiautomatorviewer 和 mumu 的inspector都识别不到,不直到怎么能快速判断这个是啥控件

老师课堂答疑,mumu不可以

看class属性,class一般可以表示控件最原始的类型。如果是android.view.View,那么就是复杂的自定义控件了,这种实现会比较麻烦,可以通过相对坐标去点击。识别内容会比较麻烦。

老师, 为什么inspect页面, 是空白

估计需要fq下

1、虚拟机上直接打开雪球app一直跳转到登录页面
2、idea运行的时候打开雪球app也是一直跳转到登录页面
3、试了各种版本的雪球雪球App,虚拟机也试了安卓7.0 7.11 8.0 10 ,一直是这样,求解决

我是模拟器浏览器访问百度,然后搜索 雪球app下载 ,进入如下页面,下载后在模拟器里面安装;打开雪球时不会显示登录页面;你可以试试~
image

课后作业

遗留问题:

  1. 测试用例无断言,打算通过获取toast来判断,但需要在返回PO前判断是否需要切换回NATIVE_APP
  2. 缺少对正常、异常的情况的处理,目标是无论哪种情况,是否切换了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
过程遇到的坑

  1. 点击交易后找不到webview,点击“A股开户”后才出现
  2. 模拟器突然无法找到webview了,无论是否加sleep,打印出来的context一直都是native_app
  • 结论:同一份代码无缘无故可以后来又出现失效,看起来识别模拟器上的webview context不稳定。

解决问题

  • 顺着是否有某种方法能打开模拟器webview开关的想法,搜索发现这种办法比较合适(稍微麻烦但是确实可行),参考文章:混合 App 打开 H5 调试开关
  • 结果如图:已经可以获取到webview 上下文,接下来下载指定版本合适的chromedriver即可。
  • image
  • image
2 个赞

完成作业:使用webview方式完成雪球交易页面A股开户的代码实现和测试

  • TradePage

https://github.com/lanqiushou/hogwarts/blob/master/JavaSDET3/src/main/java/test_app/xueqiu/page/TradePage.java

  • BasePage

https://github.com/lanqiushou/hogwarts/blob/master/JavaSDET3/src/main/java/test_app/xueqiu/page/BasePage.java