自动化测试 - Appium + Python史上最全最简环境搭建步骤

2023-10-26

一,为什么是Appium

借一张图:


1.1 Appium优点

l  开源

l  跨架构:NativeApp、Hybird App、Web App

l  跨设备:Android、iOS、Firefox OS

l  不依赖源码

l  使用任何WebDriver 兼容的语言来编写测试用例。比如 Java, Objective-C, JavaScript with Node.js, PHP, Python, Ruby, C#, Clojure, 或者 Perl.

l  不需要重新编译APP

 

1.2 Appium理念

l  你无需为了自动化,而重新编译或者修改你的应用。

l  你不必局限于某种语言或者框架来写和运行测试脚本。

l  一个移动自动化的框架不应该在接口上重复造轮子。(WebDriver)

l  无论是精神上,还是名义上,都必须开源。

 

1.3 Appium架构

借一张图:


iOS: 苹果的UIAutomation
Android 4.2+: Google的UiAutomator
Android 2.3+: Google’s Instrumentation. (由单独的项目Selendroid提供支持 )

Appium 1.6版本以上增加了UiAutomator2

为了满足上面跨平台,把这些三方框架封装成一套API —— WebDriver Api(客户端到服务端的协议)

事实上 WebDriver 已经成为 web 浏览器自动化的标准,也成了 W3C 的标准 —— W3CWorking Draft,所以Appium在原有基础上扩充了移动自动化相关的API。

投资 WebDriver 意味着你可以押宝在一个已经成为标准的独立,自由和开放的协议。你不会被任何专利限制。

核心架构:Appium使用C/S架构,运行时候Service端会监听Client端发送的命令,接着在移动设备上执行这些命令,然后将执行结果放在 HTTP 响应中返还给客户端。

 

基于这架构可以做什么?

可以用任何实现了该客户端的语言来写测试代码

可以把服务端放在不同的机器上

可以只写测试代码,然后利用类似Testin 云服务解决方案来解释命令.

 

二,Appium环境搭建

需要用到的软件如下:

1. jdk-8u121-window(32位的就下载32位的,64位的就下载64位的)。

2.Android-sdk_r24.3.4-windows(下载这个adt-bundle-windows-x86-20140624)

3.Python:(V3.6也可以)

4.appium:1.4.13.1

5.Node.js:node-v4.4.7-x64

6.Appium-python-Client

7.pycharm

其中1-5是可以先下载的,6则需要在完成前面的五个步骤后才进行,7为可选Ide工具。

2.1 JDK

下载好jdk直接点下一步就可以了,然后开始配置变量,参考如下路径:http://jingyan.baidu.com/article/d45ad148ba5ab169552b80d3.html

 注意:

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

path值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin

.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;是有“.”这个符号的不能漏掉

按快捷键win+r,在运行内输入cmd,并输入Java,回车,如果出来的是些用法中文,那说明这是正确的,在接下来输入javac,回车,如果出现些用法中文,说明是环境变量配好了。

 

2.2 下载SDK

http://www.androiddevtools.cn/

直接下载adt/Android studio完美集成,下载好后并进行解压,然后开始配置三个变量:

1.解压adt集成包到合适的路径下面,比如D:\adt\

2.设置安卓环境变量

配置环境变量,

设置ANDROID_HOME系统变量为你的android SDK路径,并把tools和platform-tools两个目录加入到系统的Path路径里。

eg:添加变量名:ANDROID_HOME 变量值: D:\adt\sdk

并把这句添加到 %ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools记得要加上";"

配置完环境后,可以在运行cmd后输入 adb(能看到当前版本号),再输入android-h(tools目录下的,如果出来一堆文字则是可以的) 

 

2.3 安装python

进入官网或百度下载python下载好后安装到所需安装路径,如在D盘中新建一个python文件夹,如d:\python34

安装完成后将D:\python和D:\python\Scripts,添加到环境变量path下

打开cmd输入python,出现版本号,然后输入print("helloworld!")这样python就是安装好了。

 

2.4 安装node.js

进入官网地址并下载:https://nodejs.org/en/download/

下载后一路傻瓜式安装,安装完成后,运行cmd,输入node –v查看版本号,然后输入npm 

 

