zoukankan      html  css  js  c++  java
  • 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")

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

  • 相关阅读:
    散户必看 教您怎样在短期内从10万炒到100万
    店主学习篇 如何做服装经营能手
    苹果公司CEO乔布斯在斯坦福大学毕业典礼上的演讲
    手头20万存款的租客 买房划算还是租房省钱?
    把幸福 亲了又亲
    周经理写给公司 的一封信
    土鸡市场前景:
    查看局域网内所有IP
    中国肿瘤年报出炉 浙江每312人就有1人患癌
    中药材喂土鸡或许大家还很疑惑吧
  • 原文地址:https://www.cnblogs.com/wulisz/p/8257339.html
Copyright © 2011-2022 走看看