思考:手机APP上的必填或错误文本提示一般1-2s就会消失,比较难定位,所以一般的固定元素定位方式是不可用的,那我们如何定位toast呢?

前提:1.Appium1.6.3以上(包括1.6.3)

   2.下载安装node.js(官网下载即可)

3.下载安装uiautomator2及其2个配置文件(appium-uiautomator2-server-debug-androidTest.apkappium-uiautomator2-server-v2.8.0.apk

   4.下载安装Android SDK(tools文件夹下必须要有zipalign.exe工具,否则没法启动app)

   5.真机或模拟器版系统版本要求Android 5.0以上

环境准备:

一、下载安装node.js

1.进入官网下载:https://nodejs.org/en/download/,  选择适合自己操作系统的安装文件,下载node js,并安装(这里安装路径:C:\Program Files\nodejs)

以管理员权限打开cmd命令窗口

验证nodejs是否安装成功:node  -v

验证npm是否安装成功:npm  -v

2.改变原有路径

(1)我们要先配置npm的全局模块的存放路径以及cache缓存的路径,例如我希望将以上两个文件夹放在NodeJS的主目录下,便在NodeJs下建立"node_global"及"node_cache"两个文件夹,输入以下命令改变npm配置

npm config set prefix "C:\Program Files\nodejs\node_global"
npm config set cache "C:\Program Files\nodejs\node_cache"

(2)在系统环境变量添加系统变量NODE_PATH,输入路径C:\Program Files\nodejs\node_global\node_modules,此后所安装的模块都会安装到该路径下

二、安装淘宝npm(cnpm)

1.输入以下命令安装cnpm(注:“-g”这个参数意思是装到global目录下,也就是上面说设置的“C:\Program Files\nodejs\node_global”里面)

验证cnpm是否安装成功:cnpm  -v

npm install -g cnpm --registry=https://registry.npm.taobao.org

2.添加系统变量path的内容

因为cnpm会被安装到C:\Program Files\nodejs\node_global下,在系统变量path下添加该路径即可

三、安装Appium

输入以下命令安装appium(1.8.1)

cnpm install -g appium@1.8.1

验证Appium是否安装成功:Appium -v

appium安装成功后,里面可以看到uiautomator2及其2个配置文件

实际操作

一、启动Appium

appium --session-override  -p 4723 -bp 4768 -U emulator-5554

-p   监听端口号
-u 模拟器名称
-bp 随意

二、运行模拟器

闪电或夜神模拟器

三、编写脚本:

Step1:初始化

在capability配置内部增加:desired_caps[‘uiautomationName’]=’ uiautomator2’

DriverConfigure.py(配置脚本)
# coding:utf-8
'''
Created on 2018-11-7
@author: 丹姐
Project:配置驱动
'''
from appium import webdriver
import time # appium远程启动app
# 定义获取驱动方法
def get_driver():
try:
desired_caps ={}
desired_caps['automationName'] = 'uiautomator2' #引入uiautomator2,用于定位toast
desired_caps['platformName'] = 'Android' # 设备系统
desired_caps['platformVersion'] = '5.1.1' # 设备系统版本
desired_caps['deviceName'] = 'emulator-5554' # 设备名称
desired_caps['app'] = r'E://app-debug.apk' # 测试app
desired_caps['appPackage'] = 'com.xywg.smartsitegov' # 获取包名
desired_caps['appActivity'] = 'com.xywg.smartsitegov.activity.LaunchActivity' # 获取activity启动
desired_caps['unicodeKeyboard'] = 'True'#支持unicode输入法
desired_caps['resetKeyboard'] = 'True'#重置键盘
desired_caps['noReset'] = 'true' # 模拟用户非首次启动
driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps)
time.sleep(5) # 等待5秒
return driver
except Exception as e:
raise e

Step2:定位Toast元素

(1)定义toast文本内容

(2)定义元素路径

(3)定义等待时间

(4)组合文本内容和路径进行定位:用format()连接路径和文本内容

BasePage.py(基类脚本)

    # 重写获取toast方法
def find_toast(self, message, timeout, poll_frequency):
u'''获取toast信息文本并验证'''
message1 = "//*[@text=\'{}\']".format(message)
element = WebDriverWait(self.driver, timeout, poll_frequency).until(
EC.presence_of_element_located((By.XPATH, message1)))
return element.text

