美文网首页移动app测试
App自动化之获取APP Toast(消息提示框)的信息

App自动化之获取APP Toast(消息提示框)的信息

作者: test小星星 | 来源:发表于2018-11-10 18:40 被阅读145次

    在我们日常使用App过程中,经常会看到App界面有一些弹窗提示(如下图所示)这样的提示框称之为Toast提示框,这些提示元素出现后等待3秒左右就会自动消失,那么我们该如何获取这些元素文字内容呢?


    Toast提示框

    Toast简介

    • Android中的Toast是一种简易的消息提示框。 当视图显示给用户,在应用程序中显示为浮动。和弹出框不一样的是,它永远不会获得焦点,无法被点击。
    • Toast类的思想就是尽可能不引人注意,同时还向用户显示信息,希望他们看到。而且Toast显示的时间有限,一般3秒左右就消失了。因此使用传统的元素定位工具,我们是无法定位到Toast元素的。

    实例

    测试环境

    • JDK:1.8.0_171
    • appium版本:1.7.2(不能低于1.6.3)
    • selenium版本:3.141.0
    • 测试设备:Android 7.0
    • Python:3.5
    • 测试App:鼠贷金融 Android app V4.2.9

    Appium Toast内容获取

    Appium 1.6.3开始支持识别Toast内容,主要是基于UiAutomator2,因此需要在Capablity配置如下参数:
    desired_caps['automationName']='uiautomator2'
    安装appium-uiautomator2-driver: 安装命令如下:
    cnpm install appium-uiautomator2-driver
    安装成功后可以在 C:\Users\XXXX\node_modules看到对应的文件:

    • _appium-uiautomator2-driver@1.23.0@appium-uiautomator2-driver
    • _appium-uiautomator2-server@2.6.0@appium-uiautomator2-server

    测试场景

    进入登录界面输入错误的用户名或者密码,获取Toast内容:

    • 没有找到用户名或密码

    代码实现

    # coding=utf-8
    from appium import webdriver
    from time import sleep
    from selenium.webdriver.support.ui import WebDriverWait
    
    # 真机
    desired_caps = {
      "platformName": "Android",
      "platformVersion": "7.0",
      "deviceName": "Honor NOTE 8",
      "udid": "8DF6R16728706566",
      "appPackage": "com.jinding.shuqian",
      "appActivity": "com.jinding.shuqian.WelcomeActivity",
      "noReset": 'true',
      'automationName': 'uiautomator2'
    }
    # 连接
    driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
    sleep(2)
    
    print('元素检测')
    # 用于检测是否是第一次打开APP(第一次打开APP会有引导页)
    try:
      # 定位我的
      my = driver.find_element_by_id('com.jinding.shuqian:id/rb_center')
    except Exception as e:
      print('未找到元素')
    else:
    # 点击我的
     my.click()
    
    # 输入用户名
    driver.find_element_by_id('com.jinding.shuqian:id/et_login_username').send_keys('123')
    # 输入密码
    driver.find_element_by_id('com.jinding.shuqian:id/et_login_password').send_keys('aaaaaa')
    # 点击登录
    driver.find_element_by_id('com.jinding.shuqian:id/button_login').click()
    
    # 用于生成xpath定位 相当于 "//*[@text='没有找到用户名或密码']"
    toast_message = "没有找到用户名或密码"
    message ='//*[@text=\'{}\']'.format(toast_message)
    
    # 获取toast提示框内容
    toast_element = WebDriverWait(driver,5).until(lambda x:x.find_element_by_xpath(message))
    print(toast_element.text)
    assert toast_element.text == "没有找到用户名或密码"
    

    注意:Toast内容为中文时,顶部必须注释# coding=utf-8 否则会因为编解码导致文字识别失败。

    相关文章

      网友评论

        本文标题:App自动化之获取APP Toast(消息提示框)的信息

        本文链接:https://www.haomeiwen.com/subject/jzszxqtx.html