为什么要用等待时间:
- 今天在写App的自动化的脚本时发现一个元素,时而能点击,时而又不能点击到,很是心塞,原因是:因为元素还没有被加载出来,查找的代码就已经被执行了,自然就找不到元素了.解决方式:可以用等待,等元素加载完成后再执行查找元素语句。
Python里有三种等待的方式:
强制等待
from time import sleep
sleep(10) # 表示强行等待10s在执行下一句代码
driver.findelementby(id) 这种等待方式时间到了就会执行下个语句,但比较死板,不能保证在等待的时间内元素真正被加载了出来。
隐性等待
- Implicitly_wait(xxx)
- 这个等待表示在规定的时间内页面的所有元素都加载完了就执行下一步,否则一直等到时间截止,然后再继续下一步。
- driver.implicitly_wait(10)#等待10s
- driver.find_element_by_id(common_util.get_id_value('IMAGEID')).click()
- 这个方法的缺点是你需要的元素已经加载出来了,但页面还没有加载完,再需要继续等待页面加载完才能执行下一步操作。
显性等待
- WebDriverWait,配合该类的until()和until_not()方法,表示程序每隔x秒去判断一下指定的元素是否加载完,加载完了就执行下一步,否则继续每隔x秒去判断,指定时间截止。如果超时就会抛出异常。
- 需要导入的包
a)
fromselenium
importwebdriver
b)
fromselenium.webdriver.support.wait
importWebDriverWait
c)
fromselenium.webdriver.support
importexpected_conditions
asEC
d)
fromselenium.webdriver.common.
byimport
By
locator=(By.XPATH,”xxxxxxx”)
d = webdriver.Chorme()
d.get(“http:
//www.sina.com”)
WebDriverWait(d,
10,
1).unitl(EC.presence_of_element_located(locator))
WebDriverWait(driver, 30, 0.5).until(EC.visibility_of_element_located((By.ID,common_util.get_id_value('MYID')))) 3. 这里表示等待30s,每隔0.5s去检查一次元素是否出现,出现了就执行下一步,直到30s结束后还没有出现就会抛出异常。
实例讲解: https://www.cnblogs.com/yuuwee/p/6635652.html
参考博客: http://blog.51cto.com/laomomo/2073418