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

 

 

 实战步骤

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

 

 

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

 


posted @ 2019-05-05 17:55  柳帅  阅读(3490)  评论(0编辑  收藏  举报
//替换成自己路径的js文件