Selenium RC: 如何捕获/处理错误?
我的测试使用Selenium来循环访问一个CSV文件里的网址,过程中通过HTTP代理(下面是有效的脚本)。在我观察脚本运行时,我发现大约10%的请求会出现“代理错误:502”(即“坏网关”);但是,这些错误并没有被我设置的“捕获所有异常”的代码块捕捉到——也就是说,它们没有在“output.csv”的相应行写入'错误',而是被跳过,进入了else代码块,生成了一段短的HTML,内容是:“代理错误:502 从服务器读取失败:未知错误。”此外,如果我把所有返回502的URL收集起来并重新运行脚本,它们都能成功,这让我觉得这可能是网络路径的问题,偶尔会出现。
问题是:能否让脚本识别502错误,暂停一分钟,然后重试这个URL,而不是直接跳到列表中的下一个URL?
我能想到的唯一替代方案是在“get_html_source”之后使用re.search("代理错误:502")来捕捉这些错误请求。然后,如果匹配成功,就让脚本暂停一分钟,再重试产生502错误的那个URL(即'sel.open(row[0]')。任何建议都非常感谢。谢谢!
#python 2.6
from selenium import selenium
import unittest, time, re, csv, logging
class Untitled(unittest.TestCase):
def setUp(self):
self.verificationErrors = []
self.selenium = selenium("localhost", 4444, "*firefox", "http://baseDomain.com")
self.selenium.start()
self.selenium.set_timeout("60000")
def test_untitled(self):
sel = self.selenium
spamReader = csv.reader(open('ListOfSubDomains.csv', 'rb'))
for row in spamReader:
try:
sel.open(row[0])
except Exception:
ofile = open('output.csv', 'ab')
ofile.write("error" + '\n')
ofile.close()
else:
time.sleep(5)
html = sel.get_html_source()
ofile = open('output.csv', 'ab')
ofile.write(html.encode('utf-8') + '\n')
ofile.close()
def tearDown(self):
self.selenium.stop()
self.assertEqual([], self.verificationErrors)
if __name__ == "__main__":
unittest.main()
1 个回答
1
我觉得你提的替代方案可以。与其使用get_html_source,你可以用captureNetworkTraffic这个函数来获取HTTP头信息。这样会更安全,因为502页面可能会变化。
要小心,selenium的python封装中的captureNetworkTraffic有一个漏洞,可能会被利用。详情请看:http://jira.openqa.org/browse/SRC-758