博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python+Appium组合等待方式(显性等待)
阅读量:30398 次
发布时间:2020-01-04

本文共 1921 字,大约阅读时间需要 6 分钟。

写UI自动化脚本时候,总会出现使用appium的报错,没有找到元素, (An element could not be located on the page using the given search parameters.)

很多原因是,app未加载完成,我们代码就已经执行了该元素的操作指令.

为了搞明白如何规避此类报错,建议大家可以看看我如何解决,或查找下,appium的三种等待方式,

我使用了显性等待方式:

显式等待 WebDriverWait(driver,等待时间,多长时间刷新一次,默认0.5s),该等待中有两个方法

until(元素位置,需要传一个元组,元组中有两个值,一个是定位位置方式,一个是定位的元素),

until_not()用法和until一样

until() 判断,直到返回值为true,执行下一步

nutil_not 判断,直到返回值为false 执行下一步

等待元素加载完成后继续,如果规定时间没有加载完成,继续执行下一步

需要导入的包:

from appium import webdriverfrom selenium.webdriver.common.by import By #定位from selenium.webdriver.support.wait import WebDriverWait #导入显性等待的包

下方展示如何定位:

使用ID去定位查找元素,使用nutil_not 判断,总查找30s,每0.5s检索一次,当元素消失,则返回false, 继续执行下一步,如果一直为True,超过三十秒则会异常.异常可用try去控制

WebDriverWait(driver, 30, 0.5).until_not(lambda el2: driver.find_element(By.ID, "iv_ble_offline"))  #until_not 返回结果为false

如果想使用until定位为同理:

使用XPATH去定位查找元素 ,总查找30s,每0.5s检索一次,当元素存在,则返回True,继续执行下一步,此方式适用于很多场景,包括app加载还没有完成,元素还没有出现,当然你也可以使用其他方式定位都是可以,只要lambda表达式写的没错 都行.

WebDriverWait(driver, 30, 0.5).until(lambda el2: driver.find_element(By.XPATH, acc))

以下我展示我使用此方法的完整代码

def JXB(self):        try:                driver = webdriver.Remote('http://localhost:4723/wd/hub', camera_Tuya_app)                # print('开启机械臂app')                time.sleep(6)                WebDriverWait(driver, 30, 0.5).until_not(lambda el2: driver.find_element(By.ID, "iv_ble_offline"))  #until_not 返回结果为false                driver.find_element(By.XPATH,"//*[@content-desc='ty_home_device_name']").click()                WebDriverWait(driver, 30, 0.5).until(lambda el2: driver.find_element(By.XPATH, acc))                driver.find_element(By.XPATH,acc).click()                keys_time =time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())                print('按门铃成功'+keys_time)                keys_time_l.append(keys_time)            # time.sleep(30)        except:            print('可控崩溃,5s重新开启')            time.sleep(5)            return self.JXB()

 

转载地址:http://dvbhbu.baihongyu.com/

你可能感兴趣的文章
codeforces 789A(数学)
查看>>
Codeforces 796A
查看>>
dp46上 HDU2084
查看>>
dp46上 HDU1421
查看>>
UESTC 1324线段树
查看>>
POJ1651 区间dp
查看>>
spfa、Dijkstra、Floyd算法最短路算法详解
查看>>
HDU4725(spfa+双端队列优化)
查看>>
高斯消元法(Gauss Elimination) 分析 & 题解 & 模板—czyuan原创
查看>>
PowerOj 2392(树状数组 or CDQ分治)
查看>>
HDU 6119(区间交叉问题)
查看>>
hdu 6143(精妙的递推)
查看>>
数位dp
查看>>
Power oj 2540 (FFT卷积)
查看>>
hdu 6165(dfs or bfs or tarjan+topsort)
查看>>
hdu 6168(stl)
查看>>
hdu 6170(正则表达式)
查看>>
排列组合 "n个球放入m个盒子m"问题 总结(转)
查看>>
codeforces845C(stl)
查看>>
图的几种存储方式(邻接矩阵+邻接表+vector)
查看>>