一 简介

原生应用和web应用

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

 

 

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

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 一台手机或者安卓模拟器

2 uiautomatorviewer

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 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)

 

 

知识点讲解

  • 导入等待模块

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

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