webview测试与微信小程序基础

: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

作业:
webview

理解了context和window的关系
也不知道自己理解的对不对,总结下来,请有经验的同学或者老师点评
context 与 window
context
context 可以理解为场景、或上下文,安卓中context是所有组件的对象, 安卓和java 不同,不是写一个方法一个main 就能运行, 安卓是有一个组件环境, 这些组件存在上下文关系的相互依赖,他们都继承context
window
安卓四大组件之一, activity ,可以理解成一个页面, 创建一个activity的时候,实际上先去创建了一个window,然后再在window上加载各种view, 通过phonewindow加载出页面ui

作业:
https://github.com/yule-qa/Hogwarts/blob/master/src/test/java/test_app/webview/WebView.java

终于做完了。
问题:webview状态下,不能使用id定位,一用id定位就报错。
https://github.com/ximis/seleniumtest/blob/master/src/main/java/test_app/xueqiu/page/BasePage.java
TradePage.java

https://github.com/Magician-J/UIAutoTest/blob/master/src/main/java/testapp/xueqiu/page/TradePage.java
遇到问题:
1.手机号页面加载加等待时间。
2.webview定位,用By.id报错,换css。

有个问题是对于 capability 的 chromedriverExecutable 这个参数,我看文档写的是 abs 绝对路径,如果我用相对路径就是找不到 chromedriver.exe,这个有没有其他办法可以使用相对路径呢?因为代码如果在服务器跑和在本地跑二者的 chromedriver 可能存放的地方不同
https://github.com/abcnull/appium_junit5_practice

也是用的edge

所有的chromedriver这个容量还是有几百兆的。放在项目里边显示不现实。要么是把服务器和本地的路径统一,要么就是本地调试是本地的路径,服务器是服务器的路径