zoukankan      html  css  js  c++  java
  • WebDriver 中常用方法5---设置元素等待(虫师《selenium3自动化测试实战--基于Python语言笔记17》)

    1.显示等待

    webdriver等待某个条件成立则继续执行,否则在达到最大时长时抛出超时异常(TimeoutException)

     webdriver 中提供了WebDriverWait()显示等待方法。

    格式为:

    # driver:浏览器驱动
    # timeout:最长超时时间,默认以秒为单位
    # poll_frequency:检测的间隔(步长)时间,默认0.5
    # ignored_exceptions:超时后的异常信息,默认情况下抛出NoSuchElementException异常
    WebDriverWait(driver, timeout, poll_frequency=0.5,ignore_exceptions = None)
    expected_conditions类提供的预期条件判断方法
    方法 说明
    title_is 判断当前页面的标题是否等于预期
    title_contains 判断当前页面的标题是否包含预期字符串
    presence_of_element_located 判断元素是否被加在DOM树里,并不代表该元素一定可见
    visibility_of_element_located 判断元素是否可见(可见代表元素非隐藏,并且元素的宽和高都不等于0)
    visibility_of 与上个方法作用相同,上个参数为定位,本方法接收的参数为定位后的元素
    presence_of_all_elements_located  

     判断是否至少有一个元素存在于DOM树中。

    例如:页面中有n个元素class为“wp”,那么只要有个元素存在于DOM树中就返回True

     text_to_be_available_and_switch_to_it  判断该表单是否可以切换进去,如果可以,返回True并切换进去,否则返回False
     invisibility_of_element_located 判断某个元素是否不在DOM树中或不可见 
     element_to_be_clickable 判断某个元素是否可见并可以点击 
    staleness_of 等到一个元素从DOM树中移除
    element_to_be_selected 判断某个元素是否被选中,一般用在下拉列表中
    element_selection_state_to_be 判断某个元素的选中状态是否符合预期
    element_located_selection_state_to_be 与上一个方法作用相同,只是上一个方法参数为定位后的元素,该方法接收的参数为定位
    alert_is_present 判断呢页面上是否存在alert
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    driver = webdriver.Chrome()
    driver.get("http://www.baidu.com")
    
    # until(method,message=''):直到返回值为True;until_not():直到返回值为False
    element = WebDriverWait(driver, 5, 0.5).until(
        EC.visibility_of_element_located((By.ID, "kw"))
    )
    element.send_keys("selenium")
    driver.quit()

    还可以利用is_displayed()实现显示等待

    from selenium import webdriver
    from time import sleep, ctime
    
    driver = webdriver.Chrome()
    driver.get("http://www.baidu.com")
    
    print(ctime())
    for i in range(10):
        try:
            el = driver.find_element_by_id("kw22")
            # is_displayed():判断元素是否可见
            if el.is_displayed():
                break
        except:
             pass
        sleep(1)
    else:
        print("time out")
        print(ctime())
    
    driver.quit()

    执行结果如下:

    Tue Sep 10 14:47:30 2019
    time out
    Tue Sep 10 14:47:41 2019

    2.隐式等待

     webdriver中的implicitly_wait()方法可用来实现隐式等待。

    from time import ctime
    from selenium import webdriver
    from selenium.common.exceptions import NoSuchElementException
    
    driver = webdriver.Firefox()
    
    # 设置隐式等待10s
    # 1.这10s并非固定等待时间,它并不影响脚本的执行速度。
    # 2.它会等待页面上的所有元素
    # 3.当脚本执行到某个元素定位时,如果元素存在,则继续执行;如果定位不到元素,则以轮询的方式不断地判断元素是否存在
    driver.implicitly_wait(10) 
    driver.get("http://www.baidu.com")
    
    try:
        print(ctime())
        driver.find_element_by_id("kw22").send_keys("selenium")
    except NoSuchElementException as e:
        print(e)
    finally:
        print(ctime())
        driver.quit()

    执行结果为:

    Tue Sep 10 15:58:03 2019
    Message: Unable to locate element: [id="kw22"]
    
    Tue Sep 10 15:58:13 2019
  • 相关阅读:
    平衡——职场小说《监控》推荐
    《java程序员全攻略:从小工到专家》连载一:外行人眼中的IT人
    《java程序员全攻略:从小工到专家》连载二:IT行情分布
    各路技术牛人都推荐的书
    程序员2009精华本 有哪些值得期待
    揭秘孙小小《PPT演示之道》
    In the beginning, the world was void and without form…
    大学计算机课程复习操作系统
    大学计算机课程复习汇编语言
    (转)Winform 创建桌面快捷方式并开机启动
  • 原文地址:https://www.cnblogs.com/kite123/p/11481288.html
Copyright © 2011-2022 走看看