app自动化测试(六) appium 获取 toast 信息

日常使用中我们会发现每一个app都会有大量的toast信息弹窗,比如登录提示、检查更新等。
所以我们在做app自动化的时候也必然会大量遇到
之前appium是不支持toast识别的,只能采用指定截图的方式接入OCR去判断,非常麻烦
自这几个版本的appium升级以来现在可以抛弃上面的做法,已经可以支持了
实现是非常简单的,但是坑也不少,还是可能存在部分的toast无法等待到等情况
因为一般用例设计上 获取toast信息也不是一个必须的过程
建议这部分的用例(特别是流程测试用例)最好使用异常捕获,若万一抛出异常了不要影响剩下的流程进展

from appium import webdriver
from appium.webdriver.common.mobileby import MobileBy as MB
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


caps = {}
caps["automationName"] = "uiautomator2"  # 若需要进行toast的定位,只能使用uiautomator2的测试引擎框架
caps["platformName"] = "Android"
caps["platformVersion"] = "7.1.2"
caps["deviceName"] = "emulator-5554"
caps["appPackage"] = ""
caps["appActivity"] = ""
caps["noReset"] = True
driver = webdriver.Remote(desired_capabilities=caps)


def get_toastMsg(part_str):
    """
    
    :param part_str:  传入用于识别的部分连续文本
    :return: 
    """
    xpath = '//*[contains(@text,"{}")]'.format(part_str)  # 因为toast信息无法从source里面获得,所以只能选择用xpath进行定位
    try:
        WebDriverWait(driver, 10, 0.01).until(EC.presence_of_element_located((MB.XPATH, xpath)))  # toast出现的时间比较短,所以要轮询的频率,而且因为toast的特殊原因,只能使用元素存在进行等待(presence_of_element_located)
        toast = driver.find_element(MB.XPATH, xpath) 
        print("已找到toast:{}".format(toast.text))
        return toast   # 返回出元素对象,与具体操作解耦
    except:
        print("无法找到toast")
        raise
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容