Selenium RC:如何捕获/处理错误?

时间:2009-11-05 03:40:40

标签: python error-handling csv selenium loops

我的测试使用Selenium通过HTTP代理循环遍历CSV列表(下面的工作脚本)。当我观看脚本运行时,我可以看到大约10%的调用产生“代理错误:502”(“Bad_Gateway”);但是,我的catch-all“除了Exception”子句没有捕获错误 - 即:不是在“output.csv”的相应行中写入'error',而是将它们传递给else子句并生成一个short一段html开头:“代理错误:502从服务器读取失败:未知错误。”此外,如果我收集所有返回502并重新运行脚本的URL,它们都会通过,这使我相信这是一个零星的网络路径问题。

问题:是否可以使脚本识别502错误,睡一分钟,然后重试URL而不是转到列表中的下一个URL?

我能想到的唯一选择是在“get_html_source”之后应用re.search(“代理错误:502”)作为捕获错误调用的方法。然后,如果RE匹配,则让脚本进入休眠状态一分钟,然后重试“生成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 个答案:

答案 0 :(得分:1)

我认为您建议的替代方案是可以的。而不是get_html_source,您可以使用captureNetworkTraffic函数来获取HTTP标头。这会更安全,因为502页面可以改变。

小心,selenium python包装器的captureNetworkTraffic中有一个可以被黑客攻击的错误。请参阅:http://jira.openqa.org/browse/SRC-758