2.5 安装appium服务端

方法一:进入官网地址并下载

https://bitbucket.org/appium/appium.app/downloads/

完整安装带UI的appium,可以从官网直接下载dmg(mac)或者zip(Windows),运行里面的app即可。

appium安装好后:

找到这个文件安装目录D:\appium\node_modules\.bin

将上面的地址添加到环境变量path下;

 

方法二:node.js包管理安装

npm install -g appium

appium –v

npm install -g appium-doctor

appium-doctor

命令安装的appium是控制台程序,没有UI界面。可到github搜索appium的appiumDesktop项目中下载最新版本

但是由于GFW关系,此方法会在安装过程中卡住或是直接报错,解决办法:挂VPN代理FQ;为了满足国内开发人员的需要,淘宝npm镜像cnpmjs.org可替代官方版本。打开输入:

 

npm install -g appium --registry=https://registry.npm.taobao.org
   
   

方法三:百度pan

直接下载appium的GUI界面安装包,下载地址:https://pan.baidu.com/s/1jGvAISu#list/path=%2F,Windows最新版本是AppiumForWindows_1.4.16.1.zip,MacOS最新版本是appium-1.5.3.dmg。笔者以windows为例,下载的AppiumForWindows_1.4.16.1.zip 进行解压安装,启动appium,弹出错误提示框

很容易在网上查到错误原因,因为node.js需要.NETFramework框架的支持,所以在这里需要安装net framework4.5。当.net framework 4.5安装完成,再次启动Appium,

 

打开appium

 

appium安装好后:

找到这个文件安装目录D:\appium\node_modules\.bin

将上面的地址添加到环境变量path下;

 

Tips:检查appium的所有需求环境

npm install -g appium-doctor

appium-doctor

打开cmd,输入appium-doctor,检查环境是否OK,出现allchecks were successful,说明环境OK;

 

2.6 安装Appium-Python-Client

进入cmd 输入:pip install Appium-Python-Client。通过Python安装等待安装完成。

如果从官方的资源库下载Appium-Python-Client失败,请自行更换下载源重新下载。在命令行输入"pip install Appium-Python-Client -ihttp://pypi.douban.com/simple"重试 

 

Tips:检查selenium版本3.3.3

安装 Appium-Python-Client 的同时会安装一个selenium模块.试着进入python3交互命令行,然后执行下面命令:

import selenium

selenium.__version__

 

如果你显示的 selenium 版本是当前最新版本3.3.3的话,那么最好使用下面命令将版本装成3.0.2,网传某些Api的话会报错。

pip3 install -I selenium==3.0.2

 

2.7 安装pycharm

安装流程参考:http://www.jianshu.com/p/042324342bf4

需要激活可以购买正版或网上搜索激活码。

 

三,简单自动化测试用例编写

3.1 新建Python unit test文件

新建Python unit test类型文件,对test类补充setup及teardown函数

对类MyTestCase添加setUp函数(这是测试用例执行前的准备动作,负责告诉appium监听那个端口、与那个手机连接、安装那个应用等信息)

 

对类MyTestCase添加TearDown函数(这是测试用例执行结束后的动作,可以执行保存执行结果等操作)

 

3.2 编写测试用例

简单实例点位两个控件,执行点击事件

