selenium访问资源timeout时应对方案
当我们selenium访问资源时,可能会网络超时,这个网络超时的原因可能是资源中的依赖的某一资源无法访问,或网络异常。
还有可能是瞬间无法访问,或selenim不够稳定引起的。如果是瞬间无法访问或selenim缺乏健壮性引起的,我们是可以避免因为网络超时引起的测试失败。
为了重现网络超时,我们将超时时间设置短一点,设置5秒,如下:
...... self.driver.set_page_load_timeout(5) ......
接下来,我们去访问版块页
...... driver = self.driver driver.get(self.base_url + self.config["test.forum"]) #断言主题管理块 self.assertTrue(self.is_element_present(By.CSS_SELECTOR, "div.forum_admin")) ......
测试失败,并抛出如下异常信息
Traceback (most recent call last):
File "admin_menu_forum.py", line 24, in test_admin_menu
driver.get(self.base_url + self.config["test.forum"])
File "C:\Python27\lib\site-packages\selenium-2.35.0-py2.7.egg\selenium\webdriver\remote\webdriver.py", line 177,
t
self.execute(Command.GET, {'url': url})
File "C:\Python27\lib\site-packages\selenium-2.35.0-py2.7.egg\selenium\webdriver\remote\webdriver.py", line 165,
ecute
self.error_handler.check_response(response)
File "C:\Python27\lib\site-packages\selenium-2.35.0-py2.7.egg\selenium\webdriver\remote\errorhandler.py", line 1
check_response
raise exception_class(message, screen, stacktrace)
TimeoutException: Message: u'Timed out waiting for page load.' ; Stacktrace:
at FirefoxDriver.prototype.get/< (file:///c:/users/pc/appdata/local/temp/tmpnfrz_d/extensions/fxdriver@googlec
m/components/driver_component.js:8767)
at WebLoadingListener/e (file:///c:/users/pc/appdata/local/temp/tmpnfrz_d/extensions/fxdriver@googlecode.com/c
nts/driver_component.js:3330)
at WebLoadingListener/< (file:///c:/users/pc/appdata/local/temp/tmpnfrz_d/extensions/fxdriver@googlecode.com/c
nts/driver_component.js:3337)
at fxdriver.Timer.prototype.setTimeout/<.notify (file:///c:/users/pc/appdata/local/temp/tmpnfrz_d/extensions/f
r@googlecode.com/components/driver_component.js:396)
一般我们将超时时间设为20秒,如果超时,我们可以让selenium去重试,
....... def retry_when_timeout(driver, url, times = 3): u''' 访问超时,重试,默认重试3次 ''' for i in range(0, times): try: print "access %s, times %s" % (url, i+1) driver.get(url) except TimeoutException, e: continue else: break
使用示例如下:
...... driver = self.driver functions.retry_when_timeout(driver,self.base_url + self.config["test.forum"]) #断言主题管理块 self.assertTrue(self.is_element_present(By.CSS_SELECTOR, "div.forum_admin")) ......
![(please configure the [header_logo] section in trac.ini)](http://www1.pconline.com.cn/hr/2009/global/images/logo.gif)