我爱编程

WebDriverWait 显示等待 +lambda匿名函数

2018-03-04  本文已影响0人  夏了夏夏夏天

sleep后会影响脚本的执行速度,虽然implicitly_wait()这种方法隐式等待方法一定程度上节省了很多时间。

但是一旦页面上某些js无法加载出来(其实界面元素经出来了),左上角那个图标一直转圈,这时候会一直等待的。

一、参数解释

1.这里主要有三个参数:

class WebDriverWait(object):driver, timeout, poll_frequency

2.driver:返回浏览器的一个实例,这个不用多说

3.timeout:超时的总时长

4.poll_frequency:循环去查询的间隙时间,默认0.5秒

以下是源码的解释文档(案例一个是元素出现,一个是元素消失)

def __init__(self, driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None):

"""Constructor, takes a WebDriver instance and timeout in seconds.

:Args:

- driver - Instance of WebDriver (Ie, Firefox, Chrome or Remote)

- timeout - Number of seconds before timing out

- poll_frequency - sleep interval between calls

By default, it is 0.5 second.

- ignored_exceptions - iterable structure of exception classes ignored during calls.

By default, it contains NoSuchElementException only.

Example:

from selenium.webdriver.support.ui import WebDriverWait \n

element = WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id("someId")) \n

is_disappeared = WebDriverWait(driver, 30, 1, (ElementNotVisibleException)).\ \n

until_not(lambda x: x.find_element_by_id("someId").is_displayed())

"""

二,例子

1,元素出现until()例子:

from seleniumimport webdriver

from selenium.webdriver.support.uiimport WebDriverWait

path ="D:\\XXX\\chromedriver.exe"

driver = webdriver.Chrome(path)

driver.maximize_window()

driver.get("http://www.baidu.com")

WebDriverWait(driver,10).until(lambda x:x.find_element_by_id("kw")).send_keys("yoyo")

2,元素消失:until_not()例子

is_disappeared = WebDriverWait(driver, 10,1).until_not(lambda x:x.find_element_by_id("kw").is_displayed())

print(is_disappeared)

运行后因为页面元素“kw”并未消失,所以报错,如下:

Python 中,lambda 函数是用一个语句表达的匿名函数。可以用它来代替小的函数。

首先,举一个使用普通函数的例子。定义函数edit_story(),参数列表如下所示:

• words——单词列表

• func——遍历列表中单词的函数

>>> def edit_story(words, func):

... for word in words:

... print(func(word))

现在,需要一个单词列表和一个遍历单词的函数。对于单词,可以选择我的猫从某一台阶

上掉下时发出的声音:

>>> stairs = ['thud', 'meow', 'thud', 'hiss']

对于函数,它要将每个单词的首字母变为大写,然后在末尾加上感叹号 , 用作猫画报的标

题非常完美:

>>> def enliven(word): # 让这些单词更有情感

... return word.capitalize() + '!'

混合这些“配料”:

>>> edit_story(stairs, enliven)

Thud!

Meow!

Thud!

Hiss!

最后,到了lambda。enliven() 函数可以简洁地用下面的一个lambda 代替:

>>>

>>> edit_story(stairs, lambda word: word.capitalize() + '!')

Thud!

Meow!

Thud!

Hiss!

>>>

lambda 函数接收一个参数word。在冒号和末尾圆括号之间的部分为函数的定义。

通常,使用实际的函数(例如enliven())会比使用lambda 更清晰明了。但是,当需要定

义很多小的函数以及记住它们的名字时,lambda 会非常有用。尤其是在图形用户界面中,

可以使用lambda 来定义回调函数。

显示等待WebDriverWait

上一篇下一篇

猜你喜欢

热点阅读