博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python+Appium组合等待方式(显性等待)
阅读量:30399 次
发布时间: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/

你可能感兴趣的文章
走进JavaWeb技术世界9:Java日志系统的诞生与发展
查看>>
走进JavaWeb技术世界10:从JavaBean讲到Spring
查看>>
走进JavaWeb技术世界11:单元测试框架Junit
查看>>
走进JavaWeb技术世界12:从手动编译打包到项目构建工具Maven
查看>>
走进JavaWeb技术世界13:Hibernate入门经典与注解式开发
查看>>
走进JavaWeb技术世界14:Mybatis入门
查看>>
走进JavaWeb技术世界16:极简配置的SpringBoot
查看>>
初探Java设计模式1:创建型模式(工厂,单例等)
查看>>
初探Java设计模式2:结构型模式(代理模式,适配器模式等)
查看>>
初探Java设计模式3:行为型模式(策略,观察者等)
查看>>
初探Java设计模式4:一文带你掌握JDK中的设计模式
查看>>
初探Java设计模式5:一文了解Spring涉及到的9种设计模式
查看>>
Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理
查看>>
Java集合详解2:一文读懂Queue和LinkedList
查看>>
Java集合详解3:一文读懂Iterator,fail-fast机制与比较器
查看>>
Java集合详解4:一文读懂HashMap和HashTable的区别以及常见面试题
查看>>
Java集合详解5:深入理解LinkedHashMap和LRU缓存
查看>>
Java集合详解6:这次,从头到尾带你解读Java中的红黑树
查看>>
Java集合详解7:一文搞清楚HashSet,TreeSet与LinkedHashSet的异同
查看>>
Java集合详解8:Java集合类细节精讲,细节决定成败
查看>>