欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Appium+python实现微信小程序自动化的实践与探索,Appium+python实现APP自动化也同样适用

程序员文章站 2022-07-12 22:12:33
...

Appium+python实现微信小程序自动化的实践与探索

关于这个呢,可以哒,真的可以哒,现在小程序自动化的工具不多,这个可用。

但是,我还是希望大家和我一起研究一下,微信小程序自动化框架:Minium + 微信开发者工具 (一),大家可以去我的首页找下相关文章,毕竟是微信自己的开发的工具,怎么说呢,微信的亲儿子吧。

1.Appium的安装

Appium是开源的自动化测试框架,主要用于iOS,Android以及Windows apps等移动平台的自动化测试。

新版的Appium做了优化,安装比以前简单很多了。

首先呢,环境依赖安装好

1.安装JDK:在JAVA官网http://www.oracle.com/technetwork/java/javase/downloads/index.html下载JDK的安装包,推荐8版本以上的。

Appium+python实现微信小程序自动化的实践与探索,Appium+python实现APP自动化也同样适用

2.安装SDK:双击SDK的安装文件,使用默认值一路下一步,直到完成安装,配置好adb环境变量,这个环境变量应该不用教吧,自行百度;确保OK运行adb如下,不然运行appium会报错的,兄弟。

Appium+python实现微信小程序自动化的实践与探索,Appium+python实现APP自动化也同样适用

连接真机后,运行adb devices,要找到自己的设备哦,运行显示如下:如果找不到,手机要打开调试;

Appium+python实现微信小程序自动化的实践与探索,Appium+python实现APP自动化也同样适用

 

3.下面安装Appium桌面版本appium-desktop-Setup-1.2.1.exe ,找不到资源的小伙伴,在我的首页资源里面也有。

安装完成后打开,点击start。然后点击长得像搜索的控件,我们先看下是不是OK的。

Appium+python实现微信小程序自动化的实践与探索,Appium+python实现APP自动化也同样适用Appium+python实现微信小程序自动化的实践与探索,Appium+python实现APP自动化也同样适用

Appium+python实现微信小程序自动化的实践与探索,Appium+python实现APP自动化也同样适用

Appium+python实现微信小程序自动化的实践与探索,Appium+python实现APP自动化也同样适用

填入参数如下,什么手机版本,信息啊,devicename就是刚刚adb devices运行得到的设备id:

{
  "platformName": "Android",
  "platformVersion": "9",
  "deviceName": "a57c5aae",
  "appPackage": "com.tencent.mm",
  "appActivity": "com.tencent.mm.ui.LauncherUI",
  "udid": "a57c5aae",
  "noReset": true,
  "automationName": "uiautomator2"
}

点击startsession,如果一切OK的话那么,手机提示安装一些东西,记得点击允许哦。

可以得到手机的画面,并且启动了微信。一切OK,环境没有问题。

Appium+python实现微信小程序自动化的实践与探索,Appium+python实现APP自动化也同样适用

2.安装python以及依赖Appium-python-Client

官网下载安装最新的python,并且添加环境变量;

Appium+python实现微信小程序自动化的实践与探索,Appium+python实现APP自动化也同样适用

添加pip环境变量

CMD执行pip install Appium-python-Client

这个简单理解就是python和appium连接的工具啦

Appium+python实现微信小程序自动化的实践与探索,Appium+python实现APP自动化也同样适用

安装完成后,我们就可以通过python脚本来控制appium啦;

3.测试脚本的编写

上面我们打开的这个窗口就可以关闭啦,上面的说明appium和手机连接没有问题;现在我们通过python脚本连接appium再连接手机是不是很简单;

Appium+python实现微信小程序自动化的实践与探索,Appium+python实现APP自动化也同样适用

这个窗口记得保留,别把服务都关了,还玩个毛线啊

Appium+python实现微信小程序自动化的实践与探索,Appium+python实现APP自动化也同样适用

测试用例以及脚本使用工具PyCharm,是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。

我们先看一个简单的例子,连接手机,打开微信,点击进入小程序,点击登录按钮...............:

# -*- coding:utf-8 -*-
# Author:Jin Fei
# -*- coding:utf-8 -*-
# Author:Jin Fei
import unittest
from appium import webdriver
import time,os
from Mini.Function.common import *



