关于appium的显式等待

最近学习appium的显示等待,觉得有点难,一直云里雾里的感觉,尤其是对untill的用法,比如这段代码:

    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()

其中的WebDriverWait(driver, 30, 0.5).until(lambda el2: driver.find_element(By.XPATH, acc))里面的 el2 是随便写的吗?在代码中找不到,又不知道代表啥?看了几个帖子写的都不同,特此请教~

appium是继承的selenium 多看下selenium文档
首先你看until接收的第一个参数是method==方法也就是函数
所以这里用了匿名函数lambda
匿名函数格式 lambda 参数 : 返回值
所以 until里面返回的是个函数 driver.find_element(By.XPATH, acc) 符合要求
el2是匿名函数的参数,这里返回值不需要他 所以随便写

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    el2是可以随便起的名字,它代表传递给lambda函数的参数,lambda函数的作用是判断条件是否满足,如果满足就执行下一步操作。在这里,el2就是driver.find_element(By.XPATH, acc)返回的元素对象。lambda函数中的el2可以如此理解:在等待时间内,如果找到id为acc的元素,则继续执行下一步操作;如果时间到了还没有找到id为acc的元素,则抛出TimeoutException异常。在这个lambda函数中建议使用一个有意义的名字来表示传递的参数,可以使代码更加容易理解。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^