toast元素定位:定位3秒内自动消失的提示

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/dengachao/article/details/100121188

一、Toast简介

Android中的Toast是一种简易的消息提示框。 当视图显示给用户,在应用程序中显示为浮动。和Dialog不一样的是,它永远不会获得焦点,无法被点击。

Toast类的思想就是尽可能不引人注意,同时还向用户显示信息,希望他们看到。而且Toast显示的时间有限,一般3秒左右就消失了。因此使用传统的元素定位工具,我们是无法定位到Toast元素的

可以解决如下截图下的定位问题

 

二、环境

Appium 1.6.3后开始支持识别Toast内容,主要是基于UiAutomator2,因此需要在Capablity配置如下参数:

desired_caps['automationName']='uiautomator2'

在base脚本里加以上一句

安装appium-uiautomator2-driver、查看selenium版本

执行以下三条命令

  • java version "1.8.0_181"
  • Appium v1.14.1(不能低于1.6.3)
  • selenium:3.141.0
  • 测试设备:Android 5.1.1
  • Python:3.6
  • 测试App:考研帮Android app V3.1.0
  • 三、测试场景
    场景一:base脚本里的desired_caps['noReset'] = 'False'

    1 自动安装考研帮App(kaoyan3.1.0.apk),然后启动App

  • 2 登录正确的用户名和错误密码,获取提示:“用户名或密码错误,你还可以尝试4次”,并打印出来

  • 3 多次登录正确的用户名和错误密码,获取提示:“验证失败次数过多,请15分钟后再试”,并打印出来

  • 四、参考脚本

  • kao_toast.py

  • from find.base import driver
    from selenium.webdriver.support.ui import WebDriverWait
    
    driver.find_element_by_id('com.tal.kaoyan:id/login_email_edittext').clear()
    driver.find_element_by_id('com.tal.kaoyan:id/login_email_edittext').send_keys('zxw1234')
    driver.find_element_by_id('com.tal.kaoyan:id/login_password_edittext').send_keys('zxw201778')
    driver.find_element_by_id('com.tal.kaoyan:id/login_login_btn').click()
    
    error_message = "用户名或密码错误,你还可以尝试4次"
    limit_message = "验证失败次数过多,请15分钟后再试"
    
    
    # message = '//*[@text=\'{}\']'.format(error_message)
    message = '//*[@text=\'{}\']'.format(limit_message)
    
    #隐式等待
    toast_element = WebDriverWait(driver,4).until(lambda x:x.find_element_by_xpath(message))
    #打印获取到的文本
    print(toast_element.text)

    base.py

  • #uft-8
    from appium import webdriver
    from selenium.common.exceptions import NoSuchElementException
    
    desired_caps={}
    desired_caps['platformName'] = 'Android'
    # desired_caps['deviceName'] = '127.0.0.1:62026'
    # desired_caps['platforVersion'] = '5.1.1'
    
    desired_caps['deviceName'] = 'HUAWEI Mate 20'
    desired_caps['platforVersion'] = '9'
    desired_caps['udid'] = '66J0218C28008638'
    desired_caps['automationName']='uiautomator2'
    
    desired_caps['app'] = r'D:\download\kaoyan3.1.0.apk'
    desired_caps['appPackage'] = 'com.tal.kaoyan'
    desired_caps['appActivity'] = 'com.tal.kaoyan.ui.activity.SplashActivity'
    desired_caps['noReset'] = 'False'
    #设置之后会有Appium的输入法守护来执行输入操作
    desired_caps['unicodeKeyboard']="True"
    desired_caps['resetKeyboard']="True"
    
    driver = webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)
    driver.implicitly_wait(10)
    
    def check_cancelBtoon():
        print("检查取消按钮")
        try:
            cancelBtoon = driver.find_element_by_id('android:id/button2')
        except NoSuchElementException:
            print("没有取消按钮")
        else:
            cancelBtoon.click()
    def check_skipBtoon():
        print("检查跳过按钮")
        try:
            skipBtoon = driver.find_element_by_id('com.tal.kaoyan:id/tv_skip')
        except NoSuchElementException:
            print("没有跳过按钮")
        else:
            skipBtoon.click()
    
    #调用上面的两个方法
    driver.implicitly_wait(5)
    check_cancelBtoon()
    driver.implicitly_wait(5)
    check_skipBtoon()
    driver.implicitly_wait(5)
    check_cancelBtoon()
    check_skipBtoon()
    
    
    
    

    注意:appium在cmd里启动,要不然脚本可能会运行不通过如下截图

猜你喜欢

转载自blog.csdn.net/dengachao/article/details/100121188
今日推荐