文章目录

  • 一、概念和作用
    • 1.1、概念
    • 1.2、常见应用
    • 1.3、特点
    • 1.4、Appium和Selenium
  • 二、安装
    • 2.1、安装Appium客户端库
    • 2.2、安装Appium Desktop
    • 2.3、安装JDK
    • 2.4、安装Android SDK
    • 2.5、环境配置:
    • 2.6、安装验证
  • 三、连接模拟器
    • 3.1、修改模拟器文件
    • 3.2、设置模拟器
    • 3.3、进入开发者模式
    • 3.4、在模拟器中安装软件
  • 四、模拟器连接到Appium
    • 4.1、启动和配置Appium
    • 4.2、Appium界面信息
    • 4.3、uiautomatorviewer
    • 4.4、shell 命令
  • 五、简单的使用示例:哔哩哔哩
    • 5.1、Appium连接
    • 5.2、UI Selector
    • 5.3、Appium标签操作
    • 5.4、滑动操作
    • 5.5、流程控制

一、概念和作用

1.1、概念

appium是一个移动 App (手机应用)自动化工具。支持 iOS 平台和 Android 平台上的原生应用,web应用和混合应用。它允许测试人员在不同的平台(iOS,Android)使用同一套API来写自动化测试脚本,这样大大增加了iOS和Android测试套件间代码的复用性。


1.2、常见应用

  • 自动化任务:微信机器人
  • 爬虫:通过手机自动化,提取信息
  • 自动化测试:自动化测试,提高效率

1.3、特点

  • 支持多个平台:iOS (苹果)、安卓 App 的自动化都支持。
  • 支持跨平台运行:Appium可以用在OSX,Windows以及Linux桌面系统上运行。
  • 支持多种类型的自动化:
    1. 支持 苹果、安卓 应用 原生界面 的自动化
    2. 支持 应用 内嵌 WebView 的自动化
    3. 支持 手机浏览器 中的 web网站自动化
    4. 支持 flutter 应用的自动化
  • 支持多种编程语言:像 Selenium 一样, 可以用多种编程语言调用它,开发自动化程序。
  • 扩展了WebDriver的协议:Appium没有自己重新去实现一套。这样的好处是以前的WebDriver API能够直接被继承过来,以前的 Selenium(WebDriver)各种语言的binding都可以拿来就用。
  • appium选择了Client/Server的设计模式。只要client能够发送http请求给server,那么的话client用什么语言来实现都是可以的,这就是appium及Selenium(WebDriver)如何做到支持多语言的原因;

1.4、Appium和Selenium

appium类库封装了标准Selenium客户端类库,为用户提供所有常见的JSON格式selenium命令以及额外的移动设备控制相关的命令,如多点触控手势和屏幕朝向。

appium客户端类库实现了Mobile JSON Wire Protocol(一个标准协议的官方扩展草稿)和W3C WebDriver spec(一个传输不可预知的自动化协议,该协议定义了MultiAction 接口)的元素。

appium服务端定义了官方协议的扩展,为appium 用户提供了方便的接口来执行各种设备动作,例如在测试过程中安装/卸载App。这就是为什么我们需要appium特定的客户端,而不是通用的Selenium 客户端。当然,appium 客户端类库只是增加了一些功能,而实际上这些功能就是简单的扩展了Selenium 客户端,所以他们仍然可以用来运行通用的Selenium会话。


二、安装

2.1、安装Appium客户端库

指令:

pip install appium-python-client

2.2、安装Appium Desktop

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

网址:http://appium.io/

安装示例:


2.3、安装JDK

JDK官网下载:https://www.oracle.com/java/technologies/javase-downloads.html


2.4、安装Android SDK

注意:现在已经不能单独安装Android SDK了,必须要一起下载谷歌集成好的包,包含了一个比较大的开发Android的IDE,就是Android Studio,而且Android的官方网站不能直接登录了,这里把SDK必须的文件打了一个压缩包,直接解压就可以了。

链接:https://pan.baidu.com/s/1D3aPH5HLc73oaOtqdib4lA
提取码:cgnb


