Selenium的显示等待和隐式等待

隐式等待

当使用了隐式等待执行测试的时候,如果WebDriver没有在DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常,
换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找DOM,默认的时间是0

from selenium import webdriverbrowser = webdriver.Chrome()
browser.implicitly_wait(10)  # 等待十秒加载不出来就会抛出异常,10秒内加载出来正常返回
browser.get('https://www.zhihu.com/explore')
input = browser.find_element_by_class_name('zu-top-add-question')
print(input)

显示等待

指定一个等待条件,和一个最长等待时间,程序会判断在等待时间内条件是否满足,如果满足则返回,如果不满足会继续等待,超过时间就会抛出异常

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECbrowser = webdriver.Chrome()
browser.get('https://www.taobao.com/')
wait = WebDriverWait(browser, 10)
input = wait.until(EC.presence_of_element_located((By.ID, 'q')))
button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.btn-search')))
print(input, button)

样例2

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions driver = webdriver.Chrome()
driver.get('http://www.baidu')element = WebDriverWait(driver,5,0.5).util(expected_conditions.presence_of_element_located((By.ID,'kw')))
element.send_keys('hello')
driver.quit()

WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
driver:浏览器驱动
timeout:最长超时时间,默认以秒为单位
poll_frequency:检测的间隔(步长)时间,默认为0.5S
ignored_exceptions:超时后的异常信息,默认情况下抛NoSuchElementException异常
WebDriverWait()一般由until()或 until_not()方法配合使用
until(method, message=’ ‘):调用该方法提供的驱动程序作为一个参数,直到返回值为True
until_not(method, message=’ '):调用该方法提供的驱动程序作为一个参数,直到返回值为False

常用的一些函数。

title_is 标题是某内容
title_contains 标题包含某内容
presence_of_element_located 元素加载出,传入定位元组,如(By.ID, 'p')
visibility_of_element_located 元素可见,传入定位元组
visibility_of 可见,传入元素对象
presence_of_all_elements_located 所有元素加载出
text_to_be_present_in_element 某个元素文本包含某文字
text_to_be_present_in_element_value 某个元素值包含某文字
frame_to_be_available_and_switch_to_it frame加载并切换
invisibility_of_element_located 元素不可见
element_to_be_clickable 元素可点击
staleness_of 判断一个元素是否仍在DOM,可判断页面是否已经刷新
element_to_be_selected 元素可选择,传元素对象
element_located_to_be_selected 元素可选择,传入定位元组
element_selection_state_to_be 传入元素对象以及状态,相等返回True,否则返回False
element_located_selection_state_to_be 传入定位元组以及状态,相等返回True,否则返回False
alert_is_present 是否出现Alert

参考文章

https://www.jianshu.com/p/fa5477a2e0dd

Selenium的显示等待和隐式等待相关推荐

  1. python显示等待和隐式等待_荐selenium内的隐式等待和显示等待的区别

    selenium的页面等待有显示等待和隐式等待 大多数Web应用程序都是使用Ajax和Javascript开发的.当浏览器加载页面时,我们想要与之交互的元素可能以不同的时间间隔加载. 它不仅难以识别元 ...

  2. Selenium显示等待和隐式等待

    在调试代码的时候经常会遇到,selenium元素定位有时有效有时无效,先比较下 Selenium显示等待和隐式等待的区别 1.selenium的显示等待 原理:显示等待,就是明确的要等到某个元素的出现 ...

  3. selenium 的显示等待与隐式等待

    现在很多的网页都采用了 Ajax 技术,那么采用一般的静态爬虫技术会出现抓取不到页面的元素.比如歌曲的主页会有评论数量,一般评论数量是动态加载的. 所以这就涉及到selenium,支持各种浏览器,包括 ...

  4. selenium中的三种等待方式以及显示等待和隐式等待区别

    selenium的三种等待方式 selenium中一般分为三种等待方式:显示等待.隐式等待.sleep强制等待 1.显示等待(有条件) 程序提前指定等待条件和等待时间,在查找元素时,判断规定时间内是否 ...

  5. Selenium 显示等待、隐式等待及流畅等待

    目录 等待 显式等待 选项 预期的条件 隐式等待 流畅等待 等待 WebDriver通常可以说有一个阻塞API.因为它是一个指示浏览器做什么的进程外库,而且web平台本质上是异步的,所以WebDriv ...

  6. selenium的三种等待方式(显示等待,隐式等待,强制等待)简单了解与总结

    1.强制等待(无条件等待) 使用方法:time.sleep(delay) delay的单位为秒,delay设置多少秒页面就会等待多少秒(死等),这个方法很容易让线程挂掉,使程序抛异常,所以要慎用此方法 ...

  7. python selenium 中显示等待与隐式等待同时存在,发生冲突时,解决方法

    当我们在一个基类中写了一句隐式等待,如下面的 self.driver.implicitly_wait(30) 可以为整个程序都设置一个30秒的等待时间,但是当我们有段代码不想等待30秒这么久,那该怎么 ...

  8. selenium中强制等待,隐式等待,显示等待的区别

    1.强制等待:time.sleep() 最简单的等待方式,缺点:设置时间短了没用,长了又浪费时间 2.隐式等待: 隐式等待是全局的是针对所有元素,设置等待时间如10秒,如果10 秒内出现,则继续向下, ...

  9. Appium+PythonUI自动化之webdriver 的三种等待方式(强制等待、隐式等待、显示等待)

    在自动化测试脚本的运行过程中,webdriver操作浏览器的时候,对于元素的定位是有一定的超时时间,大致应该在1-3秒的样子,如果这个时间内仍然定位不到元素,就会抛出异常,中止脚本执行.我们可以通过在 ...

最新文章

  1. synchronize和lock的区别 synchionzie与volatile的区别
  2. UA MATH567 高维统计I 概率不等式8 亚指数范数
  3. 路由及iptables学习笔记
  4. Windows Phone 7 MVVM模式数据绑定和传递参数
  5. Ajax 模糊查询的简单实现
  6. 程序员如何自我超越,教你一招
  7. RHEL6.2上使用 libvirt创建和管理KVM虚拟机
  8. sql多行插入insert多行无法分析查询文本_收藏!SQL语法全集合!
  9. [20171120]11G关闭直接路径读.txt
  10. 2017.8.22区间最大值问题
  11. Win10打开nvidia控制面板闪退怎么解决
  12. 从完美KL距离推导VAE
  13. ExtJS之EditorGridPanel
  14. 卡尔曼滤波和互补滤波的区别
  15. 计算机路径共享,如何访问共享文件夹路径
  16. h2o java_java – 在h2o中加载大于内存大小的数据
  17. 基于Python PIL库的简易马赛克拼图程序
  18. MQTT 具备那些特征?
  19. postgresql unsupported frontend protocol 1234.5680问题
  20. 蛋白摄入量与常见饮食

热门文章

  1. 欺骗的艺术 --- 第一章
  2. MATLAB随机森林回归模型
  3. 政府信息化需求开启 OA办公系统平台化时代
  4. JSP四大作用域属性范围
  5. Unity 如何实现苹果动态模糊遮罩
  6. 详解“辗转相除法”(如何求最大公约数)
  7. git基本命令及核心
  8. Python基础知识(9)
  9. SQL的SUBSTR()函数
  10. Arch Linux 安装后无法联网的问题