美文网首页微信小程序
微信小程序自动化,记录趟过的坑!

微信小程序自动化,记录趟过的坑!

作者: Coding测试 | 来源:发表于2020-12-15 22:23 被阅读0次

项目思想:关键字+数据驱动混合测试

  • 基于Android-微信小程序自动化的关键是:webview的切换
    对于微信App来说如何从NATIVE切换到webview的过程
  • 测试版本信息
    1.微信版本:7.0.21
    2.Android:7.0
    3.appium引入依赖:6.1.0
    4.testng引入依赖:6.14.3
  • 初始化实例配置信息
    1.配置参数如下:


其中涉及到微信内置webview版本与chromedriver一致性设置,查看流程如下:
第一步:查看微信webview版本信息,这里通过uc-devtools工具查看
uc-devtools工具获取链接:

链接:https://pan.baidu.com/s/1GA3EPDz0GD3IyXUsgU8Z3g 
提取码:3lpg 

scrcpy真机工具获取链接:

链接:https://pan.baidu.com/s/1If7q_empeZgXWVXU0v8rIw 
提取码:3hi9 

下载后打开,同时通过真机连接工具scrcpy打开微信,此时即可显示微信的chromedriver版本号:


从上图可以看到chromedriver,去chromedriver官网下载对于的版本去驱动
点击下载对应版本的chromedriver版本
下载后放到resources目录下,见上图的配置路径。
第二部就可以正常使用web的元素查看了:

2.setCapability参数配置如下(入坑-需要先查看下自己微信小程序上下文切换的context,通过下面的方法可以查看):
其中最关键是的: options.setExperimentalOption("androidProcess", "com.tencent.mm:appbrand0");
通过driver.getContextHandles()方法获取从微信app切换到小程序后的所有句柄,配置到启动参数中。