2.5、环境配置:

  1. jdk添加环境变量: JAVA_HOME,指定值为jdk安装目录,比如JAVA_HOME D:\SoftWare\JDK\jdk-16(根据自己的安装目录改变)
  1. jdk,jre配置环境变量Path: %JAVA_HOME%\bin %JAVA_HOME%\jre\bin
  1. 环境变量: ANDROID_HOME ,设置值为sdk包解压目录,比如 D:\SoftWare\Android SDK\androidsdk(根据自己的安装目录改变)
  1. 配置adb环境变量 Path:加入 adb所在目录, d:\tools\androidsdk\platform-tools\(根据自己的安装目录改变)

2.6、安装验证

1、JDK, JRE 安装验证

2、adb 安装验证


三、连接模拟器

这里使用夜神模拟器,网站:https://www.yeshen.com/

注:如果连接的是手机,直接进入“进入开发者模式”步骤进行

3.1、修改模拟器文件

  1. 打开安装目录,进入到bin目录(比如:D:\SoftWare\夜神模拟器\Nox\bin
  2. 把第三节里安装好的Android SDK里的adb.exe文件(比如我的在D:\SoftWare\Android SDK\androidsdk\platform-tools目录下)复制到该目录覆盖掉该目录已存在的adb.exe文件 (因为下载的Android SDK版本可能和模拟器的不一样,无法通过adb控制模拟器,所以最好替换一下文件。)
  3. 删掉该目录的nox_adb.exe文件,再复制一份adb.exe并重命名为nox_adb.exe
  4. 启动模拟器
  5. 进入bin目录打开控制台,执行./nox_adb.exe connect 127.0.0.1:62001,然后执行adb devices -l,看到如下信息就表示成功了

3.2、设置模拟器

3.3、进入开发者模式

1、进入“设置”,点击 “关于平板电脑”–>多次点击“版本号” ,进入开发者模式

2、启用USB调试,点击“开发者模式”–>开启“USB调试”


3.4、在模拟器中安装软件

首先需要保证模拟器已经连接成功,然后通过命令 adb devices -l 查看

安装软件使用命令 adb install [安装包路径] ,路径可以直接把安装包拖进窗口。


四、模拟器连接到Appium

4.1、启动和配置Appium

打开Appium之后直接点击Start Server就可以了

点击右上角放大镜开始配置模拟器信息

可以直接复制下面的JSON数据粘贴到右侧的输入框中,其中系统版本需要自己到模拟器中的关于平板电脑选项中自己查看

{"platformName": "Android","platformVersion": "7.1.2","deviceName": "BieYa"
}

全部信息填写完成后点击Start Session启动将Appium连接至模拟器,这时模拟器中会自动安装一个Appium Settings的软件,Appium通过这个软件控制模拟器的运行。


4.2、Appium界面信息


4.3、uiautomatorviewer

这个工具可以查看APP元素的属性,还提供了一组API,用于构建在用户应用和系统应用上执行交互的界面测试。Appium也封装了这个工具里面的API,所以也可以在Appium中使用这些API来操作模拟器。

参考谷歌安卓官方文档介绍: https://developer.android.google.cn/training/testing/ui-automator

截取手机元素

元素的属性

  • NAF:true 输入框不能输入字符
  • index:表示父节点的第几个子节点
  • resource_id:类似于id
  • text:文本信息
  • class:类似于标签名与class
  • package:包名
  • content-desc:节点描述信息
  • checkable :是否是可选择的
  • checked:是否是已选择的
  • clickable:是否是可点击的
  • enabled:可用状态
  • focusable:是否可以聚焦
  • focused:是否是聚焦状态的
  • scrollable:是否是可滚动的
  • long-clickable:是否可长按
  • bounds:坐标 左上角和右下角

4.4、shell 命令

1、查看app应用名

adb shell  dumpsys activity | findstr mFocusedActivity

adb shell dumpsys activity recents | findstr "intent={"

2、查看输入法内容

adb shell ime list -s

3、从默认的appium输入法切换到搜狗输入法

adb shell ime set io.appium.settings/.UnicodeIME

五、简单的使用示例:哔哩哔哩

5.1、Appium连接

from appium import webdriver
import time
from appium.webdriver.extensions.android.nativekey import AndroidKeydesired_caps = {'platformName': 'Android',         #被测的手机是安卓'platformVersion': '7.1.2',        #手机安卓版本'deviceName': 'BieYa',             #设备名,安卓手机可以随意填写'appPackage': 'tv.danmaku.bili',   #启动APP package名称      shell用查看app应用名'appActivity': '.MainActivityV2',  #启动Activity名称'unicodeKeyboard': True,           #使用自带输入法,输入中文是填true'resetKeyboard': True,             #执行完程序恢复原来输入法  经常来不及执行需要手动恢复'noReset': True,                   #不要重置APP  重要参数 务必填True'newCommandTimeout': 6000,         #固定写'automationName': 'UiAutomator2'
}#连接APPium Server,初始化自动环境 建立连接,根据参数建立连接  安装
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)

