**

Appium 用途和特点

**

Appium 是一个移动 App (手机应用)自动化工具。

手机APP 自动化有什么用?

自动化完成一些重复性的任务

比如微信客服机器人

爬虫

就是通过手机自动化爬取信息。

为什么不通过网页、HTTP 爬取呢?有的系统没有网页,也不方便通过HTTP爬取

自动化测试

很多企业里面有这样的需求

  • Appium 自动化方案的特点:

开源免费

支持多个平台

iOS (苹果)、安卓 App 的自动化都支持。

支持多种类型的自动化

支持 苹果、安卓 应用 原生界面 的自动化

支持 应用 内嵌 WebView 的自动化

支持 手机浏览器 中的 web网站自动化

支持 flutter 应用的自动化

支持多种编程语言

像 Selenium 一样, 可以用多种编程语言 调用它 开发自动化程序。

自动化原理
我们先来看一下Appium自动化的原理图

这图是不是很眼熟?

对啦,和Selenium 原理图很像。因为 Appium自动化架构就是借鉴的Selenium。

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

自动化程序

自动化程序是由我们来开发的,实现具体的 手机自动化 功能。

要发出具体的指令控制手机,也需要使用 客户端库。

和Selenium一样,Appium 组织 也提供了多种编程语言的客户端库,包括 java,python,js, ruby等,方便不同编程语言的开发者使用。

我们需要安装好客户端库,调用这些库,就可以发出自动化指令给手机。

Appium Server

Appium Server 是 Appium 组织开发的程序,它负责管理手机自动化环境,并且转发 自动化程序的控制指令 给 手机,并且转发 手机给 自动化程序的响应消息。

手机设备

我们这里说的手机设备,其实不仅仅是手机,包括所有 苹果、安卓的移动设备,比如:手机、平板、智能手表等。

为了直观方便的讲解,这里我们简称: 手机

当然手机上也包含了 我们要自动化控制的 手机应用APP。

手机设备为什么能 接收并且处理自动化指令呢?

因为,Appium Server 会在手机上 安装一个 自动化代理程序, 代理程序会等待自动化指令,并且执行自动化指令

比如:要模拟用户点击界面按钮,Appium 自动化系统的流程是这样的:

自动化程序 调用客户端库相应的函数, 发送 点击元素 的指令(封装在HTTP消息里)给 Appium Server

Appium Server 再转发这个指令给 手机上的自动化代理

手机上的自动化代理 接收到 指令后,调用手机平台的自动化库,执行点击操作,返回点击成功的结果给 Appium Server

Appium Server 转发给 自动化程序

自动化程序了解到本操作成功后,继续后面的自动化流程

其中,自动化代理控制,使用的什么库来实现自动化的呢?

如果测试的是安卓手机,用的是安卓的 UIAutomator 框架 (Android4.2以后)

这些自动化框架提供了在手机设备上运行的库,可以让程序调用这些库,像人一样自动化操控设备和APP,比如:点击、滑动,模拟各种按键消息等。

自动化环境搭建

环境搭建需要下载安装不少软件,而且还有不少是国外网站下载的。

安装client编程库
根据原理图, 我们知道自动化程序需要调用客户端库和 Appium Server 进行通信。

因为我们介绍Python语言开发,所以当然是用pip安装,如下

pip install appium-python-client
安装Appium Server
Appium Server 是用 nodejs 运行的,基于js开发出来的。

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

安装JDK
必须要安装安卓SDK(后面会讲到),而安卓SDK需要 JDK 环境。

安装好之后,还需要添加一个环境变量 JAVA_HOME ,指定 值 为 jdk安装目录,比如

JAVA_HOME d:\tools\java\jdk1.8.0_211

安装 Android SDK
对于安卓APP的自动化,Appium Server 是需要 Android SDK的。

因为要用到里面的一些工具,比如 要执行命令设置手机、传送文件、安装应用、查看手机界面等。

另外,还推荐大家配置环境变量 PATH ,加入 adb所在目录, d:\tools\androidsdk\platform-tools\

注意:是 添加 该目录到环境变量PATH中, !!!不是替换!!! ,否则会导致系统命令都找不到的严重后果。
连接手机
上述的软件环境都准备好以后,要自动化手机APP,需要:

在你运行程序的电脑上 用 USB线 连接上 你的安卓手机

进入 手机设置 -> 关于手机 ,不断点击 版本号 菜单(7次以上),

退出到上级菜单,在开发者模式中,启动USB调试

如果手机连接USB线后,手机界面弹出 类似 如下提示。

选择 允许USB调试。

注意:

有的手机系统,可能需要一些额外的选项需要设置好。

比如,有的手机,开发者选项里 需要打开 允许通过USB安装应用 等。

总之,给USB开发调试 尽可能方便的控制手机。

连接好以后,打开命令行窗口, 执行 adb devices -l 命令来列出连接在电脑上的安卓设备。

如果输出 类似如下的内容:

List of devices attached
4d0035dc767a50bb        device product:t03gxx model:GT_N7100 device:t03g

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

**

代码

**

下面是一段使用 Appium 自动化的打开 B站 应用,搜索‘李云龙’,并且打印视频标题的示例。

