python+Appium组合等待方式(显性等待)

本文介绍如何避免Appium UI自动化测试中因元素未加载而报错,通过显性和隐式等待实现元素查找的稳定。作者分享了使用WebDriverWait进行30秒显性等待和XPath定位的方法,以及如何在找不到元素时优雅处理异常。
摘要由CSDN通过智能技术生成

写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 webdriver
from 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()


 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值