1114Selenium web自动化测试经验分享-设置网页超时加载时间set_page_load_timeout()

最开始学习web自动化测试就遇到一个小困扰,有时候设计的用例可能会打开新浪、腾讯这些网站,等待网页加载完成都要小半分钟。最近重拾web自动化测试,又遇到这个困扰。

今天分享下:通过set_page_load_time()方法来设定时间,然后捕获timeout异常 并通过执行JS命令来停止页面加载 window.stop()

一)set_page_load_timeout()

下面是源码。

可以看到 set_page_load_timeout() 设置网页超时加载时间 需要传入一个time_to_wait

    def set_page_load_timeout(self, time_to_wait):
        """
        Set the amount of time to wait for a page load to complete
           before throwing an error.

        :Args:
         - time_to_wait: The amount of time to wait

        :Usage:
            driver.set_page_load_timeout(30)
        """
        try:
            self.execute(Command.SET_TIMEOUTS, {
                'pageLoad': int(float(time_to_wait) * 1000)})
        except WebDriverException:
            self.execute(Command.SET_TIMEOUTS, {
                'ms': float(time_to_wait) * 1000,
                'type': 'page load'})

在Web自动化脚本执行时,浏览器打开网址会一直等待整个页面加载完成,但有时候页面想要的元素早就加载完成了,但是因为个别js之类的东西特别慢,只能干等着。

因为没有设置超时时间而且get方法默认是等待页面全部加载完成才会执行下一步

二)实战

    def test_59c(self):
        """set_page_load_timeout"""
        driver = webdriver.Chrome()
        driver.set_page_load_timeout(8)     # 可以自行设置加载时间
        print('0', time.ctime())
        try:
            driver.get("https://www.sina.com.cn/")      # 普通情况下,设置的 超时加载时间远远小于实际网页加载完成需要的时间,所以肯定会报错
        except:
            driver.execute_script('window.stop()')      # 执行Javascript来停止页面加载 window.stop()
            print('2', time.ctime())
        print('3', time.ctime())
        time.sleep(1)
        driver.quit()

浏览器关闭前,等待一秒的时候,可以看到网页已经停止加载,浏览器标签栏那个小圈不再转。

在这里插入图片描述

    def wangzhi(self, net):
        from selenium.common.exceptions import TimeoutException
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.set_page_load_timeout(10)        # 设定时间
        try:
            self.driver.get(net)
        except TimeoutException:        # 捕获timeout异常
            self.driver.execute_script('window.stop()')     # 执行Javascript来停止页面加载 window.stop()

可以把这一部分代码封装成方法,直接调用就可以。但是实际用处不是很大。只是一个小麻烦而已。

交流技术 欢迎+QQ 153132336 zy
欢迎关注 微信公众号:紫云小站

猜你喜欢

转载自blog.csdn.net/zyooooxie/article/details/84066439
今日推荐