Appium + Python自动化测试学习之四:Toast元素定位

一.认识Toast提示框

Toast提示框是一种非模态弹窗,它弹出一个小信息,作为提醒或消息反馈来用,一般用来显示操作结果,或者应用状态的改变。例如你发出了一条短信,App弹出一个Toast提示你消息已发出。

最常见的Toast提示框为一句简短的描述性文字。这种样式的弹窗可以出现在页面的任何位置,可设置成在页面顶部、中部或者在底部出现(但一般都是出现在页面的中轴线上),具体的显示位置根据页面的整体设计进行设置。该种Toast在安卓App上十分常见。

还有一种Toast弹窗由简单的图形和简短的文字组成,显示位置一般位于页面正中央。这种Toast在iOS和安卓上都可以经常见到。在这里插入图片描述
Toast提示框显示的时间较短,一般只有几秒种就会自动消失,因此我们用传统的定位工具是无法定位到该元素的,那么我们该如何获取这些元素文字内容呢?
Appium1.6.3开始支持识别toast,且是基于uiautomator2,因此需要搭建一下相关测试环境。

二.环境搭建

1.安装node js

进入官网下载:https://nodejs.org/en/ 下载node js安装。安装完成配置环境变量后验证:

$ npm -v

2.安装npm包

进行npm包的安装,此时可以将npm换成淘宝的镜像,可以提高程序运行速度,分享一下切换淘宝源的两种方法:

1.通过config命令

npm config set registry https://registry.npm.taobao.org

2.命令行方式(本文以此为例)

npm --registry https://registry.npm.taobao.org info underscore

3.安装uiautomator2

命令如下:

$ cnpm install appium-uiautomator2-driver

安装完成显示如下:
在这里插入图片描述在安装目录下找到这两个文件就说明安装成功,安装目录可以按照上图标记的内容进行查找:
在这里插入图片描述[外链图片转存失败,源站可能有防盗在这里插入!链机制,建描述]议将图片上https://传(imblog.-nimq.cn/LYgo20200303213454621pg8)(htts://img-blog.csdnimg.cn/20200303213454621.png)]
在这里插入图片描述

4.安装Selenium

命令如下:

$ pip install selenium

验证安装成功:

$ pip show selenium

PS:测试环境

jdk版本:1.8.0_241
appium版本:1.9.1 (不能低于1.6.3)
selenium:3.6.0
测试设备:Android 6.0.1
Python:3.6.2
测试App:作业帮

三.编辑识别toast元素的脚本

步骤一:初始化

在capability配置内部增加:

desired_caps['automationName']='Uiautomator2'

步骤二:定位toast元素

(1)定义toast文本内容

(2)定义路径

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

脚本:

error_message="手机未注册或密码错误--请重"
message='//*[@text=\'{}\']'.format(error_message)
toast_element=WebDriverWait(driver,5).until(lambda x:x.find_element_by_xpath(message))
print(toast_element.text)

说明:

连接不同的类型的变量或内容format()

显示等待:webdriver(driver,5)

driver是webdriver的驱动程序,5是超时时间,以秒为单位

WebDriverWait()一般由 until()或 until_not()方法配合使用,下面是 until()和 until_not()方法的说明。
until(method, message=’’)

调用该方法提供的驱动程序作为一个参数,直到返回值不为 False。
 
until_not(method, message=’’)
 
调用该方法提供的驱动程序作为一个参数,直到返回值为 False。

动态函数:lambda x:x+5

   X是函数的参数,冒号后面是函数的返回值

实例代码如下:


# coding:utf-8
from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import os
PATH = lambda p: os.path.abspath(os.path.join(os.path.dirname(__file__), p))
print(PATH("../zuoyebang_648.apk"))
des={
    'platformName':'Android',
    'platformVersion':'6.0.1',
    'deviceName':'127.0.0.1:21305',
    'appPackage': 'com.baidu.homework',
    'appActivity':'com.baidu.homework.activity.index.IndexActivity',
    'app':PATH("../zuoyebang_648.apk"),
    'noReset': False,
    # 输入中文参数配置
    "unicodeKeyboard": True,
    "resetKeyboard": True,
    'automationName': 'Uiautomator2' # 捕获toast消息
}

driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub',des)

# 点击未登录按钮
driver.find_element_by_id("com.baidu.homework:id/rl_login_guide_layout").click()
# 点击密码登陆
driver.find_element_by_id("com.baidu.homework:id/sll_password").click()
# 设置隐式等待时间10s

driver.find_element_by_id("com.baidu.homework:id/passport_phone_number_input_edit").send_keys("11111111111")
    # 输入密码
driver.find_element_by_id("com.baidu.homework:id/passport_password_input_view").send_keys("223duydy7y")
driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.baidu.homework:id/tv_phone_enter")').click()

message='手机号未注册或者密码错误'

xx="//*[contains(@text,\'{}\')]".format(message)

ele=WebDriverWait(driver,10,).until(lambda c:c.find_element_by_xpath(xx),message="超时")
print(ele.text)
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值