• selenium 设置元素等待


    自动化测试执行过程是非常迅速的,而有些网站加载页面元素的时间由于各种原因会比较慢,这样就会造成一些错误的bug,例如网页还未加载完成时,测试脚本已经开始执行对某个未加载完的元素的操作,然后在控制台报错,未找到该元素。

    为了避免快速执行造成的结果的不稳定性,我们在测试中增加“元素等待”控制。

    在以往的测试用例中,小编用的都是做简单的方式:

    #导入时间设置的库
    import time
    #设置等待3秒
    time.sleep(3)

    接下来小编要介绍2种“高阶”等待:显式等待,隐式等待

    • 显式等待:即webdriver等待某个条件成立时继续执行,达到最长时间限制时,抛出异常
    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.Firefox()
    driver.get("https://www.baidu.com/")
    
    #设置等待
    element = WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,"kw")))
    element.send_keys("selenium")
    
    #WebDriverWait()参数
    '''
    WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
    driver              驱动
    timeout             最长时间,超过后报错,单位s
    poll_frequency      间隔时间,默认为0.5s
    ignored_exceptions  超时后的异常信息,默认抛出的是NoSuchElementException
    '''
    
    #util()参数
    '''
    until(method,message='')
    直到method但会的参数为true,否则报错message
    util_not(method,message='')不再赘述
    '''
    
    #expected_conditions提供的部分方法介绍
    
    #判断标题是否为XXX
    element = WebDriverWait(driver,5,0.5).until(EC.title_is("title"))
    #判断元素是否可见
    element = WebDriverWait(driver,5,0.5).until(EC.visibility_of_element_located((By.ID,"xxx")))
    #判断元素是否存在
    element = WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,"xxx")))
    #判断一组元素是否存在
    element = WebDriverWait(driver,5,0.5).until(EC.presence_of_all_elements_located((By.ID,"xxx")))
    #判断元素是否有xxx文本信息
    element = WebDriverWait(driver,5,0.5).until(EC.text_to_be_present_in_element((By.ID,"xxx"),text_=""))
    #判断元素值是否含有xxx文本信息
    element = WebDriverWait(driver,5,0.5).until(EC.text_to_be_present_in_element_value((By.ID,"xxx"),text_=""))
    #判断表单是否可用,并切换到表单
    element = WebDriverWait(driver,5,0.5).until(EC.frame_to_be_available_and_switch_to_it((By.ID,"xxx")))
    #判断一个警告信息是否存在
    element = WebDriverWait(driver,5,0.5).until(EC.alert_is_present())
    #判断元素是否可点击
    element = WebDriverWait(driver,5,0.5).until(EC.element_to_be_clickable((By.ID,"xxx")))
    • 隐式等待:通过设置页面的等待时间,等待页面元素加载完成,相比于显式等待简单得多
    from selenium import webdriver
    driver=webdriver.Firefox()
    #设置隐式等待时间为5s
    '''
    隐式等待不针对页面上的某一个元素进行等待
    当执行元素定位时被执行
    
    当执行对某元素的定位时: 若元素被直接定位,则继续执行,不执行等待 若元素未被直接定位: 则在设定的时间内,不断的定位该元素(设定为10s) 在第5s(10s内)时定位到了该元素,则继续执行,不再继续等待 10s后还未定位到该元素,则跑出NoSuchElementException
    ''' driver.implicitly_wait(10) driver.get("https://www.baidu.com/") #定位一个错误的元素 kw = driver.find_element_by_id("kwlalala")

    最后,小编衷心的说一句,显式和隐式等待在没有绝对把握的情况下,最好不要混合使用哦,否则很有额能会造成不可预期的等待时间

  • 相关阅读:
    数据压缩和归档
    数据持久化
    文件和目录的使用
    数据及数据处理
    data types
    string services
    logging模块
    指导
    比较两个NSDate类型的参数相差的时间差
    推送 iOS 10
  • 原文地址:https://www.cnblogs.com/wulisz/p/8257339.html
Copyright © 2020-2023  润新知