Selenium 元素等待简单使用

tech2026-01-11  18

Selenium 元素等待

在做web自动化测试时,有些时候需要等待页面上的元素加载完之后,才能操作,不然元素定位就会超时,程序就会抛出ElementNotVisibleException异常。
1. 强制等待 sleep
sleep()是time模块中的方法,用来做强制等待,缺点:不管元素有没有加载出来,它都会等待这么久,会造成元素已经加载出来了,但是由于设置等待时间的原因,还会在等待中,效率低,还有一种就是元素还没有加载出来,但是等待的时间已经到,就不在等待,代码就会报错 from selenium import webdriver import time # time 的用法 # 创建浏览器驱动 driver = webdriver.Chrome() # 打开百度地址 driver.get("http://www.baidu.com") # 设置等待3秒 time.sleep(3) # 定位元素 web01 = driver.find_element_by_xpath('//input[@id="kw"]') web01.send_keys("天气预报")
2. 隐式等待 implicitly_wait
implicitly_wait()是webdriver 中的方法,使用隐式等待,在一个模块中定位每个元素的时候都会自动调用隐式等待,当调用的元素加载出来以后,隐式等待就不会在等待了,超过设置的等待时间,就会报错 from selenium import webdriver # 隐私等待 driver = webdriver.Chrome() driver.get("http://wwww.baidu.com") # 设置最大的等待时间,如果超过这个时间,程序就会报错 driver.implicitly_wait(20) web01 = driver.find_element_by_xpath('//*[@class="s_ipt" and @name="wd"]') web01.send_keys("python")
3. 显示等待WebDriverWait
WebDriverWait() 在指定的时间范围内,等待到符合的元素,每隔x秒去判断一下指定的元素是否加载完,如果超时则抛出异常 from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get("http://www.baidu.com") ''' 第一个参数:驱动 第二个参数:超时时间 第三个参数:轮训时间 ''' wait = WebDriverWait(driver, 30, 0.2) # 定位器 是元祖类型的 locator01 = ("xpath", "//input[@id='kw']") # 条件 ec01 = EC.element_to_be_clickable(locator01) ec02 = wait.until(ec01) print(ec02)
最新回复(0)