# MyTestCase.py


   
   
  1. #!/usr/bin/env python
  2. # _*_ coding:utf-8 _*_
  3. import unittest
  4. import selenium
  5. import time
  6. from appium import webdriver
  7. class MyTestCase(unittest.TestCase):
  8. @classmethod
  9. def setUp(self):
  10. # super().setUp()
  11. print( 'selenium version = ', selenium.__version__)
  12. desired_caps = {}
  13. desired_caps[ 'platformName'] = 'Android'
  14. desired_caps[ 'platformVersion'] = '4.4'
  15. desired_caps[ 'deviceName'] = '192.168.1.54:5555'
  16. desired_caps[ 'appPackage'] = 'com. xx'
  17. #desired_caps['app'] = 'F:// debug.apk'
  18. desired_caps[ 'appActivity'] = 'com.xx.MainActivity'
  19. self.driver = webdriver.Remote( 'http://localhost:4723/wd/hub', desired_caps)
  20. def test_something(self):
  21. print( 'test_something click ------ ')
  22. # xpath:
  23. time.sleep( 2)
  24. self.driver.find_element_by_xpath( "//android.widget.ListView/android.widget.TextView[contains(@text,'测试')]").click()
  25. # uiautomator -UiSelector:
  26. # name方式在1.5版本后已废除,能找到接口,不可使用,使用new UiSelector().text替代
  27. # self.driver.find_element_by_android_uiautomator("newUiSelector().text(\"测试\")").click()
  28. # class_name - child:
  29. # items =self.driver.find_elements_by_class_name('android.widget.TextView')
  30. # items[1].click()
  31. # id:
  32. time.sleep( 2)
  33. self.driver.find_element_by_id( 'com.hisense.vod:id/test_video_resize').click()
  34. @classmethod
  35. def tearDown(self):
  36. time.sleep( 5)
  37. print( 'tearDown ------ ')
  38. self.driver.quit()
  39. if __name__ == '__main__':
  40. unittest.main()

四,踩坑

1 selenium版本3.3.3兼容性

安装 Appium-Python-Client 的同时会安装一个selenium模块.试着进入python3交互命令行,然后执行下面命令:

import selenium

selenium.__version__

结果


如果你显示的 selenium 版本是当前最新版本3.3.3的话,那么最好使用下面命令将版本装成3.0.2

pip3 install -I selenium==3.0.2

否则的话,在使用Appium-Python-Client的某些Api的话会报错.应该是版本兼容性的问题,3.11已修复的。

2 findElementByName无效.

Searching by name was deprecated over ayear ago and removed from 1.5. In general, searching by accessibility id isbetter for a variety of reasons.

如上findElementByName这个方法从Appium 1.5之后删除了,但是API不经能找到并且也没提示过时,这不坑爹嘛。后来使用下面的代码才解决用name,即text查找元素的方法。

java:

1

2

String query = "new UiSelector().textContains" + "(\"" + locator.value + "\")";

webElements = mDriver.findElementsByAndroidUIAutomator (query);

Python:

self.driver.find_element_by_android_uiautomator("newUiSelector().text(\"测试\")").click()
   
   

3 据说Appium 1.6.3可以查找 Toast 的信息了.

试了下网上的例子发现不好使,一度以为是Client版本的问题。搞了半天才发现需要加下面的代码:

java:

1

capabilities.setCapability (MobileCapabilityType.AUTOMATION_NAME, AutomationName.ANDROID_UIAUTOMATOR2);

4 安装的时候重新签名

无意中发现测试的时候弹Toast报错,然后直接编译安装却不保存,猜测是不是在安装过程中Appium改了啥,看了下Service日志,竟然在安装的时候重新签名…

App not signed with debug cert.

2017-02-13 18:17:19:848 - info: [debug] [ADB] Resigning apk.

2017-02-13 18:17:23:938 - info: [debug] [ADB] Zip-aligning 'app-debug.apk'

2017-02-13 18:17:24:104 - info: [AndroidDriver] Remote apk path is /data/local/tmp/463eb03788048b4a1dacfe28545ee76e.apk

解决方法:

java:

