zoukankan      html  css  js  c++  java
  • 等待页面元素(webdriverwait)

    前言

      在脚本中加入太多的 sleep 后会影响脚本的执行速度,虽然 implicitly_wait ()这种方法隐式等待方法一定程度上节省了很多时间。
    但是一旦页面上某些 js 无法加载出来(其实界面元素经出来了),左上角那个图标一直转圈,这时候会一直等待的。

    implicitly_wait():隐式等待

    1)当使用了隐士等待执行测试的时候,如果 WebDriver没有在 DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常

    2) 换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找 DOM,默认的时间是0

    3) 一旦设置了隐式等待,则它存在整个 WebDriver 对象实例的声明周期中,隐式的等到会让一个正常响应的应用的测试变慢

    4)它将会在寻找每个元素的时候都进行等待,这样会增加整个测试执行的时间。

    实例源码:

    # coding:utf-8
    from selenium import webdriver
    from selenium.common.exceptions import NoSuchElementException
    from time import sleep,ctime
    
    driver=webdriver.Firefox()
    driver.get("http://www.baidu.com")
    
    sleep(2)
    # 隐式等待
    driver.implicitly_wait(5)
    try:
        print (ctime())
        driver.find_element_by_css_selector("#kw").send_keys("python")
        driver.find_element_by_css_selector("#su").click()
    except NoSuchElementException as msg:
        print (msg)
    finally:
        print (ctime())
    
    sleep(3)
    driver.quit()

    显示等待(参数解释)

    1)这里主要有三个参数:class WebDriverWait(object):driver, timeout, poll_frequency
    2)driver:返回浏览器的一个实例
    3)timeout:超时的总时长
    4)poll_frequency:循环去查询的间隙时间,默认 0.5 秒

    案例源码:

    # coding:utf-8
    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    from time import sleep
    
    driver = webdriver.Firefox()
    driver.get("http://www.baidu.com")
    
    driver.find_element_by_css_selector("#kw").send_keys(u"51自学网")
    sleep(2)
    
    # 显示等待
    element = WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,'su')))
    element.click()
    sleep(2)
    
    driver.quit()

    元素出现:until()

    1.until 里面有个 lambda 函数,这个语法看 python 文档吧
    2.以百度输入框为例

    元素消失:until_not ()

    1.判断元素是否消失

    参考代码

     coding:utf-8
    from selenium import webdriver
    from selenium.webdriver.support.wait import WebDriverWait
    driver = webdriver.Firefox()
    driver.get("http://www.baidu.com")
    # 等待时长 10 秒,默认 0.5 秒询问一次
    WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id("kw")).send_keys("yoyo")
    # 判断 id 为 kw 元素是否消失
    disappeared = WebDriverWait(driver, 10, 1).until_not(lambda x: x.find_element_by_id("kw").is_displayed())
    print disappeared
    driver.quit()
    

    WebDriverWait主要提供了两个方法,一个是 until(),另外一个是 until_not()

  • 相关阅读:
    How to tell your iPhone application that location services are required | The Agile Warrior
    How to detect whether socket is still connected...
    Ubuntu Touch On Nexus4 Manual Install (手动安装) under Gentoo
    LanguageTag
    » Working Around JNI UTF-8 Strings Deprogramming
    Mget is available.
    Fix Valgrind's must-be-redirected error in Gentoo
    vector 测试
    abc
    Effective STL 43: Prefer algorithm calls to hand-written loops
  • 原文地址:https://www.cnblogs.com/101718qiong/p/8005517.html
Copyright © 2011-2022 走看看