5.2、UI Selector

#设置缺省等待时间
driver.implicitly_wait(15)
time.sleep(5)
#UISelector控制手机元素   点击搜索框
# code = 'new UiSelector().text("热门").className("android.widget.TextView")'   #点击 ‘热门’ 标签
code = 'new UiSelector().className("android.widget.TextView")'
ele = driver.find_element_by_android_uiautomator(code)
# ele = driver.find_element_by_xpath('//android.widget.TextView[@content-desc="搜索"]')
ele.click()

5.3、Appium标签操作

#APPium标签操作
time.sleep(3)
#根据id定位搜索位置框,输入 python
search_tag = driver.find_element_by_id('tv.danmaku.bili:id/search_src_text')
search_tag.send_keys('python')
#输入回车键,确定搜索
time.sleep(1)
driver.press_keycode(AndroidKey.ENTER)

5.4、滑动操作

def swipUp(driver, t=800, n=1):'''向上滑动屏幕'''size = driver.get_window_size()x = size['width']*0.5   # x坐标y_start = size['height']*0.75   #起始点y坐标y_end = size['height'] * 0.25   #终点y坐标for i in range(n):driver.swipe(x,y_start,x,y_end,t)

5.5、流程控制

#1、加载所有标签 -滑动  2、判断底部  3、去重
title_list = []  #判断底部  去重
while True:title_tags = driver.find_elements_by_id('tv.danmaku.bili:id/title')title_list_lenght = len(title_list)  #判断底部-起始长度if title_tags:for title_tag in title_tags:content = title_tag.textif content not in title_list: #去重print(content)title_list.append(content)current_length = len(title_list)  #判断底部-结束长度print(' ')if current_length == title_list_lenght:print('到底了....')breakswipUp(driver)  #滑动
print('结束..........')
driver.quit()

结果演示:

