appium之toast处理

注意

toast要appium1.6.3以上版本才支持,Android 5.0以上(需使用夜神多开模拟器),jdk1.8且配置了环境变量。

toast定位

1.先看下toast长什么样,如下图,像这种弹出来的消息"再按一次退出",这种就是toast了。

appium之toast处理_第1张图片

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

appium之toast处理_第2张图片

3.打印出来的结果,出现如下信息,说明定位到toast了

封装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/xiaohuhu/p/9895596.html

你可能感兴趣的:(appium之toast处理)