class MyTests(unittest.TestCase):
    # 测试开始前执行的方法,测试开始前的准备
    def setUp(self):
        desired_caps = {
                'platformName': 'Android',
                'platformVersion': '9',
                'deviceName': 'a57c5aae',
                'appPackage': 'com.tencent.mm',
                'appActivity': 'com.tencent.mm.ui.LauncherUI',
                'automationName': 'Uiautomator2',
                # 'udid': 'a57c5aae',
                # 'resetKeyboard': True,
                'noReset': True,
               "automationName": "uiautomator2"
                }
        self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)  # 连接Appium
        self.driver.implicitly_wait(8)

    def test001_miniprogram_login(self, t=500):
        """登录并进入家电列表页面"""
        time.sleep(3)
        window = self.driver.get_window_size()
        x1 = window['width'] * 0.5  # 起始x坐标
        y1 = window['height'] * 0.2  # y1坐标,滑动起始点
        y2 = window['height'] * 0.7  # y2坐标,滑动末尾点
        self.driver.swipe(x1,y1,x1,y2,t) # 页面下拉
        time.sleep(2)
        self.driver.find_element_by_id('com.tencent.mm:id/ka').click() # 点击进入小程序
        time.sleep(2)
        add_xpath = "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.FrameLayout[2]/android.widget.FrameLayout/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.webkit.WebView/android.widget.Button/android.view.View[3]/android.view.View[3]"
        self.driver.find_element_by_xpath(add_xpath).click()
        time.sleep(2)
        login1_xpath = "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.RelativeLayout/android.widget.FrameLayout[2]/android.widget.FrameLayout/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.webkit.WebView/android.view.View[2]/android.view.View[2]/android.view.View"
        self.driver.find_element_by_xpath(login1_xpath).click()
        time.sleep(2)
        inputbox_account_xpath = "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[3]/android.widget.RelativeLayout/android.widget.FrameLayout[2]/android.widget.FrameLayout/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.webkit.WebView/android.view.View[2]/android.view.View[1]/android.view.View/android.view.View/android.view.View/android.view.View"
        self.driver.find_element_by_xpath(inputbox_account_xpath).click()
        time.sleep(2)
        #点开数字键盘
        self.driver.tap([(230, 2023),(230, 2023)],100)
        time.sleep(2)
    # 测试结束后执行的方法
    def tearDown(self):
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()

4.我这边先解释一下我的目录和路径

当前小程序测试脚本路径如下:

Appium+python实现微信小程序自动化的实践与探索,Appium+python实现APP自动化也同样适用

  1. 自定义函数Function如下:

Appium+python实现微信小程序自动化的实践与探索,Appium+python实现APP自动化也同样适用

 

# -*- coding:utf-8 -*-
# Author:Jin Fei
import unittest
from appium import webdriver
import time,os

class Function:

    def isElementExist(self,element):
        #判断元素
        flag=True
        driver=self.driver
        try:
            driver.find_element_by_xpath(element)
            return flag
        except:
            flag=False
            return flag
  1. Case如下,代码上面有例子:

Appium+python实现微信小程序自动化的实践与探索,Appium+python实现APP自动化也同样适用

  1. Run脚本集结case运行并生成报告:前辈们写的HTMLTestRunner脚本太长了,我重新起了一个博客里面直接复制作为第三方模块使用。

Appium+python实现微信小程序自动化的实践与探索,Appium+python实现APP自动化也同样适用

# -*- coding:utf-8 -*-
# Author:Jin Fei
import unittest,time
import os
import sys
sys.path.append(os.path.abspath(os.path.dirname(os.getcwd())))
from Mini.packages.HTMLTestRunner import HTMLTestRunner

test_dir = '../case'
discover = unittest.defaultTestLoader.discover(test_dir, pattern='test*.py')

if __name__ == '__main__':
    now = time.strftime("%Y-%M-%D %H_%M_%S")
    filename = 'result.html'
    fp = open(filename,'wb')
    runner = HTMLTestRunner(stream=fp,
                            title='Test report Mini',
                            description='用例执行情况:')
    runner.run(discover)
    fp.close()

4.测试报告

  1. 测试报告是html的格式,summary格式如下,测试报告生成的话需要下载一个模块HTML TestRunner

Appium+python实现微信小程序自动化的实践与探索,Appium+python实现APP自动化也同样适用