爬虫学习笔记(二十一)—— Appium相关推荐

  1. python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法

    python3.4学习笔记(二十一) python实现指定字符串补全空格.前面填充0的方法 Python zfill()方法返回指定长度的字符串,原字符串右对齐,前面填充0. zfill()方法语法: ...

  2. Mr.J-- jQuery学习笔记(二十一)--模拟微博页面

    先看之前的节点操作方法:Mr.J-- jQuery学习笔记(二十)--节点操作方法 Mr.J-- jQuery学习笔记(五)--属性及属性节点 Mr.J-- jQuery学习笔记(十一)--事件委托  ...

  3. kvm虚拟化学习笔记(二十一)之KVM性能优化学习笔记

    本学习笔记系列都是采用CentOS6.x操作系统,KVM虚拟机的管理也是采用virsh方式,网上的很多的文章都基于ubuntu高版本内核下,KVM的一些新的特性支持更好,本文只是记录了CentOS6. ...

  4. 爬虫学习笔记(十一)—— Scrapy框架(六):媒体管道

    一.媒体管道 1.1.媒体管道的特性 媒体管道实现了以下特性: 避免重新下载最近下载的媒体 指定存储位置(文件系统目录,Amazon S3 bucket,谷歌云存储bucket) 图像管道具有一些额外 ...

  5. linux驱动开发学习笔记二十一:异步通知

    一.异步通知简介 我们首先来回顾一下"中断",中断是处理器提供的一种异步机制,我们配置好中断以后就可以让处理器去处理其他的事情了,当中断发生以后会触发我们事先设置好的中断服务函数, ...

  6. opencv学习笔记二十一:使用HSV颜色空间实现颜色识别

    一.颜色空间介绍        RGB 颜色空间是大家最熟悉的颜色空间,即三基色空间,任何一种颜色都可以由该三种 颜色混合而成.然而一般对颜色空间的图像进行有效处理都是在 HSV 空间进行的,HSV( ...

  7. IOS学习笔记二十一(NSDictionary、NSMutableDictionary)

    1.NSDictionary.NSMutableDictionary 可以理解为java里面的map,一个key对应一个value,key不可以重复 NSDictionary不可变,NSMutable ...

  8. java自定义一个timeout,Timeout操作符 RxJava 学习笔记二十一

    timeout用于检测在给定时间内observables没有及时响应.如果指定的时间量没有发出任何项目,则超时会使observables失败并出现TimeoutException. 我们将从debou ...

  9. python网络爬虫学习笔记(十一):Ajax数据爬取

    文章目录 1.基本介绍 2.基本原理 3.实战 有时候我们在用requests抓取页面的时候,得到的结果可能和在浏览器中看到的不一样:在浏览器中可以看到正常显示的页面数据,但是使用requests得到 ...

  10. 立创eda学习笔记二十一:添加、移除泪滴

    在PCB电路板设计中,为了让焊盘更坚固,防止机械制板时焊盘与导线之间断开,常在焊盘和导线之间用铜膜布置一个过渡区,形状像泪滴,故常称做补泪滴(Teardrops). 泪滴的作用 避免电路板受到巨大外力 ...

最新文章

  1. linux网卡设置adsl上网,Linux下设置ADSL自动拨号上网
  2. 关于PHP中Session文件过多的问题
  3. 产业企业和投资机会研究(中小板、创业板) 碧水源(300070)创业板
  4. 图说数据中心新风节能技术
  5. yii mysql语法_yii2 + mysql 常用增删改查操作语法以及事务
  6. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1075:药房管理
  7. SpringNBoot日志配置
  8. Android内存泄漏的检测流程、捕捉以及分析
  9. 最方便的字符设备驱动的写法
  10. 再次思考 classpath 环境变量 等
  11. 大数据技术原理与应用(第八章HBase测试)
  12. 大学计算机第四版蒋加伏ppt,大学计算机基础 普通高等教育十一五 国家级规划教材 教学课件 作者 蒋加伏 王宇 第5章 Powerpoint 2003演示文稿制作基础.ppt...
  13. 氚云 表单前端代码-提交机制
  14. 精易模块保存html文档,易模块文件不存在
  15. Excel绘制CDF图
  16. 计算机视觉 — Harris角点检测
  17. 关于北美信号T1和欧洲信号E1的计算
  18. python全栈工程师薪水_Python工程师薪资待遇是多少?老男孩Python周末班
  19. 笔记整理--Linux守护进程
  20. Android Studio-Didn't find class XXX on path: DexPathList [zip file /data/xxx/base.apk]解决方法

热门文章

  1. pytorch笔记:policy gradient
  2. 机器学习笔记:Adagrad
  3. LeetCode面试刷题技巧-二分查找算法(下):通过 LeetCode 学习二分查找算法-销售价值减少的颜色球
  4. tableau实战系列(十八)-通过可视化实现购物篮关联分析( Market Basket Analysis),关联物品之间的关联关系
  5. 使用matlab调用Oracle数据库
  6. 基于云计算的海量数据挖掘
  7. 大学生能从计算机游戏中受益,2017年6月英语四级作文练习:大学生玩游戏
  8. 深度学习100例 | 第35天:脑肿瘤识别
  9. AI生成手写数字 + 智能卡点切图
  10. numpy.arcsin详解