python 自动化中强制等待、隐形等待、显性等待

本贴最后更新于 540 天前,其中的信息可能已经水流花落

python-web自动化中为什么要设置等待:

因为页面不是立即就把所有的元素加载到网页当中,有些操作需要等待页面元素能被加载出来才能正常执行,否则就会报错,因此就需要用到元素等待:

强制等待、隐形等待、显性等待

使用策略:为提高自动化的效率,一般使用强制等待的较少(不建议使用),考虑先用隐形等待,如果还是加载不出来,就使用显性等待)

强制等待:

import time
from selenium import webdriver

driver = webdriver.Chrome()
# 进入页面
url = 'https://petstore.octoperf.com/actions/Catalog.action'
driver.get(url)

time.sleep(3)  #强制等待3秒

#强制等待,不管你浏览器是否加载完,程序都得等待3秒,3秒一到,继续执行下面的代码,不建议经常使用这种强制等待方法

隐形等待:

from selenium import webdriver

driver = webdriver.Chrome()

# 设置隐性等待的时间为 10s
driver.implicitly_wait(10)

# 进入页面
url = 'https://petstore.octoperf.com/actions/Account.action'
driver.get(url)

#隐形等待是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步.注意这里有一个弊端,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步,但有时候页面想要的元素早就在加载完成了,但是因为个别js之类的东西特别慢,就仍得等到页面全部完成才能执行下一步

隐形等待很重要的一个特点:整个模块只需要设置一次;且只能用来查找元素,表示等待元素被加载(若需要被点击等其他操作,可能会失效,因此就需要用到显性等待)

显性等待:

WebDriverWait,配合该类的until()和until_not()方法,就能够根据判断条件而进行灵活地等待了。它主要的意思就是:程序每隔xx秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException。

from selenium import webdriver
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.Chrome()

# 进入页面
url = 'https://petstore.octoperf.com/actions/Account.action'
driver.get(url)

# 1, 得到一个等待器
wait = WebDriverWait(driver, timeout=10)
# 2, 使用等待器,等待直到某个条件被满足
locator = ('name', 'signon')
# 3, 等待元素可以被点击
wait.until(expected_conditions.element_to_be_clickable(locator))

el = driver.find_element('name', 'signon')
el.click()

image.png

显性等待主要是为了等待某个元素可见,可点击等各种操作,可以根据需求选择不同的等待元素出现的方式

2 操作
13720245816 在 2022-11-03 21:02:33 更新了该帖
13720245816 在 2022-08-24 10:43:29 更新了该帖
回帖
请输入回帖内容 ...