zoukankan      html  css  js  c++  java
  • Python+Selenium三种等待方法

    1.强制等待:sleep()

    • 强制等待:不管浏览器元素是否加载完成,程序都得等待3秒,3秒一到,继续执行下面的代码。
    driver = webdriver.Chrome()
    driver.get('https://www.baidu.com')
    
    sleep(3)  # 强制等待3秒
    
    print(driver.title)
    driver.quit()

    2.显示等待:WebDriverWait()类

    • 显示等待:设置一个等待时间和一个条件,在规定时间内,每隔一段时间查看下条件是否成立,如果成立那么程序就继续执行,否则就提示一个超时异常(TimeoutException)。
    • 通常情况下WebDriverWait类会结合ExpectedCondition类一起使用。
    实例:
    from selenium import webdriver
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    driver = webdriver.Chrome()
    driver.get('https://www.baidu.com')
    # 设置浏览器:driver  等待时间:20s
    wait = WebDriverWait(driver, 20)
    # 设置判断条件:等待id='kw'的元素加载完成
    input_box = wait.until(EC.presence_of_element_located((By.ID, 'kw')))
    # 在关键词输入:关键词
    input_box.send_keys('关键词')
    driver.quit()


    WebDriverWait的具体参数和方法:
    WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
        driver: 浏览器驱动
        timeout: 超时时间,等待的最长时间(同时要考虑隐性等待时间)
        poll_frequency: 每次检测的间隔时间,默认是0.5秒
        ignored_exceptions:超时后的异常信息,默认情况下抛出NoSuchElementException异常
    
    
    until(method,message='')
        method: 在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False
        message: 如果超时,抛出TimeoutException,将message传入异常
    
    
    until_not(method,message='')
        until_not 与until相反,until是当某元素出现或什么条件成立则继续执行,
        until_not是当某元素消失或什么条件不成立则继续执行,参数也相同。
        method
        message
    ExpectedCondition
    • ExpectedCondition中可使用的判断条件:
    from selenium.webdriver.support import expected_conditions as EC
    
    
    # 判断标题是否和预期的一致
    title_is
    # 判断标题中是否包含预期的字符串
    title_contains
    
    
    # 判断指定元素是否加载出来
    presence_of_element_located
    # 判断所有元素是否加载完成
    presence_of_all_elements_located
    
    
    # 判断某个元素是否可见. 可见代表元素非隐藏,并且元素的宽和高都不等于0,传入参数是元组类型的locator
    visibility_of_element_located
    # 判断元素是否可见,传入参数是定位后的元素WebElement
    visibility_of
    # 判断某个元素是否不可见,或是否不存在于DOM树
    invisibility_of_element_located
    
    
    # 判断元素的 text 是否包含预期字符串
    text_to_be_present_in_element
    # 判断元素的 value 是否包含预期字符串
    text_to_be_present_in_element_value
    
    
    #判断frame是否可切入,可传入locator元组或者直接传入定位方式:id、name、index或WebElement
    frame_to_be_available_and_switch_to_it
    
    
    #判断是否有alert出现
    alert_is_present
    
    
    #判断元素是否可点击
    element_to_be_clickable
    
    
    # 判断元素是否被选中,一般用在下拉列表,传入WebElement对象
    element_to_be_selected
    # 判断元素是否被选中
    element_located_to_be_selected
    # 判断元素的选中状态是否和预期一致,传入参数:定位后的元素,相等返回True,否则返回False
    element_selection_state_to_be
    # 判断元素的选中状态是否和预期一致,传入参数:元素的定位,相等返回True,否则返回False
    element_located_selection_state_to_be
    
    
    #判断一个元素是否仍在DOM中,传入WebElement对象,可以判断页面是否刷新了
    staleness_of
    调用方法如下:
    WebDriverWait(driver, 超时时长, 调用频率, 忽略异常).until(可执行方法, 超时时返回的信息)

    3.隐式等待

    • implicitly_wait(xx):设置等待时间为xx秒,等待元素加载完成,如果到了时间元素没有加载出,就抛出一个NoSuchElementException的错误。
    • 注意:隐性等待对整个driver的周期都起作用,所以只要设置一次即可。
    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.implicitly_wait(30)  # 隐性等待,最长等30秒
    
    driver.get('https://www.baidu.com')
    
    print(driver.current_url)
    print(driver.title)
    driver.quit()


    test
  • 相关阅读:
    Java Web Jsp EL ${ user.name }
    Java Web 网络留言板5 (javaBean技术)
    Java Web Web应用,打包和web.xml文件
    Java Web JSTL (实例)
    基于wpf的相关设计问题ViewModel
    c++ primer学习笔记(1)
    记上海俱乐部活动
    c++ primer学习笔记(3)字符串操作
    wpf&& silverlight的Behavior
    基于wpf的相关设计问题Command的使用
  • 原文地址:https://www.cnblogs.com/liangcr/p/13402689.html
Copyright © 2011-2022 走看看