把需要切换的context,配置到setExperimentalOption中即可。具体配置详情如下:

 //引用配置参数
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("platformName", platformName);
        capabilities.setCapability("appPackage", appPackage);
        capabilities.setCapability("appActivity", appActivity);
        capabilities.setCapability("automationName", automationName);
        capabilities.setCapability("deviceName",deviceName);
        capabilities.setCapability("chromedriverExecutable", chromePath);
        capabilities.setCapability("platformVersion","7.0");
        capabilities.setCapability("unicodeKeyboard",true);
        capabilities.setCapability("noReset",true);
        // 不重新签名apk
        capabilities.setCapability("resetKeyboard", true);
        // 支持X5内核应用自动化配置
        capabilities.setCapability("recreateChromeDriverSessions", true);
        /**
         *  ChromeOptions使用来定制启动选项,因为在appium中切换context识别webview的时候,
         *  把com.tencent.mm:toolsmp的webview识别成com.tencent.mm的webview.
         *  所以为了避免这个问题,加上androidProcess: com.tencent.mm:toolsmp
         * */
        ChromeOptions options = new ChromeOptions();
        /**
         * 这里很关键>>
         * ChromeOptions使用来定制启动选项,因为在appium中切换context识别webview的时候,把com.tencent.mm:toolsmp的webview识别成com.tencent.mm的webview.
         * 所以为了避免这个问题,加上androidProcess名:通过driver.getContextHandles()获取所有的上下文,我这里获取的是com.tencent.mm:appbrand0
         * */
        options.setExperimentalOption("androidProcess", "com.tencent.mm:appbrand0");
        capabilities.setCapability(ChromeOptions.CAPABILITY, options);
        // 初始化会默认将chrome浏览器打开,需要将Browser置为空
        capabilities.setBrowserName("");
        // 每次启动时覆盖session,否则第二次后运行会报错不能新建session
        capabilities.setCapability("sessionOverride", true);
        URL url = null;
        try {
            url = new URL("http://127.0.0.1:4723/wd/hub");
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        driver = new AndroidDriver(url, capabilities);

  • 关键实现逻辑
    1.查了一下网上很多说是需要在微信app内的搜搜功能进入小程序,但对于体验版的小程序这里肯定搜索不到的。所以进入被测体验版小程序最简单的方法是:下拉微信框+点击小程序坐标进入最直接。
    首次进入小程序后都会在小程序列表展示,最新的位置都是第一个。
    1.通过开启手机设置内置的【指针位置】来定位小程序的坐标



其中通过坐标点击方法如下:

public void taptest(AndroidDriver driver,int x, int y){
        /**设置显示等待时间10s  driver=baseAndroidDriver.getDriver(baseConfig)
        特注:显示等待与隐式等待相对,显示等待必须在每一个需要等待的元素前面进行声明,如果在规定的时间内找到元素,则直接执行,即找到元素就执行相关操作
         */
        wait = new WebDriverWait(driver,20);
        //tap点击坐标,输入坐标,然后再release()释放坐标点,用perform()去执行一系列action操作
        action = new TouchAction(driver).tap(PointOption.point(x,y)).release().perform();
    }

2.实现代码-webview切换成功后就可以正常使用显示等待时间解决元素加载问题。

//进入微信下拉滑动
        swipeToDown(driver);
        //点击被测小程序,通过坐标点击
        taptest(driver,190,673);
        //allure截图存留
       // SaveFailureScreenUtil.saveFailureScreenShot(driver);
        //切换webview页面
        // 获取到所有的contexts,并在启动参数里配置
        System.out.println("所有的contexts:" + driver.getContextHandles());
        // 切换到小程序webview对应的context中
        driver.context("WEBVIEW_com.tencent.mm:appbrand0");
        System.out.println("切换context成功!");
        // 获取到所有的handles
        Set<String> windowHandles = driver.getWindowHandles();
        System.out.println("所有的windowsHandles" + windowHandles);
        for (String handle :windowHandles){
            System.out.println("切换到对应的windowHandle:" + handle);
            driver.switchTo().window(handle);
            String strTip = "IT互联网热门课程";
            if(driver.getPageSource().contains(strTip)){
                //找到了对应的窗口,退出循环
                break;
            }else {
                System.out.println("查询的:"+strTip+"页面可能不包含该文本信息");
            }
        }
        //下拉滑动操作
        swipeToUp(driver);
        //进入正常的web元素定位操作
        //点击模拟试卷
        UIElementUtil.clickButton("腾讯课堂","分类",driver);
  • xml维护的元素定位信息


  • 通过日志可以看到已经切换到webview并定位元素点击成功了

所有的contexts:[NATIVE_APP, WEBVIEW_com.tencent.mm:appbrand0, WEBVIEW_com.tencent.mm:appbrand2]
切换context成功!
所有的windowsHandles[CDwindow-ABCE2F2B94ED5F6A2BF2153F6CFEFF21, CDwindow-FA78683E0B1150082058BBC8EFF73001]
切换到对应的windowHandle:CDwindow-ABCE2F2B94ED5F6A2BF2153F6CFEFF21
查询的:IT互联网热门课程页面可能不包含该文本信息
切换到对应的windowHandle:CDwindow-FA78683E0B1150082058BBC8EFF73001
INFO  2020-12-14 10:24:22 [main] com.iappium.utils.UIElementUtil.clickButton(UIElementUtil.java:186) - [分类]该点击事件耗时:445ms
  • 最后-更多工具和技术请关注:Coding测试
    其中UIElementUtil工具类是封装的关键字工具栏,通过xml维护定位元素(等同于ui的自动化测试的关键字),由于UIElementUtil使用的是dom4j解析的xml文件,内容较多,需要看的话可以移步至项目源码中查看iappium4j项目app+小程序自动化测试-源码

相关文章

  • 微信小程序自动化,记录趟过的坑!

    项目思想:关键字+数据驱动混合测试 基于Android-微信小程序自动化的关键是:webview的切换对于微信Ap...

  • 微信小程序3 数据请求

    前言 在数据请求之前,我们需要把微信小程序数据请求的坑过一遍,若无法满足这些坑,请放弃小程序吧1:微信小程序的请求...

  • 微信小程序,我趟过的那些坑

    上面说要搞小程序,强行趟坑 坑之1(居然木法调试!) 在官方下载安装好了,微信web开发者工具,最开始我没得app...

  • 微信支付相关问题解决网址

    ios微信支付开发遇到的问题 微信支付趟过的坑

  • 关于mpvue的几个点

    微信小程序的框架众多,而现在我只想记录一下mpvue的几个点...祝你采坑成功。 微信小程序在语法规范、API、组...

  • 小程序相关实用文章

    1、微信小程序开发常见之坑2、微信小程序联盟-微信小程序开发社区-小程序3、怎么在弹窗中加入输入框4、微信小程序实...

  • 【教程】微信小程序入门

    微信小程序入门基础知识 Moustache:我的微信小程序入门踩坑之旅 github精选:微信小程序入门简要教程 ...

  • 微信小程序开发采坑记录

    微信小程序开发采坑记录 1、微信小程序报错:页面中没有定义某某事件或者app.json中没有添加该页面路径 报错下...

  • 【原创】微信小程序开发遇到的问题

    前言 最近在开发微信小程序,顺便记录一下自己踩过的坑 一、按钮样式的修改 小程序默认按钮样式背景色是灰色,有边框,...

  • 微信小程序的自动化测试框架

    微信小程序的自动化测试框架 微信发布了小程序的自动化测试框架Minium,提供了多种运行验证方式,其特点: 支持一...

网友评论

    本文标题:微信小程序自动化,记录趟过的坑!

    本文链接:https://www.haomeiwen.com/subject/oywjgktx.html