Python selenium

Python selenium等待的区别

强制等待 sleep()

1
2
3
4
5
import time
driver = webdriver.FirefoxProfile()
driver.get('http://ehrtest.source3g.com/auth//#/login?ehr')
time.sleep(10) # 强制等待10秒
driver.quit()

优点:简单方便.
缺点:缺点时不智能,设置的时间太短,
元素还没有加载出来,那照样会报错;设置的时间太长,
则会浪费时间,不要小瞧每次几秒的时间,case多了,
代码量大了,很多个几秒就会影响整体的运行速度了.


隐性等待 implicitly_wait()

1
2
3
4
5
from selenium import webdriver
driver = webdriver.FirefoxProfile()
driver.implicitly_wait(20) # 隐性等待,最长等30秒
driver.get('http://ehrtest.source3g.com/auth//#/login?ehr')
driver.quit()

优点:简单方便.
缺点:因为随着ajax技术的广泛应用,
页面的元素往往都可以时间局部加载,
也就是在整个页面没有加载完的时候,
可能我们需要的元素已经加载完成了,
那就么有必要再等待整个页面的加载
执行进行下一步,而隐性等待满足不了这一点.


显性等待(WebDriverWait)

selenium中的wait模块的WebDriverWait()方法,
配合until或者until_not方法,再辅助以一些判断条件,
就可以构成这样一个场景:每经过多少秒就查看一次locator的元素是否可见,
如果可见就停止等待,如果不可见就继续等待直到超过规定的时间后,报超时异常。

1
2
3
4
5
6
7
8
9
from selenium import webdriver  
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Firefox()
driver.get('http://ehrtest.source3g.com/auth//#/login?ehr')
WebDriverWait(driver,20,0.5).until(EC.presence_of_element_located((By.XPATH, './/*[@id='app']/div/div[2]/form/div[3]/button')))
driver.implicitly_wait(20)
driver.close()
1
2
3
20:最长等待时间。
0.5:检查间隔时间,每隔0.5秒检查一次操作是否完成。
EC.presence_of_element_located(locator):判断目标元素是否已经成功加载.

热评文章