『与善仁』Appium基础 — 29、获取toast信息
1、toast介绍
Android中的toast
是一种简易的消息提示框,toast
提示框不能被用户点击,会根据所设置的显示时间自动消失。
toas
要appium1.6.3
以上版本才支持,appium1.4
的版本就别浪费时间了。
再来看下toast
长什么样,像这种弹出来的消息"再按一次退出百度App",这种消息提示框就是toast
了。
如下图所示:
2、toast定位
toast
定位需要添加两步操作:
- 添加启动参数
想要定位toast
元素,Desired capabilities
对象中要添加一个启动参数,如下:
"automationName": "Uiautomator2"
这样才能定位到toast
- 除了使用
Appium-Python-Client
,
也就是导入from appium import webdriver
还需要用到selenium
中的类,导入如下包:
from selenium.webdriver.support.wait import WebDriverWaitfrom
selenium.webdriver.support import expected_conditions as EC
3、示例
"""
1.学习目标
掌握toast操作方法
目的,获取toast中文本内容
作用,获取toast文本,有时候用在测试用例的断言中
2.操作步骤
2.1 找到触发toast出现的元素,并操作
2.2 获取toast中文本内容
借助selenium中显式等待,是WebDriverWait类
WebDriverWait(driver,最大等待时间,轮寻时间).(EC.presence_of_element_located(locator))
2.3 toast元索定位方法 xpath定位方法
driver.find element-by-xpath(//Lcontains(etext,'再按一次')1")
2.4 打印ltoast中文本的值
元素.text
2.5 注意事项
(1)需要在启动参数中添加一个参数(Desired capabilities对象)
'automationName': 'Uiautomator2'
(2)appium server版本1.6.3以上版本才支持。
3.需求
在文件管理器中实现toast获取
打开文件管理器app,点击返回,获取toast的值
"""
# 1.导入appium和TouchAction
import time
from appium import webdriver
# 添加WebDriverWait 类
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 2.创建Desired capabilities对象,添加启动参数
desired_caps = {
"platformName": "Android", # 系统名称
"platformVersion": "7.1.2", # 系统版本
"deviceName": "127.0.0.1:21503", # 设备名称
"appPackage": "com.cyanogenmod.filemanager", # APP包名
"appActivity": ".activities.NavigationActivity", # APP启动名
"automationName": "Uiautomator2" # 获取toast使用
}
# 3.启动APP
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
time.sleep(6)
# 4.操作APP,获取toast信息
# 打开文件管理器app,点击返回,获取toast的值
# 4.1 直接进入到文件管理器app,点击两下返回键,触发toast出现
driver.back()
# 4.2 定位(捕获)toast元素
# 定位器
locator = ("xpath", "//*[contains(@text,'再次点击')]")
# 定位
toast = WebDriverWait(driver, 10, 0.01).until(EC.presence_of_element_located(locator))
# 4.3 输出toast信息
print(toast.text)
# 5.关闭APP
time.sleep(3)
driver.quit()
4、封装toast判断
单独写一个函数来封装“判断是否存在toast消息”,存在返回True,不存在返回False。
# 1.导入appium和所需要的包
from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import time
# 2.创建Desired capabilities对象,添加启动参数
desried_caps = {
"platformName": "Android",
"deviceName": "9665cc4e",
"platformVersion": "7.1.1",
"appPackage": "com.baidu.yuedu",
"appActivity": "com.baidu.yuedu.splash.SplashActivity",
"automationName": "uiautomator2",
"noReset": True
}
def is_toast_exist(driver, text, timeout=30, poll_frequency=0.5):
"""
is toast exist, return True or False
:param driver: 传入driver
:param text: 页面上看到的文本内容
:param timeout: 大超时时间,默认30s
:param poll_frequency: 间隔查询时间,默认0.5s查询一次
:return: return True or False
Usage:
is_toast_exist(driver, "看到的内容")
"""
try:
message_loc = ("xpath", "//*[contains(@text,'%s')]" % text)
WebDriverWait(driver, timeout, poll_frequency).until(EC.presence_of_element_located(message_loc))
return True
except:
return False
if __name__ == "__main__":
driver = webdriver.Remote('http://localhost:4723/wd/hub', desried_caps)
print("打开百度阅读应用")
# 等主页面activity出现
# driver.wait_activity(".base.ui.MainActivity", 10)
time.sleep(15)
# 点击返回
driver.back()
print("点击返回成功")
# 判断是否存在toast'再按一次退出'
value = is_toast_exist(driver, "再按一次退出")
print("是否存在toast:", value)
# 5.关闭APP
time.sleep(2)
driver.quit()
『与善仁』Appium基础 — 29、获取toast信息的更多相关文章
- 『与善仁』Appium基础 — 8、Appium自动化测试框架介绍
目录 1.主流的移动端自动化测试框架 (1)Robotium (2)Macaca (3)Appium 2.自动化测试工具的选择 3.Appium简介 提示:我们前面说的Android环境搭建和adb命 ...
- 『与善仁』Appium基础 — 15、使用Appium的第一个Demo
我们使用Python语言作为测试脚本的编写语言. 执行脚本前提: Android模拟器或者手机是开机状态. 使用确保电脑和Android设备进行了链接. 也就是使用ADB命令adb connect链接 ...
- 『与善仁』Appium基础 — 3、ADB命令介绍
目录 1.ADB命令简介 2.ADB命令运行原理 3.通过ADB命令连接安卓模拟器 (1)安装安卓模拟器 (2)ADB命令连接安卓模拟器 (3)常用Android模拟器端口号 1.ADB命令简介 AD ...
- 『与善仁』Appium基础 — 4、常用ADB命令(一)
目录 1.启动和关闭ADB服务 2.查看ADB版本 3.指定adb server的网络端口 4.查询已连接设备/模拟器 5.获取安卓系统版本 6.为命令指定目标设备 7.发送文件到手机 8.从手机拉取 ...
- 『与善仁』Appium基础 — 9、补充:C/S架构和B/S架构说明
目录 1.C/S架构和B/S架构概念 2.C/S结构与B/S架构的区别 3.C/S架构和B/S架构优点和缺点 (1)B/S模式的优点和缺点: (2)C/S模式的优点和缺点: 1.C/S架构和B/S架构 ...
- 『与善仁』Appium基础 — 10、Appium基本原理
目录 1.Appium自动化测试架构 2.Appium架构图 3.Session说明 4.Desired Capabilities说明 5.Appium Server说明 6.Appium Clien ...
- 『与善仁』Appium基础 — 12、Appium的安装详解
目录 (一)Appium server安装 方式一:(桌面方式:推荐) 1.Appium Desktop下载 2.Appium Desktop安装 3.Appium Desktop使用 方式二:(No ...
- 『与善仁』Appium基础 — 14、Appium测试环境搭建
目录 1.Appium测试环境搭建整体思路 (1)Android测试环境搭建 (2)Appium测试环境搭建 (3)测试脚本语言的环境搭建 2.Appium在Android端和IOS端的工作流程 (1 ...
- 『与善仁』Appium基础 — 16、APPium基础操作API
目录 1.前置代码 2.安装和卸载APP 3.判断APP是否已安装 4.关闭APP软件和关闭驱动对象 5.发送文件到手机和获取手机中的文件 6.获取当前屏幕内元素结构(重点) 7.脚本内启动其他APP ...
随机推荐
- 对 SAM 和 PAM 的一点理解
感觉自己学 SAM 的时候总有一种似懂非懂.云里雾里.囫囵吞枣.不求甚解的感觉,是时候来加深一下对确定性有限状态自动机的理解了. 从 SAM 的定义上理解:SAM 可以看作一种加强版的 Trie,它可 ...
- Vue 中 $on $once $off $emit 详细分析,以及使用
vue的 $on,$emit,$off,$once Api 中的解释: $on(eventName:string|Array, callback) 监听事件 监听当前实例上的自定义事件.事件可以由 v ...
- azkaban执行任务长时间无法结束
问题显示: 由于一次执行较多的任务,导致azkaban的web程序崩溃,此时,关闭azkaban服务,重新启动azkaban 但是由于azkaban的exec程序无法关闭,这里采用kill的方式关掉e ...
- 间断有限元h自适应处理方法
细分单元 function Hrefine2D(refineflag) 根据refineflag变量细分单元,其中refineflag变量大小为 [Kx1],需要细分单元标记为1,不需要单元为0. 根 ...
- 在R语言中使用Stringr进行字符串操作
今天来学习下R中字符串处理操作,主要是stringr包中的字符串处理函数的用法. 先导入stringr包,library(stringr),require(stringr),或者stringr::函数 ...
- Excel-满足指定条件并且包含数字的单元格数目,DCOUNT()
DCOUNT函数 函数名称:DCOUNT 主要功能:返回数据库或列表的列中满足指定条件并且包含数字的单元格数目. 使用格式:DCOUNT(database,field,criteria) 参数说明:D ...
- CPU大小端模式及转换
通信协议中的数据传输.数组的存储方式.数据的强制转换等这些都会牵涉到大小端问题. CPU的大端和小端模式很多地方都会用到,但还是有许多朋友不知道,今天暂且普及一下. 一.为什么会有大小端模式之分呢? ...
- C#多个标题头合并
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) { switch (e.Row.RowType) ...
- 日常Java测试第二段 2021/11/12
第二阶段 package word_show; import java.io.*;import java.util.*;import java.util.Map.Entry; public class ...
- ajaxSubmit返回JSON格式
开发时遇到根据不同情况返回错误提示信息的需求,用到了ajax中返回json格式数据的. 前台请求代码: <script type="text/javascript"> ...