Selenium三种等待方式

遇到环境不稳定,网络慢的情况时,如果不做任何处理的话,代码会由于没有找到元素而报错。

还有一种情况就是页面使用ajax异步加载机制。这时我们就要用到wait

在selenium中,我们可以用到一共三种等待。每一种等待都有它的优缺点

1、time.sleep() 固定等待

在开发自动化框架过程中,最忌讳使用python自带模块的time的sleep方式进行等待,虽然可以自定义等待时间,但当网络条件良好时,依旧按照预设定的时间继续等待,导致整个项目的自动化时间无限延长,不建议使用

脚本调试过程中,还是可以使用的,方便快捷


2、implicitly_wait 隐式等待

实际是设置了一个最长等待时间,如在规定时间内网页加载完成,则执行下一步,否则一直等到时间结束,然后执行下一步。

这样的隐式等待有个坑,javascript一般都是放在我们的body的最后进行加载,实际这是页面上的元素都已加载完毕,我们却还在等待全部页面加载结束

隐式等待对整个driver周期都起作用,在最开始设置一次就可以了,不要当做固定等待使用,到哪都来一下隐式等待


3、WebDriverWait 显示等待

WebDriverWait是selenium提供得到显示等待模块引入路径

from selenium.webdriver.support.wait import WebDriverWait

(1)WebDriverWait参数:

                                driver 传入WebDriver实例

                                timeout 超时时间,等待的最长时间

                                poll_frequency 调用util或util_not中的方法的间隔时间,默认是0.5秒

                                ignored_exceptions 忽略的异常

(2)这个模块中一共有两种方法until和until_not

        参数

        method 在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是false

        message 如果超时,抛出TimeoutException,将message传入异常


源码:

from seleniumimport webdriver

from timeimport sleep

import os

from selenium.webdriver.support.waitimport WebDriverWait

from selenium.webdriver.supportimport  expected_conditionsas EC

class TestCase(object):

def __init__(self):

self.driver = webdriver.Chrome()

self.driver.get('http://www.baidu.com')

def test_sleep(self):

self.driver.find_element_by_id('kw').send_keys('selenium')

sleep(2)#线程阻塞 blocking  wait

        self.driver.find_element_by_id('su').click()

sleep(3)

self.driver.quit()

def test_implicitly(self):

self.driver.implicitly_wait(10)

self.driver.find_element_by_id('kw').send_keys('selenium')

self.driver.find_element_by_id('su').click()

self.driver.quit()

def test_wait(self):

wait = WebDriverWait(self.driver,2)

wait.until(EC.title_is('百度一下,你就知道'))

self.driver.find_element_by_id('kw').send_keys('selenium')

self.driver.find_element_by_id('su').click()

self.driver.quit()

if __name__ =='__main__':

case = TestCase()

#case.test_sleep()

#case.test_implicitly()

    case.test_wait()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。