概述
文章目录
- 【1】强制等待 sleep(秒)
- 【2】隐形等待 implicitly_wait(秒)
- 示例代码:
- 【3】显性等待
- 使用步骤如下:
- 1、使用之前,引入相关的库:
- 2、先确定元素的定位表达式
- 3、调用webDriverWait 类设置等待总时长、轮询周期
- 4、使用expected_conditions 对应的方法来生成判断条件
- 综合使用示例:
- 以下是列举的expected_conditions 模块中的部分条件类:
【1】强制等待 sleep(秒)
如果使用sleep(10),表示让程序四等10秒钟。无论发生什么事,都会在10秒后再去执行后续的代码
【2】隐形等待 implicitly_wait(秒)
设置最长等待时间,在这个时间内只要有个时间点加载完成,则执行下一步代码,比sleep 智能,能够自主判断。
但是,整个driver 的会话周期,设置一次即可,全局都可用。
示例代码:
腾讯课堂的登录操作
1)访问腾讯课堂首页; 2)点击首页的登录链接,弹出登录窗口;
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://ke.qq.com/")
driver.maximize_window()
#设置全局等待
driver.implicitly_wait(30)
driver.find_element_by_id("js_login").click()
【3】显性等待
使用WebDriverWait 类和expected_conditions 模块
明确等到某个条件满足之后,再去执行下一步操作
程序每隔XX秒看一眼,如果条件成立了,则执行下一步,否则继续等待,知道超过设置的最长时间,然后抛出TimeoutException
WebDriverWait 类:显性等待类
WebDriverWait (drvier,等待时长,轮循周期).until/until_not(判断条件)
判断条件如等待页面某个元素课件,等待新的窗口出现,等待元素包含某个文本内容
expected_conditions 模块,提供了一系列期望发生的条件
使用步骤如下:
1、使用之前,引入相关的库:
from selenium.webdriver.support.wait import
WebDriverWait
from
selenium.webdriver.support import
expected_conditions as EC
from
selenium.webdriver.common.by import By
2、先确定元素的定位表达式
web_locator =“XXX”
3、调用webDriverWait 类设置等待总时长、轮询周期
WebDriverWait (drvier,等待时长,轮循周期).until/until_not(判断条件)
4、使用expected_conditions 对应的方法来生成判断条件
EC.方法名((定位方式、定位表达式))
例:EC.presence_of_element_located((By.CSS_SELECTOR,web_locator))
注意:因为元素定位有八种方式,所以需要提供定位方式和定位表达式。这里用元组来表示
综合使用示例:
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.Chrome()
#定位表达式
- id方式定位
login_popup_id ="TANGRAM_PSP_10_footerULoginBtn"
#调用显示等待 - WebDriverWait 类实例化,并使用until 方法
#使用 visibility_of_element_located 类来表示条件;元素可见
#等待10s,每0.5s去看看login_popup_id对应的元素是否可见,如果可见,等待结果。如果不可见,则继续等待,知道10s,如果还是元素不可见,那么就抛出超时异常
WebDriverWait(driver,10,0.5).until(EC.visibility_of_element_located((By.ID,login_popup_id)))
以下是列举的expected_conditions 模块中的部分条件类:
- title_is :判断当前页面的title 是否精确等于预期
- title_contains :判断当前页面的title 是否包含预期字符串
- visibility_of_element_located :判断某个元素是否课件,课件代表元素非隐藏,并且元素的宽和高都不等于0
- presence_of_all_elements_located
:判断是否至少有1个元素存在于dom树中。举个例子,如果页面上有n个元素的class都是’column-md-3’,那么只要有1个元素存在,这个方法就返回TRUE - text_to_be_present_in_element :判断某个元素中的text 是否包含了预期的字符串
text_to_be_present_in_element_value:判断某个元素中的value属性是否包含了预期的字符串 - frame_to_be_available_and_switch_to_it:判断某个元素是否可以switch
进去,如果可以的话,返回TRUE并且switch 进去,否则返回False - invisibility_of_element_located :判断某个元素是否不存在于dom树或不可见
element_to_be_clickable:判断某个元素是否可见并且是enable 的,这样的话才叫clickble - staleness_of:等某个元素从dom 树中移除,注意这个方法也是返回True或False
- element_to_be_selected : 判断某个元素是否被选中了,一般用于下拉列表中
- element_selection_state_to_be:判断某个元素的选中状态是否符合预期
- element_located_selection_state_to_be:跟上面的方法使用一样,只是上面的方法传入定位到的element,而这个方法传入locator
- alert_is_present:判断页面上是否存在alert
最后
以上就是淡定手套为你收集整理的selenium 设置元素三种等待方式的全部内容,希望文章能够帮你解决selenium 设置元素三种等待方式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复