什么是显式等待?
在appium 中 可以通过implicitly_wait设置隐式等待时间,即一个全局等待元素出现的最长时间。
隐式等待设置完成后,可以一直等待到元素出现,如果在设置的最长时间内元素没有出现,则会报元素找不到错误。
显示等待提供了一些自定义的元素等待方法,可以通过设置自己定义等待的方法来进行扩展。
使用方式
WebDriverWait(driver, 10).until(lambda x:自定义)
实际应用的场景
比如应用中有时会弹出版本升级对话框,或者做某些操作如果用户登录信息失效的时候需要重新登录,这个时候可以使用显示等待来进行操作。

如果用户没有登录,则需要先登录才能继续发帖。
from appium import webdriverimport unittestfrom selenium.webdriver.support.wait import WebDriverWaitclass TestAPP(unittest.TestCase):def setUp(self) -> None:caps = {}caps["automationName"] = "UiAutomator2"caps["platformName"] = "Android"caps["platformVersion"] = "5"caps["deviceName"] = "127.0.0.1:21503"caps['appPackage'] = "org.cnodejs.android.md"caps['appActivity'] = ".ui.activity.LaunchActivity"caps['noReset'] = Truecaps['fullReset'] = Falseself.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", caps)self.driver.implicitly_wait(20)def test_alert(self):def handler_login(x):token = '527e85d4-cd50-468c-8003-b804651fba09'xpath = '//android.widget.Button[@text="登录"]'if len(self.driver.find_elements_by_xpath(xpath)) > 0:self.driver.find_element_by_xpath(xpath).click()self.driver.find_element_by_xpath('//*[@resource-id="org.cnodejs.android.md:id/edt_access_token"]').send_keys(token)self.driver.find_element_by_xpath('//*[@resource-id="org.cnodejs.android.md:id/btn_login"]').click()return Trueelse:return Falseself.driver.find_element_by_id('org.cnodejs.android.md:id/fab_create_topic').click()# WebDriverWait(self.driver, 10, 0.3).until(lambda x : True)try:WebDriverWait(self.driver, 10, 0.3).until(handler_login)self.driver.find_element_by_id('org.cnodejs.android.md:id/fab_create_topic').click()except:passself.driver.find_element_by_id('org.cnodejs.android.md:id/edt_title').send_keys("hello world")
