• Appium获取Toast消息


    Android中的Toast是一种简易的消息提示框。且一般显示3s左右的时间就消失。他属于系统的一种提示,而不是应用上的。所以使用定位元素工具定位是获取不到Toast元素的。

    定位Toast元素需要借助UiAutomator2 ,automationName:uiautomator2;由于他的设计方式,所以在getPageSource 是查找不到的。在定位Toast元素时必须使用xpath定位方式。
    使用xpath定位有两种方法,一种是借助Toast的className:android.widget.Toast;另一种是借助文本内容。所以定位写法有两种形式:
    driver.find_element_by_xpath("//*[@class='android.widget.Toast']")
    driver.find_element_by_xpath("//*[@text='xxxxx']")

    在app UI自动化中,Toast是常用的一种文言提示方法。所以对此进行封装,便于以后调用。

    # coding:utf-8
    from appium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    
    def get_toast(driver, text=None, timeout=5, poll_frequency=0.5):
        """
        get toast
        :param driver: driver
        :param text: toast text
        :param timeout: Number of seconds before timing out, By default, it is 5 second.
        :param poll_frequency: sleep interval between calls, By default, it is 0.5 second.
        :return: toast
        """
        if text:
            toast_loc = ("//*[contains(@text, '%s')]" %text)
        else:
            toast_loc = "//*[@class='android.widget.Toast']"
    
        try:
           WebDriverWait(driver, timeout, poll_frequency).until(EC.presence_of_element_located(('xpath', toast_loc)))
           toast_elm = driver.find_element_by_xpath(toast_loc)
           return toast_elm
    
        except:
            return "Toast not found"
    解释:WebDriverWait(driver, timeout, poll_frequency).until(EC.presence_of_element_located(('xpath', toast_loc)))

    在这只是相当于一个频率执行,在固定的时间中判断Toast是否存在。当然,如果在初始化driver时设置了driver.implicitly_wait(30),则这儿的查找可以注释掉。

    在这儿这样设计的目的只是为了避免代码执行太快或太慢,获取不到Toast,增强代码的健壮性而已

     

    调用也很简单,如果是需要判断Toast是否出现,则只需要判断 get_toast()为True。

    如果要获取Toast文本,则添加 text,get_toast().text

     

  • 相关阅读:
    作业20181127-1 附加作业 软件工程原则的应用实例分析
    20181120-1 每周例行报告
    20181113-2 每周例行报告
    获奖感言
    作业 20181030-4 每周例行报告
    20181023-3 每周例行报告
    Weekly 13
    Weekly 10
    Weekly 11
    weekly 8
  • 原文地址:https://www.cnblogs.com/tynam/p/12368203.html
Copyright © 2020-2023  润新知