显式等待:
显式等待是一种在自动化测试中使用的技术,主要用于等待特定条件出现之后再继续执行。换句话说,当我们在编写Selenium测试脚本的时候,如果某个Web元素或某个条件需要花费一定时间才能出现或被满足,那么我们可以使用显式等待来进行处理。
显式等待会以固定的时间间隔检查是否满足了某个特定条件,一旦满足条件,就会继续执行后续操作;否则会等待一段时间,直到超时为止:
显式等待在Selenium中可以通过WebDriverWait类和ExpectedConditions类来实现。
driver = webdriver.Chrome()
driver.get("http://example.com")
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "myElement"))
)
finally:
driver.quit()
1)上面的代码表示等待最长10秒,直到某个ID为"myElement’"的元素出现在页面上。
2) 与隐式等待的区别:隐式等待和显式等待都是用来处理延迟的问题,但有所不同。隐式等待是全局性的,它规定了一个时间段,被用于查找所有元素的等待。对比显式等待,它更加精确且能针对特定的条件进行等待。
3) 好处和注意事项:
减少脚本失败率:显式等待根据实际情况选择合适的等待时间,可以减少因为页面加载问题等原因导致的脚本失败。
性能优化:虽然显式等待起到了延迟的作用,但因为它是按条件检查的,比固定时间的sleep函数优化了性能:
注意超时设定:超时时间设置要合理,过短会导致等待不够,过长会浪费时间。合理评估应用的实际动加载时间是关键。
隐式等待:
隐式等待(Implicit Wait)是Selenium中的一种等待机制,用来解决WebDriver在尝试查找并操作元素时,元素还未加载完全的问题。
设置隐式等待后,WebDriver在尝试定位元素时,会在指定的时间内不断地重新尝试查找元素,一旦找到元素就立即执行接下来的操作,而不是等到时间结束。如果在指定的时间内找不到元素,才会抛出NoSuchElementException。
隐式等待通常在用例一开始设置全局等待时间,应用于整个WebDriver的生命周期。
在Selenium中使用隐式等待,可以使用implicitly_wait方法。例如,在Python中是这样设置的:
# 实例化浏览器驱动
driver = webdriver.Chrome()
# 设置隐式等待时间为10秒
driver.implicitly_wait(10)
# 尝试查找元素,如果在10秒内找到,立即执行接下来的操作:否则抛出异常
element = driver.find_element_by_id("some_element_id")
显式等待和隐式等待的区别
隐式等待是声明一次,整个WebDriver实例在查找元素时都会使用这个等待时间。
显式等待(Explicit Wait)是针对某个特定的元素在指定条件下等待,通常是与WebDriverWait和ExpectedConditions配合使用。例如:
# 设置显式等待时间为10秒
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID,"some_element_id")))
1)隐式等待的适用场景:
隐式等待适用于页面加载时间相对稳定、而且很少有需要等待特定条件的场景。这种情况下使用隐式等待,可以让代码更简洁、减少代码的复杂度。
2)隐式等待的局限性:
尽管隐式等待可以全局设置,减少代码的设置频率,但它并不适用于所有场景。对于页面内容变化特别频繁、或者需要特定条件时,更推荐使用显式等待。
另外,隐式等待设置时间过长可能会导致测试用例执行时间过长,因此要合理设置等待时间。
3)隐式等待的最佳实践:
当页面加载时间不稳定的时候,结合使用隐式等待与显式等待效果会更好。隐式等待解决常见的加载延迟问题,而显式等待针对具体条件进行优化。
在实际项目中,我通常会根据元素特性及页面复杂程度来决定使用哪种等待方式,以提高自动化测试的鲁棒性和效率。