【0基础学爬虫】爬虫基础之自动化工具 Appium 的使用

7gRzFL.jpg

大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章,为实现从易到难全方位覆盖,特设【0基础学爬虫】专栏,帮助小白快速入门爬虫,本期为自动化工具 Appium 的使用。

概述

自动化测试在测试过程中节约了时间,还能避免包括人为因素造成的测试错误和遗漏。可供选择的自动化测试工具有很多,一些是开源的,而有些则较贵。但是自动化工具无论新旧,都有各自的特点。关于 Android 自动化测试,工具有很多,比如 Robotium、MonkeyRunner、Ronaorex、Appium、Robotium、uiautomator2 等等,本文将对 Appium 做详细讲解。

Appium 的使用

介绍

Appium 是一个开源测试自动化框架,用于原生、 混合和移动 Web 应用程序。它使用 WebDriver 协议驱动 iOS、Android 和 Windows 应用程序。 支持多种语言:支持多种语言,java、python、php、Ruby等等 , Appium 与 Selenium 类似,是一个跨语言的自动化框架,可与任何测试框架结合使用。使开发者能够使用其熟悉的语言编写测试脚本,架构如下:

7gYhuL.jpg

工作流程

  1. appium server 开启 4723 端口,监听客户端的连接,首先我们要开启 appium 服务,即 appium server,默认监听 4723 端口。4723 端口专门和脚本打交道,基于 WebDriver 协议。接下来脚本与 appium server 的通信实际上是一个 HTTP request 请求给 appium server,在请求的 body 中,会以 WebDriver Wire 协议规定的 JSON 格式的字符串来告诉 appium 服务我们希望设备接下来做什么事情;
  2. appium 客户端(测试脚本)基于 Json wire protocol 发送设备信息给 appium server,请求创建 session。其中设备信息放在 desired capabilities 中,包括系统平台,版本,应用等信息(详细介绍参考 App 控件定位)。session 用于保存设备配置信息;
  3. appium server 创建 session id 并返回给 client,作为客户端请求的唯一标识,那么,将测试设备信息告知之后,是不是就可以开始进行测试了呢?答案是:NO。这里又要引入一个名词:session。session 就是一个会话,在 webdriver/appium,你的所有工作永远都是在 session start 后才可以进行的。client 请求创建 1 个 session,在该 session 中通过 http 向 appium server 发送请求,appium server 解析请求,完成相应操作并返回 response;
  4. 开启 bootstrap socket 服务器:appium 在初始化时将中间件 Bootstrap.jar 推送到设备,bootstrap 是 uiautomator 的测试脚本,继承于 UiautomatorTestCase。手机端通过该脚本监听端口 4724,appium server 作为 socket-client 端通过 4724 端口将请求发送给 socket 服务器(bootstrap.jar),然后 bootstrap 将 appium 命令转换成 uiautomator 命令。

安装

jdk 安装

Appium 需要 Java8 以上的开发环境:

官网下载:https://www.oracle.com/java/technologies/downloads/?er=221886#java8

Java downloads。有 3 种系统,Linux,macOS,Windows 自行选择即可,按照默认路径安装即可:

7gR2P6.jpg

配置环境变量(“我的电脑”右键菜单 —-> 属性 —-> 高级 —-> 环境变量 —-> 系统变量 —> 新建):

  • 变量名: JAVA_HOME

    • 值: C:\Program Files (x86)\Java\jdk1.8.0_144
  • 变量名: CALSS_PATH

    • 值: .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

path 变量,编辑添加:

  • 变量名: PATH
    • 值: %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

cmd输入 java -version 如果有版本号输出,那么证明安装成功。

安装 Android SDK

Android SDK 是谷歌提供的 Android 开发工具包,在进行安卓开发的时候,往往需要通过引入工具包来调用安卓原生的 API ,安装方式有俩种,第一种可以通过安装 android studio 开发工具:

https://developer.android.com/

其内部集成了 android-sdk ,或者直接下载 Android SDK:

https://dl.google.com/android/android-sdk_r24.4.1-windows.zip

下载完成后,解压出来:

7gReMc.jpg

然后双击 SDK Manager.exe 安装 sdk tools、sdk plaform-tools、sdk build-tools:

