appium 移动端自动化测试工具(4)
一 简介
原生应用和web应用
(1)原生应用是特别为某种操作系统开发的. (2)Web应用本质上是为移动浏览器设计的基于Web的应用. (3)混合应用大家都知道是原生应用和Web应用的结合体,採用了原生应用的一部分、Web应用的一部分,所以必须部分在设备上执行、部分在Web上执行。
appium架构
二 appium特点
三 工作原理
appnium-client选择python语言编写appium脚本,并行执行脚本.
请求先经过appium-server服务端,通过解析和驱动移动设备虚拟机.
四 安装
http://appium.io/
双击下一步安装即可,
简单启动,设置host和port
点击start开启,界面如下
安装完成.
五 inspector (会话)配置
1 简介
获取安卓版本
获取设备信息
获取包名
adb shell dumpsys activity top | findstr “ACTIVITY”
active名字
方法二 获取包名和active名字
打开需要监听的软件,如考研帮,查看日志
保存session ,启用session 就可以进行app自动化测试.
六 考研app实战
账号:asdfghjkl0111
密码:********
工具
1 一台手机或者安卓模拟器 2 uiautomatorviewer 3 python
实战步骤
2 python 准备
1 安装 appium客户端
pip install Appium-Python-Client
2 必须保证appnium服务器启动,检测是否能正常驱动安卓软件,执行下面代码
#导入appium设备驱动器 from appium import webdriver #设置安卓设备配置信息(appium中的inspector参数) cap={ "platformName": "Android", "platformVersion": "5.1.1", "deviceName": "127.0.0.1:62025", "appPackage": "com.tal.kaoyan", "appActivity": "com.tal.kaoyan.ui.login.LoginActivity", "noReset": True } #实例化一个web驱动器 driver = webdriver.Remote('HTTP://127.0.0.1:4723/wd/hub',cap)
3 完整代码
#导入appium设备驱动器 import time from appium import webdriver #导入等待模块 from selenium.webdriver.support.ui import WebDriverWait #设置安卓设备配置信息(appium中的inspector参数) cap={ "platformName": "Android", "platformVersion": "5.1.1", "deviceName": "127.0.0.1:62025", "appPackage": "com.tal.kaoyan", "appActivity": "com.tal.kaoyan.ui.activity.SplashActivity", "noReset": True } #实例化一个web驱动器 driver = webdriver.Remote('HTTP://127.0.0.1:4723/wd/hub',cap) # *** 启动app耗时比较多,等待时间最好设置大一些 *** #如果存在跳过按钮,则获取跳过按钮 try: # WebDriverWait用于等待按键出现 if WebDriverWait(driver,10).until(lambda x:x.find_element_by_xpath("//android.widget.TextView[@resource-id='com.tal.kaoyan:id/tv_skip']")): driver.find_element_by_xpath("//android.widget.TextView[@resource-id='com.tal.kaoyan:id/tv_skip']").click() except: pass #处理登录过程 try: #如果弹出登录界面,则登录 if WebDriverWait(driver, 3).until(lambda x: x.find_element_by_xpath("//android.widget.Button[@resource-id='com.tal.kaoyan:id/login_login_btn']")): driver.find_element_by_xpath("//android.widget.EditText[@resource-id='com.tal.kaoyan:id/login_email_edittext']").send_keys('asdfghjkl0111') driver.find_element_by_xpath("//android.widget.EditText[@resource-id='com.tal.kaoyan:id/login_password_edittext']").send_keys('*********') time.sleep(0.5) driver.find_element_by_xpath("//android.widget.Button[@resource-id='com.tal.kaoyan:id/login_login_btn']").click() except: pass # #点击咨询 if WebDriverWait(driver,10).until(lambda x: x.find_element_by_xpath("//android.support.v7.widget.RecyclerView[@resource-id='com.tal.kaoyan:id/date_fix']/android.widget.RelativeLayout[3]/android.widget.LinearLayout[1]/android.widget.ImageView[1]")): driver.find_element_by_xpath("//android.support.v7.widget.RecyclerView[@resource-id='com.tal.kaoyan:id/date_fix']/android.widget.RelativeLayout[3]/android.widget.LinearLayout[1]/android.widget.ImageView[1]").click() #获取设备的尺寸 def get_size(): x=driver.get_window_size()['width'] y=driver.get_window_size()['height'] return x,y l= get_size() x1=int(l[0]*0.5) y1=int(l[1]*0.75) y2=int(l[1]*0.25) while True: #滑动刷新页面,点到点滑动方式(x1,y1)--->(x2,y2) driver.swipe(x1,y1,x1,y2) time.sleep(0.5)
知识点讲解
if WebDriverWait(driver,time).until(method
):
-
获取设备的尺寸
def get_size(): x=driver.get_window_size()['width'] y=driver.get_window_size()['height'] return x,y
-
活动页面
while True: #滑动刷新页面,点到点滑动方式(x1,y1)--->(x2,y2) driver.swipe(x1,y1,x1,y2) time.sleep(0.5)
显示等待:
指定一个等待条件,和一个最长等待时间,程序会判断在等待时间内条件是否满足,如果满足则返回,如果不满足会继续等待,超过时间就会抛出异常.
if WebDriverWait(driver,time).until(method):
隐式等待
当使用了隐式等待执行测试的时候,如果 WebDriver没有在 DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常, 换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找 DOM,默认的时间是0.
browser.implicitly_wait(10)#等待十秒加载不出来就会抛出异常,10秒内加载出来正常返回