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 更多 ...
随机推荐
- 【C/C++】最大连续子序列和/动态规划
思路主要是看了晴神的算法笔记,实现是自己重新用vector实现了一下,对付逗号隔开的输入 #include <iostream> #include <string> #incl ...
- BDD自动化测试框架cucumber(1): 最基本的demo
BDD(Behavior Driven Development),行为驱动开发, 对应自动化测试框架,python有behave,java有cucumber, 这次记录cucumber+springb ...
- TSN(时间敏感网络)测试、仿真、分析平台应用攻略
前言 在汽车领域,近几年车内网络通讯方式的变革诉求,期望能够有更高的数据传输速率,以及保证实时性的通讯方式引入.例如对于ADAS而言,传统的CAN总线已经远远不能满足其对通讯的要求,而基于车载以太网的 ...
- glViewport()函数和glOrtho()函数的理解
glViewport()函数和glOrtho()函数的理解 OpenGL中有两个比较重要的投影变换函数,glViewport和glOrtho. glOrtho是创建一个正交平行的视景体. 一般 ...
- HTTP强缓存和协商缓存
一.浏览器缓存 Web 缓存能够减少延迟与网络阻塞,进而减少显示某个资源所用的时间.借助 HTTP 缓存,Web 站点变得更具有响应性. (一).缓存优点: 减少不必要的数据传输,节省带宽 减少服务器 ...
- 工作簿拆分(Excel代码集团)
一个工作簿中包括N个工作表,将各个工作表拆分成工作簿. 工作表数量不定,表内内容不限,拆分后保存于当前文件夹内. Sub Sample() Dim MySheetsCount As Long For ...
- Offset函数(Excel函数集团)
此处文章均为本妖原创,供下载.学习.探讨! 文章下载源是Office365国内版1Driver,如有链接问题请联系我. 请勿用于商业!谢谢 下载地址:https://officecommunity-m ...
- C语言程序与设计:统计素数并求和
目录 C语言程序与设计:统计素数并求和 1.题目要求 2.分析 3.代码 C语言程序与设计:统计素数并求和 1.题目要求 输入两个正整数 m 和 n(1≤m≤n≤500),统计给定整数 m 和 n 区 ...
- java 常用类库:操作系统System类,运行时环境Runtime
System类: System 类代表Java程序的运行平台,程序不能创建System类的对象, System类提供了一些类变量和类方法,允许直接通过 System 类来调用这些类变量和类方法. Sy ...
- SQL优化一例:通过改变分组条件(减少计算次数)来提高效率
#与各人授权日期相关,所以有十万用户,就有十万次查询(相关子查询) @Run.ExecuteSql("更新各人应听正课数",@"update bi_data.study_ ...