7gY933.jpg

配置环境变量(“我的电脑”右键菜单 —-> 属性 —-> 高级 —-> 环境变量 —-> 系统变量 —> 新建):

  • 变量名: ANDROID_HOME
    • 值: D:\android-sdk-windows

path 变量,编辑添加:

  • 变量名: PATH
    • 值: ;% ANDROID_HOME%\platform-tools;
    • 值: % ANDROID_HOME%\build-tools;
    • 值: % ANDROID_HOME%\tools;

验证 Android SDK 是否安装成功,输入 :adb version /adb 能成功输出内容,即为成功。

安装 Appium

下载地址:https://bitbucket.org/appium/appium.app/downloads/?tab=downloads

7gYlqY.jpg

下载完毕,将 Appium\node_modules.bin 的路径添加到系统变量 path 中 。以上工作全部做完以后,cmd 运行 appium-doctor 进行环境检测,看看 appium 运行所需的环境是不是全部安装完毕,运行结果如下,证明我们安装成功:

7gY7DH.jpg

Appium-windows 可视化平台安装

Appium-windows 是 windows 桌面应用的自动化测试方案的必要组成部分,是 win 桌面应用 UI 自动化的最佳选择:

下载地址:https://github.com/appium/appium-desktop/releases/tag/v1.15.1

根据不同的操作系统来选择适合自己的进行下载:

7gYEMZ.jpg

打开我们安装好的软件,选择 Edit Config:

7gYHg7.jpg

进去以后看我们俩个选择是否有内容,如果默认有内容那么证明我们的环境变量已经配好:

7gY8DJ.jpg

Appium-Python-Client 安装
  1. 通过源文件安装,解压到指定目录, 运行 python setup.py install 进行安装:

    下载地址:https://pypi.org/project/Appium-Python-Client/

  2. 直接通过 pip install Appium-Python-Clientpip3 install Appium-Python-Client 进行安装。

安装完成后,我们即可通过编写 Python 代码来实现自动化的测试。

Appium 实战测试

经过上面的操作,我们已经将所有必须的的环境都已经装好,我们使用官方提供的测试 app 来进行测试:

下载地址:https://github.com/appium/android-apidemos/releases/tag/v3.1.0

下载以后我们将 app 安装到手机或者真机,命令为:

adb install ApiDemos-debug.apk

启动 Appium

在安装完毕以后,我们启动 Appium , host 和 port 默认的即可,单击 start 启动:

7gYbZV.jpg

出现下图以上提示,即为启动成功,端口默认为 4723,在此窗口将会一直显示 appium serve 的运行日志:

7gYKRI.jpg

移动设备/模拟器连接电脑

将真机/模拟器通过 USB 设线连接电脑,命令行输入 adb devices,如果输出以下提示,则我们的移动设备连接成功:

$ adb devices
List of devices attached
FA77D0303724          device

这里我们的设备就与电脑连接成功了。

测试脚本编写

启动成功以后,我们可以看见可以通过左侧快速定位:

7gYVJb.jpg

同时还可以通过设置点击等事件生成多种语言的测试代码:

7gYAAt.jpg

app 测试代码如下:

from appium import webdriverclass TestApidemos:def setup(self):desired_caps = {'platformName': 'Android','platformVersion': '9','deviceName': 'emulator-5554','appPackage': 'io.appium.android.apis','appActivity': '.ApiDemos','automationName': 'Uiautomator2','newCommandTimeout': 3000}self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)self.driver.implicitly_wait(5)def teardown(self):self.driver.quit()def test_appium(self):elem = self.driver.find_element_by_xpath('//*[@text="App"]')elem.click()Alarm_exist = self.driver.find_element_by_xpath('//*[@text="Alarm"]').is_displayed()assert Alarm_exist == Trueif __name__ == "__main__":test = TestApidemos()try:test.setup()test.test_appium()print("测试通过")except AssertionError:print("测试失败")finally:test.teardown()

desired_caps 参数获取

appPackage 与 appActivity 获取方法:

adb shell dumpsys activity activities | find "mFocusedActivity"

deviceName 获取方法:

adb devices

platformVersion 获取方法:

