—— 学习Python自动化测试的菜鸡,现在是selenium库webdriver的学习时间

【问题】

在获取页面元素的文本的时候,总是获取不到,或者显示为空;

【分析】

页面加载不完全;

【解决措施】

等待页面加载完成;

【参看资料】

https://www.cnblogs.com/VseYoung/p/selenium_wait_3_python.html

我们在实际使用selenium或者appium时,等待下个等待定位的元素出现,特别是web端加载的过程,都需要用到等待,而等待方式的设置是保证脚本稳定有效运行的一个非常重要的手段,在selenium中(appium通用)常用的等待分为显示等待WebDriverWait()隐式等待implicitly_wait()强制等待sleep()三种,下面我们就分别介绍一下这三种等待的区别

在前面的博文中简单介绍了《强制等待和隐士等待的区别和理解》,本文再详细的结合案例进行理解。

  • sleep(): 强制等待,设置固定休眠时间。 python 的 time 包提供了休眠方法 sleep() , 导入 time 包后就可以使用 sleep(),进行脚本的执行过程进行休眠。
  • implicitly_wait():隐石等待,也叫智能等待,是 webdirver 提供的一个超时等待。隐的等待一个元素被发现,或一个命令完成。如果超出了设置时间的则抛出异常。
  • WebDriverWait():显示等待,同样也是 webdirver 提供的方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。默认检测频率为0.5s,默认抛出异常为:NoSuchElementException

下面通过一个实例来加深理解:

#coding=utf-8
from selenium import webdriver
#导入 WebDriverWait 包
from selenium.webdriver.support.ui import WebDriverWait
#导入 time 包
from sleep import  sleep
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
#WebDriverWait()方法使用
element=WebDriverWait(driver, 10).until(lambda driver : driver.find_element_by_id("kw"))        #
element.send_keys("selenium")
#添加智能等待
driver.implicitly_wait(30)               #implicitly_wait()方法比 sleep() 更加智能,后者只能选择一个固定的时间的等待,前者可以在一个时间范围内智能的等待
driver.find_element_by_id("su").click()
#添加固定休眠时间
sleep(5)                     #sleep()方法以秒为单位,假如休眠时间小时 1 秒,可以用小数表示。
driver.quit()

关于强制等待和隐式等待在上面注释中已做了说明

下面主要介绍一下WebDriverWait() 显示等待,语法格式如下:

