美文网首页我爱编程
WebDriverWait 显示等待 +lambda匿名函数

WebDriverWait 显示等待 +lambda匿名函数

作者: 夏了夏夏夏天 | 来源:发表于2018-03-04 11:58 被阅读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

    相关文章

      网友评论

        本文标题:WebDriverWait 显示等待 +lambda匿名函数

        本文链接:https://www.haomeiwen.com/subject/xuuffftx.html