adb shell getprop ro.build.version.release

也可以使用 pytest 来测试:

pytest test_apidemos.py::TestApidemos::test_appium

总结

Appium 是一个开源的跨平台移动应用自动化测试工具,用于测试原生、混合和移动 Web 应用程序。 APP上面的测试逐渐的流行起来。而作为 APP 自动化测试中最常用的框架就是 Appium。Appium 是一个开源、跨平台的测试框架。可以用来测试原生及混合的移动端应用!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/30704.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS 5(CentOS 6、Redhat 6)服务器配置VNC

一、配置服务器yum源 yum源(本地、华为云、阿里云、网易) 二、使用yum安装vnc服务 1、检查系统是否安装了vnc 和 vncserver, rpm -qa | grep vnc如果没有安装那就行自行下载安装(我这里用yum安装了,vncserver安装需…

设计程序,实现高精度圆周率的计算和存储,使用线性表突破程序设计语言内置变量的数值和有效数字范围限制

一、使用线性表突破程序设计语言内置变量的数值和有效数字范围的限制,为了实现高精度圆周率的计算,先根据数学公式进行对PI高精度运算,如图1-1。根据这个数学公式 π2 0nn!2n1‼ 即 Rn1Rn*n2n1,R11,sum π2* n1∞Rn 来…

Redis学习|Redis基础知识、Redis五大数据类型、Redis三种特殊数据类型、Redis事务

Redis基础知识 redis默认有16个数据库,并且这个数量可以在conf配置文件中更改 默认使用的是第0个 可以使用 select 进行切换数据库! key *查看数据库所有的key 清除当前数据库 flushdb 清除全部数据库的内容FLUSHALL 为什么redis是6379!(了解一下即可!) Redis 是…

【算法】Graham 凸包扫描算法 ( 凸包概念 | 常用的凸包算法 | 角排序 | 叉积 | Python 代码示例 )

文章目录 一、Graham 凸包扫描算法1、凸包概念2、常用的凸包算法3、Graham 凸包扫描算法 二、Graham 算法前置知识点1、角排序2、叉积3、算法过程分析 三、代码示例1、完整代码示例2、执行结果 使用 Graham 算法绘制的凸包效果 : 博客代码下载 : https://download.csdn.net/d…

大模型之-Seq2Seq介绍

大模型之-Seq2Seq介绍 1. Seq2Seq 模型概述 Seq2Seq(Sequence to Sequence)模型是一种用于处理序列数据的深度学习模型,常用于机器翻译、文本摘要和对话系统等任务。它的核心思想是将一个输入序列转换成一个输出序列。 Seq2Seq模型由两个主…

企业微信,机器人定时提醒

场景: 每天定时发送文字,提醒群成员事情,可以用机器人代替 人工提醒。 1)在企业微信,创建机器人 2)在腾讯轻联,创建流程,选择定时任务,执行操作(企业微信机…

未登录也能知道你是谁?浏览器指纹了解一下!

引言 大多数人都遇到过这种场景,我在某个网站上浏览过的信息,但我并未登录,可是到了另一个网站发现被推送了类似的广告,这是为什么呢? 本文将介绍一种浏览器指纹的概念,以及如何利用它来判断浏览者身份。…

FIddler+Proxifer 实现PC客户端抓包详细教程

文章目录 前言1、Proxifer下载和配置1.1、下载Proxifer1.2、Proxifier配置 2、FIddler下载和配置2.1、FIddler下载2.2、FIddler配置 3、三、为什么抓不到有些应用程序的HTTP(s)的包? 前言 一般在浏览器场景下,我们可以利用Fiddler很好的完成抓包&#x…

计算机网络学习3

文章目录 以太网的MAC帧格式虚拟局域网VLAN概述虚拟局域网VLAN的实现机制以太网的发展802.11无线局域网的组成无线局域网的物理层无线局域网的数据链路层---使用CSMA/CD协议802.11无线局域网的MAC帧 网络层网络层概述网际协议IP和4.2.1异构网络互联IPv4地址及其编址方法概述IPv…

webpack处理样式资源04--webpack入门学习

处理样式资源 本章节学习使用 Webpack 如何处理 Css、Less、Sass、Scss、Styl 样式资源 介绍 Webpack 本身是不能识别样式资源的,所以我们需要借助 Loader 来帮助 Webpack 解析样式资源 我们找 Loader 都应该去官方文档中找到对应的 Loader,然后使用…

osgearth提示“simple.earth: file not handled”

在用vcpkg编译完osg和osgearth后,为了验证osgearth编译是否正确,进行测试,模型加载代码如下: root->addChild(osgDB::readNodeFile("simple.earth")); 此时以为是simple.earth路径的问题,遂改为以下代码…

Kithara实时定时器

管理定时器和实时定时器 目录 管理定时器和实时定时器管理时间数据通用定时器编程初始化计时器删除计时器停止/启动/调整定时器备注RealTimer 备注项目实例项目结构项目源码 示例更多: 管理时间数据 在 Kithara RealTime Suite 中,所有时间值均以 100 ns…

Pikachu靶场--文件上传

参考借鉴 Pikachu靶场之文件上传漏洞详解_皮卡丘文件上传漏洞-CSDN博客 文件上传漏洞&#xff1a;pikachu靶场中的文件上传漏洞通关_pikachu文件上传通关-CSDN博客 client check 在桌面新建一个文件夹&#xff0c;准备一个hello.php文件&#xff0c;文件写入如下代码 <?p…

产品3D模型在线展示

产品3D模型可以向潜在客户提供360度的观察角度&#xff0c;比平面图形的效果更好。快速实现产品3D模型的在线展示最简单的方法是使用老子云3D可视老子云3D可视化的模型内嵌特性&#xff0c;无需任何开发工作&#xff0c;5分钟就可以完成&#xff1a; 老子云的模型内嵌功能&…

[YOLOv10:注意力机制的轻量化创新,MLCA在目标检测中的卓越表现]

本文改进:一种轻量级的Mixed Local Channel Attention (MLCA)模块,该模块考虑通道信息和空间信息,并结合局部信息和全局信息以提高网络的表达效果。 1.YOLOv10介绍 论文:[https://arxiv.org/pdf/2405.14458] 代码: https://gitcode.com/THU-MIG/yolov10?utm_source=csdn…

二叉树的基础讲解

二叉树在遍历&#xff0c;查找&#xff0c;增删的效率上面都很高&#xff0c;是数据结构中很重要的&#xff0c;下面我们来基础的认识一下。(高级的本人还没学&#xff0c;下面的代码用伪代码或C语言写的)我会从树&#xff0c;树的一些专有名词&#xff0c;树的遍历&#xff0c…

ROM以及ROM与RAM对比

1.ROM ROM最原始的定义是“只读存储器”&#xff0c;一旦写入原始信息则不能更改。所以ROM通常用来存放固定不变的程序、常数和汉字字库&#xff0c;甚至用于操作系统的固化。它与随机存储器可共同作为主存的一部分&#xff0c;统一构成主存的地址域。 现在已经发展出了很多R…

《模拟联合国2.9—团队协作》

感谢上海财经大学持续的邀请&#xff0c;今天在阶梯教室举办的《模拟联合国2.0—团队协作》沙盘课程圆满结束。尽管场地的限制带来了一定的挑战&#xff0c;但得益于系统思考中“结构影响行为”的原则&#xff0c;我得以在不同场景中巧妙设计课程结构&#xff0c;极大地促进了大…

云顶森林的新守护者:大数据平台的智慧力量

在遥远的云顶之上&#xff0c;有一片生机盎然的森林&#xff0c;它不仅是动植物的家园&#xff0c;更是自然与人类和谐共生的典范。然而&#xff0c;如何在这片广袤的森林中实施高效、科学的管理&#xff0c;一直是一个摆在管理者面前的难题。幸运的是&#xff0c;随着科技的飞…

jQuery 样式操作

3.tab栏切换案例 实现效果&#xff1a; 案例分析&#xff1a; 核心代码&#xff1a; html结构&#xff1a; 4.jQuery类操作与className区别 1.操作css方法 jQuery可以使用Css方法来修改简单元素样式;可以操作类,修改多个样式。 参数只写属性名&#xff0c;则是返回属性值…