美文网首页
自动化测试(5):设置等待时间

自动化测试(5):设置等待时间

作者: 形式主义_5adc | 来源:发表于2017-11-18 21:47 被阅读0次

    一、time.sleep(seconds) 固定等待

    import time

    time.sleep(3) #等待3秒

    time.sleep(seconds) seconds参数为整数,单位(秒)。

    它是Python的time提供的休眠方法。

    常用于短时间的等待,为了自动测试用例的执行效率固定等待的时间需要控制在3秒内。在用例中尽量少用固定等待。在爬虫应用中,为模拟用户操作浏览器,防止过快操作,可使用固定等待。

    二、智能隐性的等待implicitly_wait(回应超时等待)

    driver.implicitly_wait(time_to_wait)

    回应超时等待,隐性的,设置后对应的是全局,如查找元素。

    driver.implicitly_wait(10)  # 设置全局隐性等待时间,单位秒

    每次driver执行 找不到元素都会等待设置的时间,它的值设置的过长对用例执行效率有很大的影响,必须在执行完成之后还原回来。driver.implicitly_wait() 要慎之又慎的使用。

    driver对它的默认值为0,driver.implicitly_wait(0)能还原隐性等待的设置时间。

    三、智能显性等待WebDriverWait

    from selenium.webdriver.support.wait import WebDriverWait

    WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)

    参数说明:

    driver 为webdriver驱动

    timeout 最长超时时间,单位(秒)

    poll_frequency 循环查找元素每次间隔的时间,默认0.5秒

    ignored_exceptions 超时后需要输出的异常信息

    WebDriverWait()下面有两个方法可用until()和until_not()

    WebDriverWait(driver, timeout).until(method, message='')

    method 函数或者实例__call__()方法返回True时停止,否则超时后抛出异常。

    参数说明:

    method 在等待时间内调用的方法或者函数,该方法或函数需要有返回值,并且只接收一个参数driver。

    message 超时时抛出TimeoutException,将message传入异常显示出来

    WebDriverWait(driver, timeout).until_not(method, message='')

    于上面的until() 相反,until_not 中的method函数或者实例__call__()方法返回False结束,否则抛出异常。

    until方法使用的method 的函数或者类__call()__方法详解:

    函数我们一般采用匿名函数lambda 。

    lambda driver:driver.find_element(<定位元素>) # 当定位的元素时为True,无元素时为False。如示例1、2:

    WebDriverWait示例1:

    WebDriverWait(driver,5).until(lambda driver:driver.find_element_by_id('query'))

    5秒内等待元素(id='query')出现,lambda driver:driver.find_element_by_id('query') 为一个匿名函数,只有一个driver参数,返回的是查找的元素对象。

    WebDriverWait示例2:

    WebDriverWait(driver, 5).until_not(lambda driver:driver.find_element_by_name('query'))

    5秒内等待元素消失,同示例1 until_not 要求无元素返回即元素不存在于该页面。

    四、expected_conditions 类库

    from selenium.webdriver.support import expected_conditions as ec,它囊括了我们需要使用等待的所有情况。

    ec.title_is(‘title’)判断页面标题等于title

    ec.title_contains(‘title’)判断页面标题包含title

    ec.presence_of_element_located(locator)等待locator元素是否出现

    ec.presence_of_all_elements_located(locator)等待所有locator元素是否出现

    ec.visibility_of_element_located(locator)等待locator元素可见

    ec.invisibility_of_element_located(locator)等待locator元素隐藏

    ec.visibility_of(element)等待element元素可见

    ec.text_to_be_present_in_element(locator,text)等待locator的元素中包含text文本

    ec.text_to_be_present_in_element_value(locator,value)等待locator元素的value属性为value

    ec.frame_to_be_available_and_switch_to_it(locator)等待frame可切入

    ec.element_to_be_clickable(locator)等待locator元素可点击

    等待元素被选中,一般用于复选框,单选框

    ec.element_to_be_selected(element)等待element元素是被选中

    ec.element_located_to_be_selected(locator)等待locator元素是被选中ec.element_selection_state_to_be(element, is_selected)等待element元素的值被选中为is_selected(布尔值)

    ec.element_located_selection_state_to_be(locator,is_selected)等待locator元素的值是否被选中is_selected(布尔值)

    五、什么时候使用等待

    固定等待sleep与隐性等待implicitly_wait尽量少用,它会对测试用例的执行效率有影响。

    显性的等待WebDriverWait可以灵活运用,什么时候需要用到?

    1、页面加载的时候,确认页面元素是否加载成功可以使用WebDriverWait

    2、页面跳转的时候,等待跳转页面的元素出现,需要选一个在跳转前的页面不存在的元素

    3、下拉菜单的时候,如上百度搜索设置的下拉菜单,需要加上个时间断的等待元素可点击

    4、页面刷新的时候

    总之,页面存在改变的时候;页面上本来没的元素,然后再出现的元素


    参考来源:https://zhuanlan.zhihu.com/p/30854637

    相关文章

      网友评论

          本文标题:自动化测试(5):设置等待时间

          本文链接:https://www.haomeiwen.com/subject/jgyyvxtx.html