capabilities.setCapability(AndroidMobileCapabilityType.NO_SIGN, true);

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自动化测试 - Appium + Python史上最全最简环境搭建步骤 的相关文章

  • 软件测试|Python openpyxl库使用指南

    简介 我们之前介绍过 python在自动化办公方面可以大放异彩 因为Python有许多的第三方库 其中有很多库就支持我们对office软件进行操作 熟练的使用Python对office进行操作 可以实现自动化办公 极大提升我们的工作效率 本
  • Selenium小技巧!

    Chrome DevTools 简介 Chrome DevTools 是一组直接内置在基于 Chromium 的浏览器 如 Chrome Opera 和 Microsoft Edge 中的工具 用于帮助开发人员调试和研究网站 借助 Chro
  • Locust负载测试工具实操

    本中介绍如何使用Locust为开发的服务 网站执行负载测试 Locust 是一个开源负载测试工具 可以通过 Python 代码构造来定义用户行为 避免混乱的 UI 和臃肿的 XML 配置 步骤 设置Locust 在简单的 HTTP 服务上模
  • Jenkins 插件下载速度慢、安装失败了!我教你怎么解决!

    Jenkins部署完毕 如果不安装插件的话 那它就是一个光杆司令 啥事也做不了 所以首先要登陆管理员账号然后点击系统管理再点击右边的插件管理安装CI CD必要插件 但是问题来了 jenkins下载插件速度非常慢 而且经常提示下载插件失败 真
  • Jmeter 性能-并发量计算

    并发概念 指网站在同一时间访问的人数 人数越大瞬间带宽要求更高 服务器并发量分为 业务并发用户数 最大并发访问数 系统用户数 同时在线用户数 估算业务并发量的公式 C nL T C C 3 C的平方根 说明 C是平均的业务并发用户数 n是l
  • 基于Loadrunner的性能分析及调优经验分享

    公司某个系统的微信端计划将开放给几百上千的人员登录查询 并且登录账号为同一账号多人使用 后台服务能够支撑起多用户的并发操作以及成百上千人登录微信端对生产数据库或者登录查询的性能效率高成为交付可靠生产环境的必要条件 因此 项目组决定提交测试
  • 软件测试|SQLAlchemy环境安装与基础使用

    简介 SQLAlchemy 是一个强大的 Python 库 用于与关系型数据库进行交互 它提供了高度抽象的对象关系映射 ORM 工具 允许使用 Python 对象来操作数据库 而不必编写原生SQL查询 本文将介绍如何安装 SQLAlchem
  • 软件测试|Selenium StaleElementReferenceException 异常分析与解决

    简介 Selenium 是一个流行的自动化测试工具 用于模拟用户与网页交互 然而 当我们在使用 Selenium 时 可能会遇到一个常见的异常 即 StaleElementReferenceException 这个异常通常在我们尝试与网页上
  • 软件测试|Pydantic处理时间类型数据

    简介 我们之前介绍过使用 pydantic 验证数据 比如校验数据的格式等 但是在我们的日常工作中 还有一种数据是需要我们验证的 比如时间数据 时间数据不同于字符串 列表等数据 与他们的验证不一样 本文就来为大家介绍一下 pydantic
  • Python常用的自动化小脚本!

    一 list转json string转json 可以使用Python内置的 json 模块将列表 List 和字符串 String 转换成JSON格式 List转JSON假设我们有一个列表 List my list apple banana
  • 外包干了2个月,技术倒退2年。。。

    先说一下自己的情况 本科生 20年通过校招进入深圳某软件公司 干了接近4年的 功能测试 今年国庆 感觉自己不能够在这样下去了 长时间呆在一个舒适的环境会让一个人堕落 而我已经在一个企业干了四年的功能测试 已经让我变得不思进取 谈了3年的女朋
  • Appium:“使用给定的搜索参数无法在页面上找到元素”错误

    我是 Appium 新手 一直在尝试自动化 Android 版转换计算器应用程序 尝试查找 EditText 元素时 出现错误 org openqa selenium NoSuchElementException 使用给定的搜索参数无法在页
  • 使用 Appium 和 C# 在 Android 模拟器的浏览器中找不到元素

    我想使用 C 和 Appium 在 Android 模拟器上自动化移动网站测试 我想首先自动化一个简单的测试场景 1 启动浏览器2 查找元素3 清除它4 发送密钥 我的第二步有问题 每次 MSTest 尝试执行下面代码中的 FindElem
  • 如何使用 Appium 在真实设备上自动化第 3 方 ios 应用程序

    我正在尝试使第三方自动化ios应用程序 例如 YouTube 在真实的iPhone using Appium 我无法找到一个指南 教程来实现这一目标 但从我收集的信息来看 它似乎涉及以下步骤 提取预安装的应用程序并将其解密 使用诸如Clut
  • 线程“main”中的异常 org.openqa.selenium.remote.UnreachableBrowserException:使用 appium 时无法启动新会话

    为我的机器上运行的 Appium 服务器运行代码时总是出现错误 谁能帮我解决这个问题 我关注了一些线程 但没有一个线程无法解决我的问题 如果我手动运行 appium exe 并且运行代码工作正常 但是当我开始从代码运行appium并且交互时
  • 如何升级appium的chromedriver版本?

    尝试在 Chrome 版本 65 上运行 Appium 脚本时出现以下错误 selenium common exceptions WebDriverException 消息 未知错误 调用函数结果缺少 值 会话信息 chrome 65 0
  • Appium Inspector 无法在 iOS 元素层次结构中找到子元素

    应用程序构建于 反应本机0 62 2 测试使用的工具 Appium v 1 17 1 问题描述 Appium Inspector 不会检查 定位 iOS 层次结构中的子元素 我们使用 testID 和accessibilityLabel 属
  • 如何使用Appium获取ios中的应用程序信息,例如应用程序版本、设备操作系统版本?

    我正在使用 appium 测试应用程序并将测试输出集成到 testrail 中 我需要在 testrail 中添加设备和应用程序信息 在 Android 中 我可以使用 adb 命令获取应用程序和设备信息 例如设备型号 设备版本和应用程序版
  • 访问 AWS 设备场上 Appium 测试的其他测试文件

    我正在 AWS 设备场上使用 JUnit 运行 Appium 测试 有没有办法上传额外的测试文件并从我的代码中访问它们 那么基本上 我可以访问运行 Appium 测试的容器的文件系统吗 我的 JAR 文件中有必要的文件 根据 AWS 要求
  • 如何确定 Android UI 元素的 XPATH。硒 + Appium

    我目前正在使用 Appium 和 Selenium 自动化 Android 应用程序 并且在通过 ID 定位元素时遇到了一些问题 我想使用 XPATH 但不知道如何获取 android UI 元素的 XPATH 有谁知道如何确定元素的 XP

