selenium等待方式详解
这些方式仅供参考,实际使用体验并不好,最好对find_element()方法进行二次封装。
# coding=utf-8
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait url = "http://www.baidu.com"
driver = webdriver.Chrome()
'''隐式等待和显示等待都存在时,超时时间取二者中较大的'''
driver.implicitly_wait(5)
driver.get(url)
wait = WebDriverWait(driver, 10) '''判断title,返回布尔值'''
wait.until(EC.title_is(u"百度一下,你就知道")) '''判断title,返回布尔值'''
wait.until(EC.title_contains(u"百度一下")) '''判断某个元素是否被加到了dom树里,并不代表该元素一定可见,如果定位到就返回WebElement'''
wait.until(EC.presence_of_element_located((By.ID, 'kw'))) # 注意(By.ID, 'kw')是元组 '''判断某个元素是否被添加到了dom里并且可见,可见代表元素可显示且宽和高都大于0'''
wait.until(EC.visibility_of_element_located((By.ID, 'su'))) '''判断元素是否可见,如果可见就返回这个元素'''
wait.until(EC.visibility_of(driver.find_element(by=By.ID, value='kw'))) '''判断是否至少有1个元素存在于dom树中,如果定位到就返回列表'''
wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,'.mnav'))) '''判断是否至少有一个元素在页面中可见,如果定位到就返回列表'''
wait.until(EC.visibility_of_any_elements_located((By.CSS_SELECTOR, '.mnav'))) '''判断指定的元素中是否包含了预期的字符串,返回布尔值'''
wait.until(EC.text_to_be_present_in_element((By.XPATH, "//*[@id='u1']/a[8]"),u'设置')) '''判断指定元素的属性值中是否包含了预期的字符串,返回布尔值'''
wait.until(EC.text_to_be_present_in_element_value((By.CSS_SELECTOR, '#su'),u'百度一下')) '''判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False'''
# 注意这里并没有一个frame可以切换进去
# wait.until(EC.frame_to_be_available_and_switch_to_it(locator)) '''判断某个元素在是否存在于dom或不可见,如果可见返回False,不可见返回这个元素'''
# 注意#swfEveryCookieWrap在此页面中是一个隐藏的元素
wait.until(EC.invisibility_of_element_located((By.CSS_SELECTOR,'#swfEveryCookieWrap'))) '''判断某个元素中是否可见并且是enable的,代表可点击'''
wait.until(EC.element_to_be_clickable((By.XPATH, "//*[@id='u1']/a[8]"))).click() '''等待某个元素从dom树中移除'''
# 这里没有找到合适的例子
driver.find_element_by_xpath("//*[@id='wrapper']/div[6]/a[1]").click()
# wait.until(EC.element_to_be_clickable((By.XPATH,"//*[@id='wrapper']/div[6]/a[1]"))).click()
# wait.until(EC.staleness_of(driver.find_element(By.ID,'su'))) '''判断某个元素是否被选中了,一般用在下拉列表'''
wait.until(EC.element_to_be_selected(driver.find_element(By.XPATH, "//*[@id='nr']/option[1]"))) '''判断某个元素的选中状态是否符合预期'''
wait.until(EC.element_selection_state_to_be(driver.find_element(By.XPATH, "//*[@id='nr']/option[1]"),True)) '''判断某个元素的选中状态是否符合预期'''
wait.until(EC.element_located_selection_state_to_be((By.XPATH, "//*[@id='nr']/option[1]"), True)) '''判断页面上是否存在alert,如果有就切换到alert并返回alert的内容'''
gxszButton = wait.until(EC.element_to_be_clickable((By.XPATH, "//*[@id='gxszButton']/a[1]")))
gxszButton.click()
instance = wait.until(EC.alert_is_present()) print(instance.text)
instance.accept()
driver.close()
selenium等待方式详解的更多相关文章
- python selenium 三种等待方式详解[转]
python selenium 三种等待方式详解 引言: 当你觉得你的定位没有问题,但是却直接报了元素不可见,那你就可以考虑是不是因为程序运行太快或者页面加载太慢造成了元素不可见,那就必须要加等待 ...
- Python selenium 三种等待方式详解
1. 强制等待第一种也是最简单粗暴的一种办法就是强制等待sleep(xx),强制让闪电侠等xx时间,不管凹凸曼能不能跟上速度,还是已经提前到了,都必须等xx时间.看代码: # -*- coding: ...
- Selenium 三种等待方式详解
我们在做WEB自动化时,一般要等待页面元素加载完成后,才能执行操作,否则会报找不到元素的错误,这样就要求我们在有些场景下加等待时间. 我们平常用到的有三种等待方式: 强制等待 隐式等待 显示等待 一. ...
- Python selenium 三种等待方式详解(必会)
很多人在群里问,这个下拉框定位不到.那个弹出框定位不到…各种定位不到,其实大多数情况下就是两种问题:1 有frame,2 没有加等待.殊不知,你的代码运行速度是什么量级的,而浏览器加载渲染速度又是什么 ...
- Selenium:三种等待方式详解
我们在做WEB自动化时,一般要等待页面元素加载完成后,才能执行操作,否则会报找不到元素的错误,这样就要求我们在有些场景下加等待时间. 我们平常用到的有三种等待方式: 强制等待 隐式等待 显示等待 一. ...
- Python爬虫之selenium库使用详解
Python爬虫之selenium库使用详解 本章内容如下: 什么是Selenium selenium基本使用 声明浏览器对象 访问页面 查找元素 多个元素查找 元素交互操作 交互动作 执行JavaS ...
- guava-retrying 源码解析(等待策略详解)
一.等待策略相关类: 1.等待策略接口:WaitStrategy接口 该接口只有一个方法,就是返回尝试失败之后,下一次尝试之前的等待时间.long computeSleepTime(Attempt f ...
- vuex的使用及持久化state的方式详解
vuex的使用及持久化state的方式详解 转载 更新时间:2018年01月23日 09:09:37 作者:baby格鲁特 我要评论 这篇文章主要介绍了vuex的使用及持久化state的方 ...
- JavaEE实战——XML文档DOM、SAX、STAX解析方式详解
原 JavaEE实战--XML文档DOM.SAX.STAX解析方式详解 2016年06月22日 23:10:35 李春春_ 阅读数:3445 标签: DOMSAXSTAXJAXPXML Pull 更多 ...
随机推荐
- BigDecimal 中 关于RoundingMode介绍
RoundingMode介绍 RoundingMode是一个枚举类,有以下几个常量:UP.DOWN.CEILING.FLOOR.HALF_UP.HALF_DOWN.HALF_EVEN.UNNECESS ...
- 【Java】【学习】【监听器】Listener的学习的案例(窗体程序)
JavaWeb 监听器listener 学习与简单应用 Java窗体程序使用监听器 效果:点击按钮,控制台出现文字 代码如下 import javax.swing.*; import java.awt ...
- idea开发环境搭建ssh
idea2020完整web开发(struts2+spring+hibernate) idea破解 第一步: 下载最新的 IDEA 2020.3.2 版本安装包 https://www.jetbrain ...
- Redis图形管理 redis-browser
目录 一.介绍 二.部署 三.启动 监听单台 听多台 四.报错合集 一.介绍 redis-browser是redis的web端图形化管理工具.利用它可以查看和管理redis的数据,界面简洁,能和ral ...
- 什么是Docker?
容器技术的起源 假设你们公司正在秘密研发下一个"今日头条"APP,我们姑且称为明日头条,程序员自己从头到尾搭建了一套环境开始写代码,写完代码后程序员要把代码交给测试同学测试,这时测 ...
- get_started_3dsctf_2016 1
拿到题目,依旧还是老样子,查看程序开启的保护和位数 可以看到程序开启了nx保护是32位程序,于是我们把程序放入ida32编译一下 一打开就能看到非常明显的get_flag这个程序,f5观察伪代码 当a ...
- [BUUCTF]PWN——ciscn_2019_n_3
ciscn_2019_n_3 附件 步骤 例行检查,32位,开启了nx和canary保护 本地试运行一下,经典的堆题的菜单 3.32位ida载入 new(),申请了两个chunk,第一个chunk(1 ...
- epx中设置断掉调试
以前总听师傅们说,做pwn题,多调试,多调试. 师傅都说用gdb,但是我刚接触linux程序调试的时候用的是pwndbg,后来就用顺手了.但是调试一些简单程序还好,直接用pwndbg打开.但是这年头简 ...
- LuoguP7106 双生独白 题解
Content 给定一个 十六进制颜色码(一个长度为 \(7\) 的字符串,意义详见题面),请输出其反色的十六进制颜色码. 数据范围:颜色的 R,G,B 值保证在 \(255\) 以内. Soluti ...
- mysql 字符串转日期及其他日期转换
-- 字符串转日期 select str_to_date('2019/1/1', '%Y/%m/%d') -- 2019-01-01 SELECT STR_TO_DATE(concat(Cyear,' ...