专栏首页从零开始学自动化测试Appium+python自动化29-toast消息

Appium+python自动化29-toast消息

前言

appium1.5以后的版本才支持toast定位,并且 'automationName'得设置为'Uiautomator2',才能捕获到。

一、 Supported Platforms

1.查看appium v1.7版本[官方文档](https://github.com/appium/appium/)

**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:
- iOS
 - The [XCUITest Driver]
 - (DEPRECATED) The [UIAutomation Driver]
- Android
 - (BETA) The [Espresso Driver]
 - The [UiAutomator2 Driver]
 - (DEPRECATED) The [UiAutomator Driver]
 - (DEPRECATED) The [Selendroid Driver]
- The [Windows Driver](for Windows Desktop apps)
- The [Mac Driver] (for Mac Desktop apps)

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"></appium.webdriver.webelement.webelement>

三、 封装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, "再按一次退出")
```

本文分享自微信公众号 - 从零开始学自动化测试(yoyoketang),作者:YOYO

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-11-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • appium+python自动化56-微信小程序自动化

    最近微信的小程序越来越多了,随之带来的问题是:小程序如何做自动化测试? 本篇以摩拜小程序为例,介绍如何定位小程序里面的元素

    上海-悠悠
  • selenium+python自动化91-多线程启动多个不同浏览器

    一、前言 如果想用多个浏览器跑同一套测试代码,driver=webdriver.Firefox()这里的driver就不能写死了,可以把浏览器名称参数...

    上海-悠悠
  • appium+python自动化36-android7.0连不上的问题

    前言 由于最近很多android手机升级到7.0系统了,有些小伙伴的appium版本用的还是1.4版本,在运行android7.0的app自动化时候遇到无法启动...

    上海-悠悠
  • Vulnhub靶机系列:Lampião 1.0

    https://www.vulnhub.com/entry/lampiao-1,249/

    字节脉搏实验室
  • 小笔记:python搜索引擎下拉框截图

    作为一个程序员,被女友提需求也也是常有的事情,最近就来了一个需求,需要截取指定搜索引擎的关键词下拉框截图,就是这种的,只要度娘搜索引擎的。

    江湖安得便相忘
  • 手把手教你写 Roslyn 修改编译

    在写 Roslyn 的时候,经常需要辅助编译的工具,而这些工具需要传入一些参数,在项目很大的时候,会发现自己传入的参数比微软限制控制台可以传入的参数大很多,这时...

    林德熙
  • Xiuno BBS 4.0 表结构 XiunoBBS

    奇梦
  • 【前端每日一题 01】Doctype作用? 严格模式与混杂模式如何区分?它们有何意义?

    桃翁
  • 深度学习之风格迁移简介

    风格迁移(style transfer)最近两年非常火,可谓是深度学习领域很有创意的研究成果。它主要是通过神经网络,将一幅艺术风格画(style image)和...

    MelonTeam
  • MySQL索引不可用的一种情况

    其中一张是info表,一张是score表,其中score表比info表多了一列score字段。

    AsiaYe

扫码关注云+社区

领取腾讯云代金券