zoukankan      html  css  js  c++  java
  • appium+python自动化29-toast

    注意

    toast要appium1.6.3以上版本才支持,appium1.4的版本就别浪费时间了

    Supported Platforms

    1.查看appium v1.7版本官方文档

    Supported Platforms

    Appium supports app automation across a variety of platforms, like iOS, Android, and Windows. Each platform is supported by one or more "drivers", which know how to automate that particular platform. Choose a driver below for specific information about how that driver works and how to set it up:

    2.从上面的信息可以看出目前1.7的android版可以支持:Espresso、UiAutomator2、UiAutomator、Selendroid四种驱动模式,后面两个不推荐用了,太老了,Espresso这个是最新支持的处于beta阶段,UiAutomator2是目前最稳的。

    3.appium最新版本还能支持windows和mac的桌面app程序了,这个是否稳定,拭目以待!

    toast定位

    1.先看下toast长什么样,如下图,像这种弹出来的消息"再按一次退出",这种就是toast了。

    2.想定位toast元素,这里一定要注意automationName的参数必须是Uiautomator2才能定位到。

    'automationName': 'Uiautomator2'

    # coding:utf-8
    from appium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from time import sleep
    
    desired_caps = {
                    'platformName': 'Android',
                    'deviceName': '127.0.0.1:62001',
                    'platformVersion': '4.4.2',
                    'appPackage': 'com.baidu.yuedu',
                    'appActivity': 'com.baidu.yuedu.splash.SplashActivity',
                    'noReset': 'true',
                    'automationName': 'Uiautomator2'
                    }
    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
    
    # 等主页面activity出现
    driver.wait_activity(".base.ui.MainActivity", 10)
    
    driver.back()   # 点返回
    
    # 定位toast元素
    toast_loc = ("xpath", ".//*[contains(@text,'再按一次退出')]")
    t = WebDriverWait(driver, 10, 0.1).until(EC.presence_of_element_located(toast_loc))
    print t
    

    3.打印出来的结果,出现如下信息,说明定位到toast了

    <appium.webdriver.webelement.WebElement (session="02813cce-9aaf-4754-a532-07ef7aebeb88", element="339f72c4-d2e0-4d98-8db0-69be741a3d1b")>

    封装toast判断

    1.单独写一个函数来封装判断是否存在toast消息,存在返回True,不存在返回False

    def is_toast_exist(driver,text,timeout=30,poll_frequency=0.5):
        '''is toast exist, return True or False
        :Agrs:
         - driver - 传driver
         - text   - 页面上看到的文本内容
         - timeout - 最大超时时间,默认30s
         - poll_frequency  - 间隔查询时间,默认0.5s查询一次
        :Usage:
         is_toast_exist(driver, "看到的内容")
        '''
        try:
            toast_loc = ("xpath", ".//*[contains(@text,'%s')]"%text)
            WebDriverWait(driver, timeout, poll_frequency).until(EC.presence_of_element_located(toast_loc))
            return True
        except:
            return False
    
    

    参考代码

    # coding:utf-8
    from appium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    desired_caps = {
                    'platformName': 'Android',
                    'deviceName': '127.0.0.1:62001',
                    'platformVersion': '4.4.2',
                    'appPackage': 'com.baidu.yuedu',
                    'appActivity': 'com.baidu.yuedu.splash.SplashActivity',
                    'noReset': 'true',
                    'automationName': 'Uiautomator2'
                    }
    
    def is_toast_exist(driver,text,timeout=30,poll_frequency=0.5):
        '''is toast exist, return True or False
        :Agrs:
         - driver - 传driver
         - text   - 页面上看到的文本内容
         - timeout - 最大超时时间,默认30s
         - poll_frequency  - 间隔查询时间,默认0.5s查询一次
        :Usage:
         is_toast_exist(driver, "看到的内容")
        '''
        try:
            toast_loc = ("xpath", ".//*[contains(@text,'%s')]"%text)
            WebDriverWait(driver, timeout, poll_frequency).until(EC.presence_of_element_located(toast_loc))
            return True
        except:
            return False
    
    if __name__ == "__main__":
        driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
    
        # 等主页面activity出现
        driver.wait_activity(".base.ui.MainActivity", 10)
    
        driver.back()   # 点返回
    
        # 判断是否存在toast-'再按一次退出'
        print is_toast_exist(driver, "再按一次退出")
    

    在学习过程中有遇到疑问的,可以appium+python QQ群交流:330467341

  • 相关阅读:
    java中Map遍历的四种方式
    Java从网络读取图片并保存至本地
    spring整合问题分析之Write operations are not allowed in readonly mode (FlushMode.MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.
    element 中table表格多选,翻页或者切换不同数据后保存之前选择的数据并返显选中的状态
    nvm的安装与使用(Mac 版)
    常用正则表达式
    uniapp开发微信小程序
    关于elementui select组件change事件只要数据变化就会触发的解决办法
    elementui的表单重置方法resetFields()的坑
    Element中vfor动态数据循环表单验证的处理
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/7810507.html
Copyright © 2011-2022 走看看