Python+Selenium学习--设置等待时间

场景

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

代码

#!/usr/bin/env python
# -*- codinfg:utf-8 -*-
‘‘‘
@author: Jeff LEE
@file: 等待时间.py
@time: 2018-09-21 15:55
@desc:
‘‘‘
from selenium import webdriver
#导入WebDriverWait
from selenium.webdriver.support.ui import WebDriverWait
import time

driver = webdriver.Firefox()

driver.get(‘https://www.baidu.com/‘)

#WebDriverWait方法
element=WebDriverWait(driver,10).until(lambda driver:driver.find_element_by_id("kw"))
element.send_keys("uniquefu")

#添加智能等待
driver.implicitly_wait(10)
driver.find_element_by_id("su").click()

#添加固定等待时间
time.sleep(10)
driver.quit()

优缺点

sleep():强制等待,不管你浏览器是否加载完了,程序都得等待3秒,3秒一到,继续执行下面的代码,作为调试很有用,有时候也可以在代码里这样等待,不过不建议总用这种等待方式,太死板,严重影响程序执行速度

implicitly_wait():隐形等待,比sleep()更加智能,隐形等待是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步。注意这里有一个弊端,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步,但有时候页面想要的元素早就在加载完成了,但是因为个别js之类的东西特别慢,我仍得等到页面全部完成才能执行下一步

WebDriverWait():显示等待,配合该类的until()和until_not()方法,就能够根据判断条件而进行灵活地等待了。它主要的意思就是:程序每隔xx秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException

备注:

WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
driver - WebDriver 的驱动程序(Ie, Firefox, Chrome 或远程)
timeout - 最长超时时间,默认以秒为单位
poll_frequency - 休眠时间的间隔(步长)时间,默认为0.5 秒
ignored_exceptions - 超时后的异常信息,默认情况下抛NoSuchElementException 异常

原文地址:https://www.cnblogs.com/uniquefu/p/9687211.html

时间: 2024-07-29 23:14:19

Python+Selenium学习--设置等待时间的相关文章

Python +selenium之设置元素等待

当浏览器在加载页面时,页面上的元素可能并不是同时被加载完成,这给元素的定位增加了困难.如果因为在加载某个元素时延迟而造成ElementNotVisibleException 的情况出现,那么就会降低自动化脚本的稳定性,我们可以设置元素等待时间改善这种问题造成的不稳定性. WebDriver提供了两种类型的等待,显示等待和隐式等待  显示等待: 显示等待使WebDriver等待某个条件成立时继续执行,否者在达到最大时长事会抛出超时异常(TimeoutException)

uniquefu Python+Selenium学习--前进和后退

场景 这两个功能一般不太常用.所能想到的场景大概也就是在几个页面间来回跳转,省去每次都get url. 代码 #!/usr/bin/env python # -*- coding:utf-8 -*- ''' Created on 2018/5/9 11:26 @author: Jeff Lee @file: 前进和后退.py ''' from selenium import webdriver import time print('打开浏览器') cl = webdriver.Firefox()

uniquefu Python+Selenium学习--打印当前页面的title及url

场景 测试中,访问1个页面然后判断其title是否符合预期是很常见的1个用例,所谓用例不够,title来凑就是这个道理.更具体一点,假设1个页面的title应该是'hello world', 那么可以写这样的一个用例:访问该页面,获取该页面的title,判断获取的值是否等于'hello world'. 获取当前页面的url也是非常重要的一个操作.在某些情况下,你访问一个url,这时系统会自动对这个url进行跳转,这就是所谓的'重定向'.一般测试重定向的方法是访问这个url,然后等待页面重定向完毕

Python+Selenium学习--简单对象定位

场景 测试对象的定位和操作是webdriver的核心内容,其中操作又是建立在定位的基础之上,因此对象定位就越发显得重要了. 定位对象的目的一般有下面几种 操作对象 获得对象的属性,如获得测试对象的class属性,name属性等等 获得对象的text 获得对象的数量 webdriver提供了一系列的对象定位方法,常用的有以下几种 id name class name link text partial link text tag name xpath css selector 代码 login.h

Python+Selenium学习笔记9 - 警告框处理

如下图所示,这种窗口是不能通过前端工具对其进行定位的,这里可以通过switch_to_alert()方法去接受这个弹窗 1 # coding = utf-8 2 3 from selenium import webdriver 4 from selenium.webdriver.common.action_chains import ActionChains 5 import time 6 7 dr = webdriver.Firefox() 8 dr.get("http://www.baidu

Python+Selenium学习(三)-Xpath的使用

今天学习了几个关于自动化的概念. 元素,网页元素(web element).在页面上面的文本输入框.按钮.多选.单选.标签.和文字都叫元素,总之,凡是能在页面显示的对象都可以作文页面元素对象. 元素定位,有时候也叫Locator,一个HTML页面元素,可以用很多方法描述这样元素的位置.网页元素有自己的位置,可以通过一些手段或者表达式去描述这个元素的页面对应位置. XPath,XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言.XPath基于XML

Selenium Webdriver——设置等待时间

1.隐式等待 implicitlyWait(): 当使用了隐士等待执行测试的时候,如果 WebDriver没有在 DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常 当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找 DOM,默认的时间是0 一旦设置了隐式等待,则它存在整个 WebDriver 对象实例的声明周期中,隐式的等到会让一个正常响应的应用的测试变慢, 它将会在寻找每个元素的时候都进行等待,这样会增加整个测试执行的时间. driver.manage().t

python selenium Chrome 设置为手机模式

# -*- coding: utf-8 -*- from selenium import webdriver from time import sleep mobileEmulation = {'deviceName': 'Apple iPhone 4'} options = webdriver.ChromeOptions() options.add_experimental_option('mobileEmulation', mobileEmulation) driver = webdrive

Python+Selenium学习笔记4

1.submit() submit()方法用于提交表单.如在搜索框输入关键字后按回车键进行查询操作,就可用submit()方法模拟.若不能按回车键进入下一步,则不能用submit()举例,百度的查询提交. 1 from selenium import webdriver 2 3 dr = webdriver.Firefox() 4 dr.get("http://www.baidu.com") 5 6 dr.find_element_by_id("kw").send_