第9节 Selenium 三种等待方式

在UI自动化测试中,必然会遇到环境不稳定,网络慢的情况,这时如果不做任何处理的话,代码会由于没有找到元素而报错,另外,一种情况就是页面使用ajax异步加载机制。这时我们就要用到wait,而在Selenium中,我们可以用到三种等待,每一种等待都有自己的优点或缺点。

第一种:time.sleep(固定等待)

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


第二种:implicitly_wait(隐式等待)

  • 隐式等待实际是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间结束,然后执行下一步。这样的隐式等待会有个坑,我们都知道javascript一般都是放在我们的body的最后进行加载,实际这是页面上的元素都已经加载完毕,我们却还在等待全部页面加载结束。

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

第三种:WebDriverWait(显式等待)

  • WebDriverWait是Selenium提供得显示等待模块引入路径:
  • from selenium.webdriver.support.wait import WebDriverWait
参数说明
driver传人WebDriver实例
timeout超时时间,等待的最长时间
poll_frequency调用until或until_not中的方法的间隔时间,默认是0.5秒
ignored_exceptions忽略的异常
  • 这个模块中,一共有两种方法 until与until_not
参数说明
method在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是false
message如果超时,抛出timeoutException,将message传入异常
from telnetlib import EC

from selenium import  webdriver
from time import  sleep
from selenium.webdriver.support import  expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait


class TestCase(object):
    def __init__(self):
        self.driver = webdriver.Chrome()
        self.driver.get('http://www.baidu.com')

#time.sleep(固定等待)
    def test_sleep(self):
        self.driver.maximize_window()
        self.driver.find_element_by_id('kw').send_keys('selenium')
        sleep(2)
        self.driver.find_element_by_id('su').click()
        sleep(3)
        self.driver.quit()

#implicitly_wait(隐式等待)
    def test_implicitly(self):
        self.driver.implicitly_wait(10)
        self.driver.maximize_window()
        self.driver.find_element_by_id('kw').send_keys('selenium')
        self.driver.find_element_by_id('su').click()
        self.driver.quit()

#WebDriverWait(显式等待)
    def test_wait(self):
        wait = WebDriverWait(self.driver,5)
        wait.until(EC.title_is('百度一下,你就知道'))
        self.driver.maximize_window()
        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()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值