等待机制

一般在做UI自动化时,会有等待几秒钟的操作,今天咱们来看看,有哪些常见的等待机制

1、强制等待:
    import time
    time.sleep() tips:实际工作中用的很少

2、隐式等待:比强制等待更加智能,相当于全局等待,设置一次对driver对象的整个生命周期
                     不管在哪个地方都会等它加载出来再去定位,默默的等待元素出现,元素出现了继续往下执行
                     超过设置的等待时间仍没有出现,则报错超时异常
                     driver.implicitly_wait(15)

3、显式等待:指定条件进行等待
    等待元素被加载
    等待元素可见
    等待元素可点击
tips:加载出来并不等于可见,加载只是显示出页面上所能展示的内容,此时若滚动条往下滑,
       还有其他的内容,如果不往下滑动,你是看不到的,但是已经加载出来了,所以,这两个有区别

1、强制等待

import time

from selenium.webdriver import Chrome

driver = Chrome()
driver.get("http://www.baidu.com")

driver.find_element_by_id("kw").send_keys("王者荣耀")
driver.find_element_by_id("su").click()
# 下面是强制等待
time.sleep(3)
driver.find_element_by_id('1')

time.sleep(2)
driver.quit()

2、隐式等待

import time

from selenium.webdriver import Chrome

driver = Chrome()
driver.get("http://www.baidu.com")
# 设置隐式等待
driver.implicitly_wait(15)

driver.find_element_by_id("kw").send_keys("王者荣耀")
driver.find_element_by_id("su").click()

driver.find_element_by_id('1')

time.sleep(2)
driver.quit()

3、显式等待

import time

from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = Chrome()
driver.get("http://www.baidu.com")

driver.find_element(By.ID, "kw").send_keys("王者荣耀")
driver.find_element(By.ID, "su").click()

locator = (By.ID, '1')
# 等待id为1的元素加载到页面上,再往下执行
WebDriverWait(driver, 15, 0.5).until(
    EC.presence_of_element_located(locator)
)
# 等待id为1的元素在页面处于可见状态
WebDriverWait(driver, 15, 0.5).until(
    EC.visibility_of_element_located(locator)
)

# 等待id为1的元素在页面处于可点击状态
WebDriverWait(driver, 15, 0.5).until(
    EC.element_to_be_clickable(locator)
)

time.sleep(2)
driver.quit()

在工作中,后两种常用,尤其是第三种的显式等待,因为涉及到js等方面的操作,所以显式等待也得掌握

posted @ 2021-05-08 15:29  excellent_1  阅读(103)  评论(0)    收藏  举报