Appium是什么?有什么用
开源,跨平台,多语言支持的 移动应用 自动化工具
测试对象:
-
原生APP
-
混合(Hybrid)app
-
移动web app
测试对象App运行平台:
- ios
- Andriod
- Windows
- Firefoxos
测试对象App运行坏境:
- 真实设备
- 模拟器
测试程序语言:
python,java,Ruby,js,php,C#
自动化程序运行平台:
-
Windows,Linux,mac OS
-
IOS的应用,appium server 必须要运行在苹果的手机上
MacBook Imac
Node.js是js程序的一个解释器
#AppiumServer是用js开发的。node.js是js的解释器。
我们写的程序,通过编程接口去调用Appium组织开发好的客户端库。客户端库就会构建http请求发送给AppiumServer,,AppiumServer接收到之后就会在在手机上安装一个解释执行程序(自动化模块)。同时把消息发送给手机。手机接收到命令(再调用UiAutomator库)就可以执行自动化了。
-
苹果:UIAutomation/XCTest
-
安卓:UIAutomator
Andriod
#版本4.1之前的版本,自动化依赖于Selendroid
-
2.3-4.1:Selendroid
-
4.2+: UiAutomator 框架 谷歌官方提供的自动化测试框架,提供了一系列的工具库。:(90%以上的市场份额)
ios:
-
ios9.3 以前,苹果使用的是UIAutomation
-
ios9.3+ XCUITest(也是提供了一个库) (90%以上的市场份额)
安装
-
安装客户端库:
pip install Appium-Python-Client #安装客户端库 pip install selenium -U 更新selenium pip install Appium-Python-Client -U 更新appium
安装Appium Server
- 方法一:node.js & npm(不建议)npm install -g appium
- 方法二:Appium Desktop(相当于把方法一打了一个包)项目下载地址:
https://github.com/appium/appium-desktop/releases/download/v1.7.1/appium-desktop-setup-1.7.1.exe
安装Andriod SDk
安卓app的自动化,Appium server依赖Andriod SDk
“”"
from appium import webdriver #webdriver是基于selenium扩展的一个对象
import time,traceback
desired_caps = {} #存储一些配置信息,通过字典键值对来存。吧配置信息传递给appium server
desired_caps['platformName'] = 'Android' #指定自动化的设备
desired_caps['platformVersion'] = '4.4.4' #设备的操作系统版本
desired_caps['deviceName'] = 'test' #对安卓没啥用,但是不能不写
# desired_caps['app'] = r'e:\apk\toutiao.apk' #app安装包的路径,如果手机没装的话,会帮你装上。如果装好,可以注释
desired_caps['appPackage'] = 'io.manong.developerdaily' #应用的包名
desired_caps['appActivity'] = 'io.toutiao.android.ui.activity.LaunchActivity' #告诉appium启动的Activity的名字,安卓应用是由多个Activity组成的
desired_caps['unicodeKeyboard'] = True #输入中文的话,这个就要打开。给appium自动化用的。输入非ask码用的
desired_caps['resetKeyboard'] = True #配合上面一起用的,据说可以还原之前的输入法
desired_caps['noReset'] = True #非常重要。如果不设置的话。每次运行都会清空里面的数据。
desired_caps['newCommandTimeout'] = 6000 #主要是与服务端appiumserver连接的时间,防止断开。6000s
#启动Remote RPC
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
try:
driver.implicitly_wait(10)
# 根据id找到元素,并点击,id和 html 元素的id不同
driver.find_element_by_id("io.manong.developerdaily:id/tab_bar_plus").click()
time.sleep(1)
driver.find_element_by_id("io.manong.developerdaily:id/btn_email").click()
time.sleep(1)
# 输入用户名、密码
ele = driver.find_element_by_id("io.manong.developerdaily:id/edt_email")
ele.send_keys('[email protected]')
ele = driver.find_element_by_id("io.manong.developerdaily:id/edt_password")
ele.send_keys('sdfsdf')
time.sleep(2)
# 点击登录
driver.find_element_by_id('io.manong.developerdaily:id/btn_login').click()
pass
except:
print (traceback.format_exc())
input('**** Press to quit..')
driver.quit()
“”"
Appium自动化 选择界面元素 操作元素 点击 输入字符 拖拽 获取页面元素的各种属性 根据Appium获取的数据进行分析和处理
代码回顾:
from appium import webdriver #如果没有
import time,traceback
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '7.0'
desired_caps['deviceName'] = 'test'
# desired_caps['app'] = r'e:\apk\toutiao.apk'
desired_caps['appPackage'] = 'io.manong.developerdaily'
desired_caps['appActivity'] = 'io.toutiao.android.ui.activity.LaunchActivity'
desired_caps['unicodeKeyboard'] = True
desired_caps['resetKeyboard'] = True
desired_caps['noReset'] = True
desired_caps['newCommandTimeout'] = 6000
#启动Remote RPC
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
try:
driver.implicitly_wait(10)
# 根据id找到元素,并点击,id和 html 元素的id不同
driver.find_element_by_id("io.manong.developerdaily:id/tab_bar_plus").click()
time.sleep(1)
driver.find_element_by_id("io.manong.developerdaily:id/btn_email").click()
time.sleep(1)
# 输入用户名、密码
ele = driver.find_element_by_id("io.manong.developerdaily:id/edt_email")
ele.send_keys('[email protected]')
ele = driver.find_element_by_id("io.manong.developerdaily:id/edt_password")
ele.send_keys('sdfsdf')
time.sleep(2)
# 点击登录
driver.find_element_by_id('io.manong.developerdaily:id/btn_login').click()
pass
except:
print (traceback.format_exc())
input('**** Press to quit..')
driver.quit()
Appium测试程序和Appium server之间的http请求必须要在一个session中进行
session ID
“”"