Step3:页面调用获取toast方法

XXXPage.py(页面脚本)

        #获取上传图片提示
photo_toast = self.find_toast(u'请上传图片', 10, 0.01)
print(u'图片上传必填提示:',photo_toast)

四、运行脚本

执行测试用例

Appium+Python之获取toast的更多相关文章

  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. python 怎样获取toast?

    toast是什么? 想要获取toast的小伙伴们,肯定知道这个是一个什么玩意,例行还是加一个图,加以解释,下图的就是传说中的toast,它有一个特点,出现时间特别短,很难通过定位元素去获取这个toas ...

  4. appium自动化测试中获取toast消息的解决方法【转】

    http://blog.csdn.net/hqzxsc2006/article/details/50036911 待实践.. 解决方法:appium下切换selendroid模式去获取Android的 ...

  5. Appium + python - get_attribute获取value操作

    from appium import webdriverfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium.w ...

  6. Python+Appium 获取 toast 文本值方法的封装

    获取toast内容方法封装如下: def get_Toast(self,message): #查找toast值 ''' method explain:查找toast的值,与find_Toast实现方法 ...

  7. python appium 封装获取toast方法

    获取toast text封装,传入toast 部分文本,返回全部文本 def get_toast_text(self,text): try: toast_loc = (By.XPATH, " ...

  8. appium获取toast和操作webview实例

    从testerhome上看到很多测试同学分享了toast的获取方式,其中大部分是java版本的,但也有个python版本的:Appium1.7.2 android toast 消息测试 Appium获 ...

  9. appium+java(八)获取Toast内容信息

    前言 Appium中很经典的问题了,在两年前也就是2017年3月6号07:22分,我才看到appium1.6.3版本的发布,更新内容为Ios上可以实现Toast的获取,而Windows也就是安卓端,还 ...

随机推荐

  1. BZOJ 3589: 动态树 树链剖分+线段树+树链的并

    利用树剖序的一些性质~ 这个题可以出到 $\sum k=10^5$ 左右. 做法很简单:每次暴力跳重链,并在线段树上查询链和. 查询之后打一个标记,把加过的链都置为 $0$.这样的话在同一次询问时即使 ...

  2. idea2018.3.6安装与破解教程(亲测可用、破解到2100年)

    最近,帮室友进行idea安装,之前自己安装借鉴的博客已404,在网上找了好几个都无效,想着总结一份备用. 此博客是又找了一台电脑,边安装边写的. 目录 (已安装好的,可以直接看idea2018.3.6 ...

  3. 二分mid的取法

    二分的两种形式: 1.范围缩小时,r = mid,l = mid + 1,取中间值时,mid = (l + r) >> 1. 2.范围缩小时,l = mid,r = mid - 1,取中间 ...

  4. phoenix-hbase 使用

    建表命令 CREATE TABLE IF NOT EXISTS "person_mul"( "ROW" varchar primary key, //主键,必须 ...

  5. python实战,

    1.把日志状态码为200得请求记录下来 记录信息(ip,访问时间,请求资源) 封装函数再次调用,健壮性try except #coding=utf-8import redef  aclog(path, ...

  6. Hibernate持久化类规则

    注意事项: 提供无参的构造方法,因为在hibernate需要使用反射生成类的实例 提供私有属性,并对这些属性提供公共的setting和getting方法,因为在hibernate底层会将查询到的数据进 ...

  7. [NLP] 语义网络与知识图谱入门(一)

    语义网络与知识图谱入门(一) RDF/XML 本体:一种形式化的对于共享概念体系明确而又详细的说明.就是指一种抽象的模型,可以用来描述对象类型.属性以及关系类型所构成的世界. RDF/XML主要讲的就 ...

  8. [Java]使用正则表达式实现分词

    手工分词稍嫌麻烦,不好维护,而利用正则表达式就利索多了.Java提供了java.util.regex.Matcher,java.util.regex.Pattern类来帮助我们实现此功能. 例一:以下 ...

  9. 什么是 ANR 如何避免它?

    在 Android 上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框.用户可以 ...

  10. java之消息队列ActiveMQ实践

    原创论文:https://www.cnblogs.com/goujh/p/8510239.html 消息队列的应用场景: 消息队列应用场景 异步处理,应用解耦,流量削锋和消息通讯四个场景 异步处理: ...