我是靠谱客的博主 淡定手套,最近开发中收集的这篇文章主要介绍selenium 设置元素三种等待方式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

        • 【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 设置元素三种等待方式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部