手机APP爬取之Appium的基本认识与使用

   日期:2024-12-26    作者:bdvg2 移动:http://oml01z.riyuangf.com/mobile/quote/34322.html

作者后浪v

零、写在前面

偷懒一个月没有更新博客了,偶尔打开CSDN看到仍有许多点赞和关注消息,唔~
来个冠冕堂皇的理由——最近听音乐去了

( ˃̶̤́ ꒳ ˂̶̤̀ )

一首让人激动且平静的歌,分享出来~

♪ 点击播放

 

一、Appium的基本原理与安装

1. 相关链接
    2. 简介

    Appium 是一个移动跨平台移动端自动化测试工具,可以非常便捷的为IOS和Android平台创建自动化测试用例。它可以模拟APP内部的各种操作,如点击、滑动、文本输入等等,只要我们手动操作Appium就可以完成。另外,Appium实际上继承了Selenium,Appium也是利用WebDriver来实现App的自动化测试的。
    Appium相当于一个MITM,我们将编程语言(例如PYTHON)传给Appium,Appium就会根据不同的操作指令对移动设备进行驱动,完成不同的动作,例如

    • 自动化完成一些重复性的任务
    • 爬虫
    • 自动化测试
    3. 工作原理

    这幅图, 包含了 3个主体部分 : 自动化程序、Appium Server、移动设备

    • 自动化程序:自动化程序是由我们来开发的,实现具体的手机自动化功能。
    • Appium Server:负责管理手机自动化环境,并且转发自动化程序的控制指令给手机,转发手机给自动化程序的响应消息。
    • 手机设备:Appium Server 会在手机上 安装一个 自动化代理程序, 代理程序会等待自动化指令,并且执行自动化指令。
    4. 所需安装包

    接下来的演示均以Python语言为例,不足之处请多多指出。
    请确保PC已经搭建好Python环境和安装编辑器,另外需要安装Appium、JDK和下载好Android SDK。
    因为软件较多且多布置在国外网站,这里我整理在百度网盘以供大家使用

    点击跳转到网盘链接
    提取码:u0na

    你点击链接的样子是不是像极了给我博客点赞时帅气的样子呢?不要下次一定了叭~~

    5. 自动化环境搭建
    5.1 Appium Server安装

    Appium Desktop官方下载 点击跳转
    Appium组织为了方便大家安装使用,制作了一个可执行程序 Appium Desktop,把 nodejs 运行环境、Appium Server 和一些工具打包在里面了,只需要简单的下载安装就可以了。

    5.2 安装client编程库

    根据原理图,我们知道自动化程序需要调用客户端库和Appium Server进行通信。
    因为我们介绍Python语言开发,所以就需要用pip安装库,如下:

     
    
    5.3 安装JDK

    安卓APP的自动化,必须要安装安卓SDK,而安卓SDK需要JDK环境。网盘下载: jdk-8u211-windows-x64.exe
    安装好之后,还需要添加一个环境变量 JAVA_HOME,指定值为jdk安装目录,比如:

     
     
    
    5.4 安装 Android SDK

    对于安卓APP的自动化,Appium Server 是需要 Android SDK的。
    因为要用到里面的一些工具,比如 要执行命令设置手机、传送文件、安装应用、查看手机界面等。
    可以从上面给出的百度网盘连接下载最新的 Android SDK文件包: androidsdk.zip ,并且解压,即可。
    解压完成后,需要 配置一下添加一个环境变量ANDROID_HOME,设置值为sdk包解压目录,比如

     
    

    另外,还推荐大家配置环境变量PATH,加入adb所在目录:

     
     
    
    6. 连接手机

    连接好以后,打开命令行窗口, 执行

     
    

    命令来列出连接在电脑上的安卓设备。
    如果输出类似如下的内容

    List of devices attached
    4d0035dc767a50bb evice product:LCT_LA100 xxx:HUAWEI
    device:01

    表示电脑上可以查看到 连接的设备,就可以运行自动化程序了。

    7. 区分用户变量和系统变量(补充

    首先来解释一下什么是环境变量path。
    环境变量 Path 中包含的 这些目录, 就是 Windows查找程序的目录。
    环境变量 Path 的内容包括了多个目录,目录之间用分号隔开。
    当我们在CMD中敲入下面的命令时:

    python Appium_Bilibili.py

    Windows 命令执行器 就会依次搜索如下目录

    • C:Python38Scripts;
    • C:Python38;
    • C:%USERPROFILE%AppDataLocalMicrosoftWindowsApps;
    • C:Program Files (x86)mitmproxybin;
    • C:Windowssystem32;
    • C:Users ingyAppDataLocalProgramsMicrosoft VS Codebin;
    • C:WindowsSystem32Wbem;
    • C:WindowsSystem32WindowsPowerShellv1.0

    看这些目录中,是否有 python.exe 或者 python.bat 之类的可执行文件,如果有就执行他们。
    区别(引用博客

    • 系统变量:对所有的用户起作用
    • 用户变量:对当前用户起作用

    注意:系统变量与用户变量的PATH:告诉系统可执行文件放在什么路径(平常执行程序的路径,要放在PATH里面,不能建一个变量,cmd会提示“不是内部或外部命令,或者不是可执行程序”

    二、代码展示与分析

    前面说过,Appium继承了Selenium的WebDriver类,实际上代码可以参考selenium网页自动化。

    Say Is Easy. Show Thou Code!

     
    

    运行代码前,要先 运行Appium Desktop

    首先,封装了desired_caps字典,传入了手机信息,被测试软件信息,输入法信息,自动化服务的相关信息。

    查询启动APP Package与启动Activity名称的方法

    手机成功连接电脑后,打开被测试的手机APP,然后通过ADB(Android Debugger Bridge) 命令查看手机最近运行程序

     
    

    我们来着重关注cmp参数

     
    

    其中cmp中“/”前半段就是APP Package名称,后半段就是Activity名称。

    如下所示

    主要来说说实例化这一行。

     
    

    此行代码调用了webdriver的Remote方法,Appium Server启动后会在本地创建一个默认端口号: 127.0.0.1:4723,这里加入了这个参数,并且传入了之前配置好的desired_caps字典。

    remote 英[rɪˈməʊt] 美[rɪˈmoʊt]
    adj.偏远的; 偏僻的; 遥远的; 久远的; 关系较远的; 远亲的;
    n. 远程;
    [例句]Landslides have cut off many villages in remote areas.
    滑坡使边远地区的许多村庄与外界隔绝。
    [其他]比较级:remoter 最高级:remotest

    很难直观的看出Romote()方法的功能,那么的,一起来看看源代码

    第19行

     
    

    这就明白了,Remote实际上就是WebDriver类。

    接下来我们看看WebDriver类。

    可以看到,WebDriver把desired_caps传入了一个个的方法去执行。所以,这里的Romote()方法做了很多事情

    • 识别一个Android且版本为10的手机设备并连接
    • 找到被测试的App对象并通过Lancher启动它
    • 配置好适合的输入法
    • 配置好UIAutomator

    到这里,初始化就完成了。

    三、元素定位与界面操作

    Appium是基于Selenium的,所以和Selenium代码定位元素的基本规则相同。

    1. 界面元素查看工具
    • Android Sdk包中的 uiautomateviewer
    • Appium Desktop 中的 Appium Inspector
    2. 定位元素的方法
    2.1 根据ID

    对于安卓应用元素的 resource-id 属性

     
    
    2.2 根据CLASS NAME

    对应安卓应用元素的类型

     
    
    2.3 根据ACCESSIBILITY ID

    元素的 content-desc 属性是用来描述该元素的作用的

     
    
    2.4 根据Xpath

    表达式的语法规则和 Selenium 里面 Xpath 的语法是一样的
    在appium中,xpath表达式中每个节点名是元素的 class 属性值

     
    
    3. 安卓 UIAutomator

    谷歌安卓官方文档

    4. 界面操作
    • driver.click() # 点击

    • driver.tap([(850,1080)],300) # 点按

    • driver.send_keys(string) # 输入

    • driver.swipe(start_x=x, start_y=y1, end_x=x, end_y=y2, duration=800) # 滑动


    特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


    举报收藏 0评论 0
    0相关评论
    相关最新动态
    推荐最新动态
    点击排行
    {
    网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号