随机推荐

  • UEFI学习---EDK II开发环境的搭建

    EDK II的开发环境搭建 Windows系统 一 搭建前的准备工作 二 软件安装 1 安装VS2019 社区版 2 安装Python 3 安装Git 4 安装Nasm 5 安装IASL 6 安装Qemu 三 下载EDK2的源码 1 下载e
  • Chatgpt使用方法

    ChatGPT是OpenAI开发的一种语言模型 它基于GPT 3 5架构 旨在提供强大的自然语言处理能力 使用ChatGPT的过程通常分为以下几个步骤 准备环境 构建请求 发送请求和处理响应 1 准备环境 在使用ChatGPT之前 你需要设
  • git http服务免登录实现(免去每次请求用户名密码输入,Visual Studio可用)

    最近用了Bonobo搭起了Git服务 弄了个批处理文件来避免每次都要输入用户名密码 此脚本分为三个步骤 1 添加用户变量HOME 2 添加用户 netrc文件 3 添加windows普通凭据 因为VS用的是这个 干的就两件事 添加 netr
  • 文件权限概念,相关操作

    一 文件权限的基本概念 权限 操作系统限制对资源访问的一种机制 文件权限的信息展示 使用ls l 命令即可查看 整个文件信息可以分为以下几部分 一 第一个字段表示文件类型 和 文件权限 第1个字母表示文件类型 d表示目录类型 其他的linu
  • 三相逆变器双pi控制器参数如何调节_电机(四)——永磁同步电机PI参数调节...

    一 PID简介 1 1比例 P 控制 比例控制器实际上就是个放大倍数可调的放大器 即 P Kp e 式中Kp为比例增益 即Kp可大于1 也可小于1 e为控制器的输入 也就是测量值与给定值之差 又称为偏差 要说明的是 对于大多数模拟控制器而言
  • 机器学习基础-模型调参

    模型调参 大多数据科学家或算法工程师会在模型调参上面花费很多时间 时间的花费和你模型的参数成正比关系 所以 我们的模型想在一个数据集上获得一个好的结果是一个非常花费时间的过程 一般来讲 大家在模型调参之初 都会有官方模型设定的一系列默认超参
  • VulnStack红队(五)渗透学习

    一 介绍 这是红日安全团队出的第五版渗透测试学习环境 二 环境搭建 本环境搭建无需过多操作 只需将web环境得win7环境得一张网卡ipv4地址转自动获取即可 VMware得nat自动获取ip地址 win7 ip1 192 168 91 1
  • 计算机操作系统

    计算机操作系统 https www bilibili com video BV1wq4y1M7qf p 1 vd source 472e37410b35b5465ee5b86e8b8684b4 持续更新中 P1 P8 操作系统历史发展和相关
  • Java8 LocalDateTime获取时间戳(毫秒/秒)、LocalDateTime与String互转、Date与LocalDateTime互转...

    本文目前提供 LocalDateTime获取时间戳 毫秒 秒 LocalDateTime与String互转 Date与LocalDateTime互转 文中都使用的时区都是东8区 也就是北京时间 这是为了防止服务器设置时区错误时导致时间不对
  • idea启动android项目时找不到已经运行的genymotion虚拟设备解决方案

    由于刚学习android 按网上说的用另外一个android虚拟设备来运行项目 所以就找到了genymotion 但有个问题就是 启动android项目时 有时能找到运行中的genymotion 有时又找不到 总是这个问题 弄了我好几天 有
  • OpenCV python实现视频的循环播放

    有以下三个步骤 首先设置一个frame的设置参数frame counter 值为0 在读帧时间 将每次加一 当 frame counter达到视频总帧数时 将当前的帧设置为 0 视频总帧数 cv2 CAP PROP FRAME COUNT
  • 关于区块链技术的3大特点,你都了解吗?--甲由

    跟着区块链技术的开展 全球引起了比特币的张狂影响 如果说互联网是信息的高速公路 那么区块链便是金钱的高速公路 它甚至可以加快人们通往财富之路的速度 那么 什么是区块链 区块链起源于中本聪的比特币 作为比特币的底层技术 本质上是一个去中心化的
  • Power bi 3.24 矩阵

    关注微信公共号 小程在线 关注CSDN博客 程志伟的博客 数据集链接见微信公共号底端 1 单击 可视化 窗格中的 矩阵 图标 在画布区域会出现矩阵的模板 由于没有填入数据 因此矩阵是灰色的 2 在 字段 窗格中勾选 类型 年份 实际产量 预
  • uni-app自定义组件不能使用v-for解决办法

    uni app自定义组件不能使用v for解决办法 原文 添加链接描述
  • matlab三维山峰/山脉/山地曲面数据图

    matlab三维山峰 山脉 山地曲面数据图 可以使用peaks函数 比如直接peaks 80 peaks 80 z 3 1 x 2 exp x 2 y 1 2 10 x 5 x 3 y 5 exp x 2 y 2 1 3 exp x 1 2
  • 前端使用Export2Excel将页面Table中的数据导出为Excel

    前端使用Export2Excel将页面Table中的数据导出为Excel 在项目中 用于需要将表格中的数据导出为Excel 根据用于自己的表头样式 经过千方百计的百度 终于找到了这个Export2Excel 插件 1 安装 需要以下几个插件
  • 7款超级好用的AI智能工具,功能超越你的想象

    分享7个好用的AI智能工具 都是日常能够经常用到的 有了它们可以大大提高工作学习效率 1 Notion AI AI写作 一个AI智能写作在线网站 只需要输入关键词就能快速生成一篇文章 可以大大提高办公学习效率 使用邮箱注册登录之后 在右侧点
  • 中input宽度_使用HOG对卫星图像中的船舶进行分类

    我在浏览Kaggle数据集时发现了这个有趣的机器学习数据集 https www kaggle com rhammell ships in satellite imagery 该机器学习数据集包括从卫星图像中提取的船舶图像以及一些负面实例 查
  • springboot中Controller层调用service层报错this.service is null

    报错信息 2022 10 18 09 11 35 661 ERROR GlobalExceptionHandler java 33 java lang NullPointerException Cannot invoke com yuhen
  • 自动化测试 - Appium + Python史上最全最简环境搭建步骤

    一 为什么是Appium 借一张图 1 1 Appium优点 l 开源 l 跨架构 NativeApp Hybird App Web App l 跨设备 Android iOS Firefox OS l 不依赖源码 l 使用任何WebDri