当前位置: 首页 > article >正文

Appium获取toast方法封装

一、前置说明

toast消失的很快,并且通过uiautomatorviewer也不能获取到它的定位信息,如下图:

二、操作步骤

toast的class name值为android.widget.Toast,虽然toast消失的很快,但是它终究是在Dom结构中出现过,所以我们可以使用xpath来定位toast元素:

    def get_toast(self, text=None, timeout=3, interval=0.5):

		# 如果同时出现多个toast,可以使用这种方式
        if text:
            return WebDriverWait(self, timeout, interval).until(
                EC.presence_of_element_located(('xpath', f'//*[contains(@text, "{text}")]')))

        return WebDriverWait(self, timeout, interval).until(
            EC.presence_of_element_located(('xpath', '//*[@class="android.widget.Toast"]')))

三、Demo验证

注意:appium在v1.6.3以上才支持获取toast,并且需要指定使用Uiautomator2库。

def test_get_toast():
    import logging
    logging.basicConfig(level=logging.DEBUG)

    from driver.appium.driver import WebDriver

    appium_server_url = 'http://localhost:4723'
    capabilities = {
        "platformName": "Android",
        "automationName": "uiautomator2",  # 注意:要指定uiautomator2
        "deviceName": "127.0.0.1:62001",
        "app": "D:\\resources\\ApiDemos-debug.apk",
    }
    driver = WebDriver(command_executor=appium_server_url, capabilities=capabilities)

    driver.smart_find_element(by='text', value='App').click()
    driver.smart_find_element(by='text', value='Notification').click()
    driver.smart_find_element(by='text', value='NotifyWithText').click()
    driver.smart_find_element(by='text', value='SHOW SHORT NOTIFICATION').click()
    
    element = driver.get_toast('Short notification')
    assert element.text == 'Short notification'

日志输出:

============================= test session starts =============================
collecting ... collected 1 item

test_appium.py::test_get_toast PASSED

============================= 1 passed in 19.91s ==============================

欢迎技术交流:


http://www.kler.cn/news/161789.html

相关文章:

  • 套接字通信类的封装
  • 【计算机网络实验】实验三 IP网络规划与路由设计(头歌)
  • MySQL 中Relay Log打满磁盘问题的排查方案
  • 98基于matlab的在MIMO通信系统中功率优化算法的仿真
  • 再识二叉树
  • 第55天:django学习(四)
  • 26.Python 网络爬虫
  • MATLAB - 绘制立体图(平面+水深)
  • 基于Amazon Bedrock介绍大语言模型
  • 分布式训练类的定义以及创建分布式模型
  • QT 重定向qdebug输出到自绘界面
  • 区分node,npm,nvm
  • uni-app实现安卓原生态调用身份证阅读器读卡库读身份证和社保卡、银行卡、IC卡等功能
  • 匹配不包含同时出现两次 “ago“ 的行
  • Redis server启动源码
  • vue 商品列表案例
  • JavaSE基础50题:11. 输出一个整数的每一位
  • CentOS 7.9 安装 k8s(详细教程)
  • Vue.js实现可编辑表格并高亮修改的单元格
  • 基于remix+metamask+ganache的智能合约部署调用
  • 注解 @Autowired 和 @Resource
  • OpenGL ES 帧缓冲对象介绍和使用示例
  • AI烟火识别智能视频分析系统解决方案
  • Dockerfile详解#如何编写自己的Dockerfile
  • Matlab 用矩阵画图
  • JAVA 多线程并发(一)
  • Jmeter接口测试
  • STL(一)(pair篇)
  • 【Docker二】docker网络模式、网络通信、数据管理
  • Oracle11g RAC无法使用VIP或SCAN IP连接数据库的解决方案