这些方式仅供参考,实际使用体验并不好,最好对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等待方式详解的更多相关文章

  1. python selenium 三种等待方式详解[转]

    python selenium 三种等待方式详解   引言: 当你觉得你的定位没有问题,但是却直接报了元素不可见,那你就可以考虑是不是因为程序运行太快或者页面加载太慢造成了元素不可见,那就必须要加等待 ...

  2. Python selenium 三种等待方式详解

    1. 强制等待第一种也是最简单粗暴的一种办法就是强制等待sleep(xx),强制让闪电侠等xx时间,不管凹凸曼能不能跟上速度,还是已经提前到了,都必须等xx时间.看代码: # -*- coding: ...

  3. Selenium 三种等待方式详解

    我们在做WEB自动化时,一般要等待页面元素加载完成后,才能执行操作,否则会报找不到元素的错误,这样就要求我们在有些场景下加等待时间. 我们平常用到的有三种等待方式: 强制等待 隐式等待 显示等待 一. ...

  4. Python selenium 三种等待方式详解(必会)

    很多人在群里问,这个下拉框定位不到.那个弹出框定位不到…各种定位不到,其实大多数情况下就是两种问题:1 有frame,2 没有加等待.殊不知,你的代码运行速度是什么量级的,而浏览器加载渲染速度又是什么 ...

  5. Selenium:三种等待方式详解

    我们在做WEB自动化时,一般要等待页面元素加载完成后,才能执行操作,否则会报找不到元素的错误,这样就要求我们在有些场景下加等待时间. 我们平常用到的有三种等待方式: 强制等待 隐式等待 显示等待 一. ...

  6. Python爬虫之selenium库使用详解

    Python爬虫之selenium库使用详解 本章内容如下: 什么是Selenium selenium基本使用 声明浏览器对象 访问页面 查找元素 多个元素查找 元素交互操作 交互动作 执行JavaS ...

  7. guava-retrying 源码解析(等待策略详解)

    一.等待策略相关类: 1.等待策略接口:WaitStrategy接口 该接口只有一个方法,就是返回尝试失败之后,下一次尝试之前的等待时间.long computeSleepTime(Attempt f ...

  8. vuex的使用及持久化state的方式详解

    vuex的使用及持久化state的方式详解 转载  更新时间:2018年01月23日 09:09:37   作者:baby格鲁特    我要评论 这篇文章主要介绍了vuex的使用及持久化state的方 ...

  9. JavaEE实战——XML文档DOM、SAX、STAX解析方式详解

    原 JavaEE实战--XML文档DOM.SAX.STAX解析方式详解 2016年06月22日 23:10:35 李春春_ 阅读数:3445 标签: DOMSAXSTAXJAXPXML Pull 更多 ...

随机推荐

  1. Docker从入门到精通(二)——安装Docker

    通过上面文章,我们大概知道了什么是Docker,但那都是文字功夫,具体想要理解,还得实操,于是这篇文章带着大家来手动安装Docker. 1.官方教程 https://docs.docker.com/e ...

  2. 企业级BI是自研还是采购?

    企业级BI是自研还是采购? 上一篇<企业级BI为什么这么难做?>,谈到了企业级BI项目所具有的特殊背景,以及在"破局"方面的一点思考,其中谈论的焦点主要是在IT开发项目 ...

  3. 为什么Redis集群有16384个槽

    一.前言 我在<那些年用过的Redis集群架构(含面试解析)>一文里提到过,现在redis集群架构,redis cluster用的会比较多. 如下图所示 对于客户端请求的key,根据公式H ...

  4. 【已解决】关于echarts的splitArea分割区域背景闪烁问题

    (x轴)使用时间类型(type: "time"),并且x轴使用splitArea划分后使用color属性设定分割区域颜色.        同时使用dataZoom设置区域缩放,在局 ...

  5. linux小应用 —— 日志过滤

    先说问题,统计一个日志文件中去重之后的ip地址的个数.其实这是一个非常常见也比较简单的问题,其中我个人认为最主要的应该是匹配ip地址是这个问题的核心.剩下的就是对linux命令的熟练程度的问题了.首先 ...

  6. thinkPHP跨数据库访问/数据库切换

    在项目的开发中会遇到访问多个数据库的问题这里讲的是:访问同一地址下的多个数据库 第一步:在配置文件中配置你要连接的其他的数据库 例如:我现在默认的数据库是back 现在我要设置第二个数据库travel ...

  7. 修复 Edge 浏览器 1Password 插件 Ctrl+Shift+X 弹出快捷键失效

    解决方式 在 Edge 浏览器右上角 1Password插件图标上右键,选择设置: 在打开的 1Password 设置页面中,找到快捷键设置环节,默认使用快捷键打开后面为空,点击"在扩展也上 ...

  8. Uni-app原生插件入门使用教程-[1]从Uni-app插件市场试用插件

    [1]从Uniapp插件市场试用插件 当HBuilderX中提供的能力无法满足App功能需求,需要通过使用Andorid/iOS原生开发实现时,可使用App离线SDK开发原生插件来扩展原生能力. 如使 ...

  9. 通过css实现表格的斜线

    效果图 实现思路 编辑一个svg文件,可以自定义线条颜色和粗细. 将svg文件转为base64格式,作为背景图属性设置. svg转base64的网址:https://www.sojson.com/im ...

  10. c++ 之面试题(3)数组递归查找

    题目描述 1. 给定严格升序(没有相等元素)的数组a,元素个数为cnt, 查找num在数组中的位置序号(以0位起始). 如果没找到则返回: 比num小且最靠近的元素位置序号. 若所有元素均大于num则 ...