appium 移动端自动化测试工具(4)

摘要:
一简介原生应用和web应用原生应用是特别为某种操作系统开发的.Web应用本质上是为移动浏览器设计的基于Web的应用.混合应用大家都知道是原生应用和Web应用的结合体,採用了原生应用的一部分、Web应用的一部分,所以必须部分在设备上执行、部分在Web上执行。

一 简介

原生应用和web应用

(1)原生应用是特别为某种操作系统开发的.
(2)Web应用本质上是为移动浏览器设计的基于Web的应用.
(3)混合应用大家都知道是原生应用和Web应用的结合体,採用了原生应用的一部分、Web应用的一部分,所以必须部分在设备上执行、部分在Web上执行。

appium 移动端自动化测试工具(4)第1张

appium 移动端自动化测试工具(4)第2张

appium架构

appium 移动端自动化测试工具(4)第3张

二 appium特点

appium 移动端自动化测试工具(4)第4张

三 工作原理

appium 移动端自动化测试工具(4)第5张

appnium-client选择python语言编写appium脚本,并行执行脚本.
请求先经过appium-server服务端,通过解析和驱动移动设备虚拟机.

四 安装

http://appium.io/

appium 移动端自动化测试工具(4)第6张

appium 移动端自动化测试工具(4)第7张

双击下一步安装即可,

简单启动,设置host和port

appium 移动端自动化测试工具(4)第8张

点击start开启,界面如下

appium 移动端自动化测试工具(4)第9张

安装完成.

五 inspector (会话)配置

1 简介

appium 移动端自动化测试工具(4)第10张

appium 移动端自动化测试工具(4)第11张

appium 移动端自动化测试工具(4)第12张

appium 移动端自动化测试工具(4)第13张

appium 移动端自动化测试工具(4)第14张

获取安卓版本

appium 移动端自动化测试工具(4)第15张

获取设备信息

appium 移动端自动化测试工具(4)第16张

获取包名

adb shell dumpsys activity top | findstr “ACTIVITY”

appium 移动端自动化测试工具(4)第17张

active名字

appium 移动端自动化测试工具(4)第18张

方法二 获取包名和active名字

appium 移动端自动化测试工具(4)第19张

打开需要监听的软件,如考研帮,查看日志

appium 移动端自动化测试工具(4)第20张

appium 移动端自动化测试工具(4)第21张

保存session ,启用session 就可以进行app自动化测试.

六 考研app实战

要求:

appium 移动端自动化测试工具(4)第22张

账号:asdfghjkl0111
密码:********

工具

1一台手机或者安卓模拟器
2uiautomatorviewer
3 python

实战步骤

1 启动appium,查看设备配置信息,不启动session .

appium 移动端自动化测试工具(4)第23张

appium 移动端自动化测试工具(4)第24张

2 python 准备

1 安装 appium客户端

pip install Appium-Python-Client

2 必须保证appnium服务器启动,检测是否能正常驱动安卓软件,执行下面代码

#导入appium设备驱动器
from appium importwebdriver
#设置安卓设备配置信息(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设备驱动器
importtime
from appium importwebdriver
#导入等待模块
from selenium.webdriver.support.ui importWebDriverWait
#设置安卓设备配置信息(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()
#获取设备的尺寸
defget_size():
  x=driver.get_window_size()['width']
  y=driver.get_window_size()['height']
  returnx,y
l=get_size()
x1=int(l[0]*0.5)
y1=int(l[1]*0.75)
y2=int(l[1]*0.25)
whileTrue:
  #滑动刷新页面,点到点滑动方式(x1,y1)--->(x2,y2)
driver.swipe(x1,y1,x1,y2)
  time.sleep(0.5)

知识点讲解

  • 导入等待模块

from selenium.webdriver.support.ui import WebDriverWait

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秒内加载出来正常返回

免责声明:文章转载自《appium 移动端自动化测试工具(4)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SQL SERVER分割字符串Win10双机调试(Windbg+VMware+Win10LTSC)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C# 没落了吗?

先上图 ------------------------------------------ C#没落与否跟微软整个平台息息相关。 C#最近几年用的人越来越少,也是因为越来越少的人专门为微软平台开发产品。 基本上,你要开个公司做软件,你如果钱足够的话,一般肯定要做iOS, Android, Web 3个版本,但是是否做Windows版本就不好说了。 现在...

云端远程Ubuntu系统进行无桌面Web浏览器自动化测试

【摘要】 利用xvfb提供的显卡帧缓冲区,让浏览器以为有桌面,以达到无桌面系统下测试真实浏览器兼容性的目的。 自动化web界面测试往往需要验证真实浏览器的兼容性,但是云端系统往往并不提供图形化的桌面,所以自动化web界面测试在云端就成为一个问题。本文描述了一个技巧解决这个问题,其主要原理是利用xvfb提供的显卡帧缓冲区,让浏览器以为有桌面。 Install...

Android Studio中一套代码多版本打包

一套代码达到以下效果: 打包不同applicationId能同时安装在同一手机上 不同logo,app名称, 不同第三方SDK接入配置(例如微信分享appid,激光推送appkey) 能区分debug和release配置 甚至不同的so文件,不同的依赖jar包 (待补充) 使用到的功能:productFlavor和buildTypes 原理:优先级bu...

微信公众平台开发步骤(包括自定义菜单、网页授权、分享功能)

第一步:填写服务器配置 第二步:验证服务器地址的有效性 第三步:依据接口文档实现业务逻辑 用户向公众号发送消息时,公众号方收到的消息发送者是一个OpenID,是使用用户微信号加密后的结果,每个用户对每个公众号有一个唯一的OpenID。此外,由于开发者经常有需在多个平台(移动应用、网站、公众帐号)之间共通用户帐号,统一帐号体系的需求,微信开放平台(open....

坐标转换,这次是反过来,屏幕坐标转换成世界坐标

今天是做 安卓屏幕滑动交互的时候,发现原来安卓屏幕的坐标是屏幕坐标  坐标为 屏幕左下角0,0  右上角  1920*1080  是以像素为单位的。 那么每个手机都不一样 所以如果以这个坐标来判断是左手滑动屏幕还是右手滑动屏幕会产生问题。 而我这款游戏 摄像机是不动的  摄像机一直对着前方 摄像机的中心就是世界坐标的圆心 , 那么 我把屏幕坐标换成世界坐标...

微信小程序设置全局请求URL 封装wx.request请求

app.js: App({ //设置全局请求URL globalData:{ URL: 'https://www.oyhdo.com', }, /** * 封装wx.request请求 * method: 请求方式 * url: 请求地址 * data: 要传递的参数 * callback: 请求...