from appium import webdriver
from appium.webdriver.extensions.android.nativekey import AndroidKey
desired_caps = {'platformName': 'Android', # 被测手机是安卓'platformVersion': '8', # 手机安卓版本'deviceName': 'xxx', # 设备名,安卓手机可以随意填写'appPackage': 'tv.danmaku.bili', # 启动APP Package名称'appActivity': '.ui.splash.SplashActivity', # 启动Activity名称'unicodeKeyboard': True, # 使用自带输入法,输入中文时填True'resetKeyboard': True, # 执行完程序恢复原来输入法'noReset': True,       # 不要重置App'newCommandTimeout': 6000,'automationName' : 'UiAutomator2'# 'app': r'd:\apk\bili.apk',
}

连接Appium Server,初始化自动化环境

driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

设置缺省等待时间

driver.implicitly_wait(5)

如果有青少年保护界面,点击我知道了

**

iknow = driver.find_elements_by_id("text3")
if iknow:iknow.click()

**

根据id定位搜索位置框,点击

driver.find_element_by_id("expand_search").click()

# 根据id定位搜索输入框,点击

sbox = driver.find_element_by_id('search_src_text')
sbox.send_keys('李云龙')

# 输入回车键,确定搜索
driver.press_keycode(AndroidKey.ENTER)

# 选择(定位)所有视频标题

eles = driver.find_elements_by_id("title")for ele in eles:# 打印标题print(ele.text)input('**** Press to quit..')
driver.quit()

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

Appium爬虫小案例相关推荐

  1. Java网络爬虫小案例(详细版)

    有bug:修改了<scope>test</scope>后,在控制台还是不能显示日志信息,没找到解决办法 配置了log4j.properties,控制台没有显示日志信息_连胜是我 ...

  2. 爬虫小案例-爬取当当网TOP500的图书并将数据存入数据库

    在这里分享一个刚刚学习爬虫时自己做的一个小案例,爬取了当当网TOP500的图书信息,包括图书名称.作者名称和出版社的名称. 1.分析网页 url:http://bang.dangdang.com/bo ...

  3. 简易的Java网络爬虫小案例(二):获取b站视频的详细点赞、收藏和硬币数

    Java爬虫案例之获取视频详细点赞.收藏等参数 最近是b站的11周年庆,相信不少朋友也看过了这个特映视频<喜相逢>了吧?看完视频给个三连支持,衷心祝愿小破站越来越好!不过在长按完大拇指后, ...

  4. 爬虫小案例:基于Bing关键词批量下载图片(第二版)

    一.需求: 基于Bing网站,输入关键词,批量下载图片保存到本地 二.代码展示: import requests from lxml import etree import os from multi ...

  5. ajax爬虫小案例(百度翻译)

    一.爬虫分析的三个步骤 第一步:右键"查看网页源代码",查找[Ctrl+F]需要的数据(复制整个url或者是复制id的具体内容) 第二步:分析网页ajax异步加载可能性 第三步:j ...

  6. python爬虫小案例_从豆瓣爬取《哪吒之魔童降世》的剧照

    一.在豆瓣电影网爬取以下剧照保存到本地: 本次案例只爬取前 5 页的剧照,先获取前五页的链接: for i in range(5):url = 'https://movie.douban.com/su ...

  7. 爬虫小案例:基于Bing关键词批量下载图片

    一.需求: 基于Bing网站,输入关键词,批量下载图片保存到本地 二.演示: 三.直接上代码 import os import urllib.request import urllib.parse f ...

  8. 爬虫小案例之爬取京东商品链接

    观察URL翻页的变化 爬取页面URL如下 base_url='https://search.jd.com/Search?keyword='+keyword     for x in range(1,n ...

  9. 爬虫小案例 爬取笑话 xpath

    import requests from lxml import etree# 写入文件 def write_file(art):with open("笑话.txt", " ...

最新文章

  1. maven中snapshot版本和正式版本的区别
  2. vs2010 qt中文乱码 最终版
  3. Django路由系统
  4. Hello Blazor:(2)集成Tailwind CSS
  5. [SpringSecurity]web权限方案_自动登陆_原理分析和具体实现
  6. 16、mysql中函数的创建和使用
  7. 解决Django静态文件配置pycharm高光问题
  8. 学C/C++不能不知道的硬知识
  9. easyexcel多个sheet导入_Easypoi实现excel多sheet表导入导出功能
  10. 使用u盘安装linux操作系统原理
  11. ENVI大气校正后遥感图像颜色变了及编辑头文件
  12. PPT批量导入文字(Python实现)
  13. 112家IT网络公司薪水一览表
  14. GreenDao的简单学习(附带demo源码)
  15. python基础专栏⑤-手机编写python篇-qpython开发python
  16. 不只是coding_不只是外表
  17. C++学习——布尔型,操作符别名,函数和引用
  18. node.js 后台代码怎么部署到服务器上?
  19. 远离喧嚣,拥抱自然,洗尽铅华
  20. Linux下DES安全通信编程

热门文章

  1. hadoop是什么语言
  2. XML中的standalone什么意思?
  3. 如何用html5实现网页聊天,HTML5 WebSocket实现点对点聊天的示例代码
  4. Linux基线检查( 一)
  5. C#项目之 GMap.net 标记点及 绘制多点之间的距离
  6. 如何看待996的工作模式
  7. 越狱后,提取设备安装的iPA包 trollstore免越狱安装
  8. #1163 : 博弈游戏·Nim游戏(数学博弈)
  9. 指向 类成员函数 的 函数指针
  10. mod_security简要安装设置指南