本篇转自博客:上海-悠悠

前言

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, "再按一次退出")

```

参考: https://www.cnblogs.com/yoyoketang/p/7810507.html

自己的实验:

# 定位toast元素
toast_loc = ("xpath", ".//*[contains(@text,'分享成功')]")
t = WebDriverWait(dr2, 10, 0.1).until(EC.presence_of_element_located(toast_loc))
print t.text.encode('utf-8')

ok的

Appium+python自动化29-toast消息(亲测 ok)的更多相关文章

  1. Appium+python自动化获取toast消息的方法

    转载地址:https://www.cnblogs.com/shangren/p/8191879.html 1. 首先执行这个命令:npm install -g cnpm --registry=http ...

  2. Appium+python自动化获取toast消息(windows版)的方法

    原来用的Appium1.5.3GUI版本,那为什么升级呢? 为了兼容最新版本的iOS10和Android7 Xcode8升级后,将不支持使用UIAutomation,而是改为使用XCUITest了,并 ...

  3. Appium+python自动化8-Appium Python API

    Appium+python自动化8-AppiumPython API   前言: Appium Python API全集,不知道哪个大神整理的,这里贴出来分享给大家. 1.contexts conte ...

  4. Appium+python自动化

    名称 链接地址 Appium+python自动化8-Appium Python API(上) http://mp.weixin.qq.com/s/WvpT5oRrYY22avI95FuypQ Appi ...

  5. appium+python自动化61-中文输入乱码问题解决

    前言 在夜神模拟器上输入中文,发现是乱码,将unicodeKeyboard和resetKeyboard参数设置为True了,发现还是没法解决. 打开手机设置语言和输入法,发现找不到Appium And ...

  6. appium+python自动化52-多点触控MultiAction

    前言 MultiAction是针对多点触控操作的,是TouchAction的一个补充模块 TouchAction用法参考前面的一篇:appium+python自动化33-TouchAction 多点触 ...

  7. Appium+python自动化20-查看iOS上app元素属性

    前言 学UI自动化首先就是定位页面元素,玩过android版的appium小伙伴应该都知道,appium的windows版自带的Inspector可以定位app上的元素 Mac版的appium1.6的 ...

  8. Appium+python自动化19-iOS模拟器(iOS Simulator)安装自家APP

    前言 做过iOS上app测试的小伙伴应该都知道,普通用户安装app都是从appstore下载安装,安装测试版本的app,一般就是开发给的二维码扫码安装, 或者开发给个.ipa的安装包文件,通过itoo ...

  9. appium+python自动化50-生成定位对象模板templet(jinja2)

    前言 每次自己写pageobject定位元素对象太繁琐,格式都差不多,只是换个定位方法,这种就可以才有模板的方式,批量生成pageobject定位元素对象的模板 python里面生成模板有两个模块可以 ...

  10. Appium+python自动化20-查看iOS上app元素属性【转载】

    前言 学UI自动化首先就是定位页面元素,玩过android版的appium小伙伴应该都知道,appium的windows版自带的Inspector可以定位app上的元素Mac版的appium1.6的版 ...

随机推荐

  1. Java NIO框架 Mina、Netty、Grizzly

    Mina Mina(Multipurpose Infrastructure for Network Applications) 是 Apache组织一个较新的项目,它为开发高性能和高可用性的网络应用程 ...

  2. spring3: AOP 之 6.2 AOP的HelloWorld

    6.2.1  准备环境 首先准备开发需要的jar包,请到spring-framework-3.0.5.RELEASE-dependencies.zip和spring-framework-3.0.5.R ...

  3. spring3: 表达式5.2 SpEL基础

    5.1  概述 5.1.1  概述 Spring表达式语言全称为“Spring Expression Language”,缩写为“SpEL”,类似于Struts2x中使用的OGNL表达式语言,能在运行 ...

  4. PhpStorm怎么用,PhpStorm常用快捷键教程

    设置快捷键:File -> Settings -> IDE Settings -> Keymap -> 选择“Eclipse” -> 然后“Copy”一份 ->再个 ...

  5. BCCoventUtils全角与半角互相转换

    public class BCConvert { /** * ASCII表中可见字符从!开始,偏移位值为33(Decimal) */ static final char DBC_CHAR_START ...

  6. opencv:图像的掩码操作

    示例代码: #include <opencv.hpp> using namespace cv; int main() { Mat src = imread("005.jpg&qu ...

  7. Flask ajax 动态html 的javascript 事件失效

    $('.db_edit').click(function(){ $(".editdbproduct").val($(this).parent().parent().find('.e ...

  8. c#中绝对路径和相对路径

    文件操作涉及一个非常重要的概念——文件路径.文件路径是指用来标识系统中文件存放位置的字符串.如:D:\\test.txt,表示在D盘根目录下存入test.txt文件. 文件路径分为绝对路径和相对路径. ...

  9. vsftp中的local_umask和anon_umask

    umask是unix操作系统的概念,umask决定目录和文件被创建时得到的初始权限umask = 022 时,新建的目录 权限是755,文件的权限是 644umask = 077 时,新建的目录 权限 ...

  10. Android数据库代码优化(2) - 从SQLite说起

    从SQLite说起 如果没有SQLite的基础,我们只是从Android封装的SQLite API去学习的话,难免思路会受到限制.所以,我们还是需要老老实实从头开始学习SQLite. 当我们有一身的S ...