zoukankan      html  css  js  c++  java
  • 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秒内加载出来正常返回
    
    
  • 相关阅读:
    【LGR-070】洛谷 3 月月赛-官方题解
    洛谷P1034 矩形覆盖
    <C和指针---读书笔记9>
    <C和指针---读书笔记8>
    <C和指针---读书笔记7>
    <C和指针---读书笔记6>
    <C和指针---读书笔记1>
    <C和指针---读书笔记2>
    <C和指针---读书笔记5>
    <C和指针---读书笔记4>
  • 原文地址:https://www.cnblogs.com/angle6-liu/p/10815183.html
Copyright © 2011-2022 走看看