WebDriverWait(self,driver,timeout,poll_frequency=POLL_FREQUENCY,ignored_exceptions=None).until(self,method,message=)
或者
WebDriverWait(self,driver,timeout,poll_frequency=POLL_FREQUENCY,ignored_exceptions=None).until_not(self,method,message=)
self, 函数本身,在实际使用的时候不需要输入
driver, webdriver的驱动程序,如(IE、FireFox、chrome、safari等)
timeout,超时时间,默认以秒为单位
poll_frequency,休眠时间(步长)的间隔,默认为0.5秒,即检测元素是否存在的频率
ignored_exceptions, 超时后的异常信息,默认情况下抛 “NoSuchElementException",大家可以定义忽略的异常信息
WebDriverWait一般由until或until_not配合使用
until(method,message=")调用该方法提供的驱动程序做为一个参数,直到返回值不为False
until_not(method,message=")调用该方法提供的驱动程序做为一个参数,直到返回值为False实例:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import NoAlertPresentException,TimeoutException,NoSuchElementException
driver=webdriver.Firefox()
driver.get("http:www.baidu.com")
WebDriverWait(driver,10,1,NoSuchElementException).until(lambda driver:driver.find_element_by_name("d_status"))
 

知识扩展:(截取出处为:http://blog.csdn.net/imzoer/article/details/8667176)

lambda只是一个表达式,函数体比def简单很多。

lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。

lambda表达式是起到一个函数速写的作用。允许在代码内嵌入一个函数的定义。

如下例子:

定义了一个lambda表达式,求三个数的和。

再看一个例子:

用lambda表达式求n的阶乘。

------------------------------

lambda表达式也可以用在def函数中。

看例子:

这里定义了一个action函数,返回了一个lambda表达式。其中lambda表达式获取到了上层def作用域的变量名x的值。

a是action函数的返回值,a(22),即是调用了action返回的lambda表达式。

这里也可以把def直接写成lambda形式。如下

【转】-【Python】- 【selenium】 -selenium中的三种等待方式(显示等待WebDriverWait()、隐式等待implicitly()、强制等待sleep())相关推荐

  1. python请输入_python中的三种输入方式

    python中的三种输入方式 python2.X python2.x中以下三个函数都支持: raw_input() input() sys.stdin.readline() raw_input( )将 ...

  2. 简单阐述下OC中UIImage三种创建方式~~~

    一. 直接使用imageNamed进行创建 1 UIImage * image = [UIImage imageNamed:@"1.jpg"]; 简单说一下这种方式的优缺点: 优点 ...

  3. asp.net Session在web.config中的三种配置方式——详解

    这段代码就是设置session在web.config中的存储方式. < sessionState mode="Off|InProc|StateServer|SQLServer" ...

  4. ios wifi 定位_iOS 中的三种定位方式

    1.手机基站定位 原理: 每个手机基站都有一个标识符,iPhone或3G iPad可以搜集周围所有收到信号的基站和它们的标识符,通过联网发送到苹果云端服务器,再由服务器根据这些基站的的位置信息查询并计 ...

  5. java中map的遍历方法_Java中Map的三种遍历方式

    集合中的三种遍历方式,如下代码: import java.util.Collection; import java.util.HashMap; import java.util.Iterator; i ...

  6. 计算机网络笔记---互联网的组成及三种交换方式

    互联网的组成 互联网从工作方式上可以划分为两大块: (1)边缘部分:由连接在互联网上的大量主机组成,由用户直接使用的部分. 这些主机包括了一切可以联网的设备,包括电脑,手机,联网的摄像头,更大的有互联 ...

  7. java aot,Java三种编译方式: 前端编译 JIT编译 AOT编译

    java程序代码需要编译后才能在虚拟机中运行,编译涉及到非常多的知识层面:编译原理.语言规范.虚拟机规范.本地机器码优化等:了解编译过程有利于了解整个Java运行机制,不仅可以使得我们编写出更优秀的代 ...

  8. selenium中的三种等待方法

    在selenium中,当我们定位的元素由于网络原因还没加载出来,浏览器找不到我们要定位的元素就会报错.等待方式的设置是保证脚本稳定有效运行的一个非常重要的手段,常用的等待方法有: sleep() -- ...

  9. python中if brthon环境安装包_Ant、Gradle、Python三种打包方式的介绍

    今天谈一下Androdi三种打包方式,Ant.Gradle.Python. 当然最开始打包用Ant 很方便,后来转Studio开发,自带很多Gradle插件就用了它,然后随着打包数量越多,打包时间成了 ...

  10. python选择语句是什么语句_Python语言中的三种选择语句

    本文将详细介绍Python语言中的三种选择语句:if语句,if/else语句和if/elif/else语句.对于每种语句,我们都提供了相应的流程图.与此同时,我们给出许多简单的示例程序,以帮助读者加深 ...

最新文章

  1. 奇怪吸引子---Finance
  2. SharePoint 2007 Web Content Management 性能优化系列 3 - IIS压缩
  3. 大赛归来的你们,依然青春少年
  4. HDU 5375 Gray code
  5. uboot中的中断macro宏
  6. mysql包导入之后idea仍然报错_IDEA连接MySQL报错怎么弄?
  7. [费用流专题]Going Home,Minimum Cost,工作安排
  8. 科发财务凭证登陆出现错误:40002
  9. systemd-run 中文手册
  10. 对POSIX和SystemV消息队列优化:用户态消息队列
  11. linux中几个热键
  12. 微信小程序------媒体组件(视频,音乐,图片)
  13. android 安装p12证书,怎么使用P12证书的Android
  14. 360加固签名验证_360加固需要签名和密码
  15. 3d数字孪生工厂可视化三维建模平台
  16. GIS制图人员的自我修养(1)--制图误区
  17. 多么痛的领悟,只有程序员才知道的12个人艰不拆的真相
  18. word中首行缩进、悬挂缩进、左缩进有什么区别?如何操作?
  19. 网络中的代理(proxy)和NAT
  20. 红米4a android p,一图彻底看懂红米4/红米4A

热门文章

  1. 可信计算系列之一——ATMEL的TPM芯片AT97SC3204T及TSS栈
  2. 【计算机】可信平台模块Trusted Platform Module - TPM
  3. Android:Window相关理解
  4. [无人驾驶]高级驾驶辅助系统ADAS介绍
  5. android开发 textview设置超链接颜色和背景色(被点击时的背景色、高亮色)
  6. WinRAR命令行参数整理111
  7. 集成神经网络的特点包括,集成神经网络的特点是
  8. 利用AO3401A实现电路电源防反接和电池充电管理功能
  9. web 网页登录 微信授权
  10. 中班音乐计算机活动课,中班艺术领域音乐活动 | 小朋友爱祖国