UI自动化经常出现定位元素失败的情况,因为页面还在加载并没有加载完的时候,定位已经在执行了,就会出现页面根本没有找到要定位的元素;
影响页面加载速度因素:页面大小,服务器性能,网络速度,执行机性能
碰到定位不到元素的情况就需要设置等待了,等待类型常用的方式分为三中:强制等待,隐式等待,显式等待
1.强制等待:固定等待n秒,执行下一步操作
import time
time.sleep(n)
2.隐式等待:设置最长等待时间n秒,在这个时间内已经加载完成,自动化执行下一步;最多等待时间n秒仍未完成,不再等待直接执行下一步
from selenium import webdriver
driver = webdriver.Chrome()
#实例化直接调用implicitly_wait方法设置最大时间,同一页面后续的find_element方法都会有上面的隐式等待
driver.implicitly_wait(n)
driver.find_element_by_xpath("//input[@id=‘kw’]").click()
3.显式等待:定位元素时,每隔n秒定位该元素,如果定位成功,就直接返回该元素,如果达到最大等待时间m秒仍然未定位成功,那么就返回超时错误
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
WebDriverWait(driver,m,n).until(EC.visibility_of_element_located((By.ID,"login_user")))