一、基本概念
1、隱式等待(implicitly_wait)
等待一個元素被發現,或一個命令完成,超出了設置時間則拋出異常,此爲全局變量,是針對Driver 每次執行命令的 最長執行時間也可以理解爲超時時間。
2、顯式等待(WebDriverWait)
明確的要等到某個元素的出現或者是某個元素的可點擊等條件,每隔poll_frequency=0.5(默認值)查找一下元素,等不到,就一直等,除非在規定的時間timeout之內都沒找到,那麼就跳出Exception。
3、強制等待(time.sleep(x))
指定等待時間,不管元素是否存在。使用time模塊提供的sleep方法,腳本在等待sleep(x) x秒後才執行。
二、代碼示例
import time
import unittest
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
class WaitTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.driver = webdriver.Firefox()
cls.driver.maximize_window()
cls.driver.get("https://www.baidu.com")
def test_sleep_wait(self):
time.sleep(3) #強制等待3秒
self.driver.find_element_by_id('kw').send_keys("軟件測試")
self.driver.find_element_by_id('su').click()
self.assertEqual(self.driver.title, "軟件測試_百度搜索")
def test_webdriver_wait(self):
self.search_field = WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, 'kw')))
self.search_field.send_keys("軟件測試")
self.assertTrue(self.search_field.is_enabled())
def test_implicitly_wait(self):
self.driver.implicitly_wait(10) #隱式等待,最多等10秒
self.driver.find_element_by_id('kw').send_keys("軟件測試")
self.driver.find_element_by_id('su').click()
self.assertEqual(self.driver.title, "軟件測試_百度搜索")
@classmethod
def tearDownClass(cls):
cls.driver.quit()
if __name__ == "__main__":
unittest.main(verbosity=2)