在后台运行selenium线程时出现httplib异常

时间:2017-06-02 15:59:30

标签: python selenium robotframework httplib

我正在尝试在测试期间在后台运行一个线程,以跟踪测试期间访问过的所有唯一域。我在浏览器打开时启动该线程,并最终清除在调用拆除关键字Reset Browser时访问过的域的所有cookie。后台线程当前正在运行,没有任何错误。但是,我的机器人框架测试在随机点失败时记录了CannotSendRequest或ResponseNotReady错误。我认为这是因为我的后台线程定期从webdriver请求当前URL并导致中断。

我想知道是否有办法防止这些错误被抛出?我知道webdriver不是线程安全的,但希望能够解决这个问题。

class TrackingThread(threading.Thread):

    def __init__(self, webdriver, *args, **kwargs):
        #super(TrackingThread, self).__init__()
        threading.Thread.__init__(self)
        self._stop_event = threading.Event()
        self.webdriver = webdriver
        self.domains = set()

    def run(self):
        while str(self.webdriver)!="None" and not self.stopped():
            try:
                uri = urlparse.urlsplit(self.webdriver.get_location())
            except Exception, e:
                if (str(e) == "[Errno 111] Connection refused" or "chrome not reachable" in str(e) or str(e) == "No browser is open"):
                    break
            if uri.netloc:
                self.domains.add('{uri.scheme}://{uri.netloc}/'.format(uri=uri))
            sleep(0.2)

    def stop(self):
        self._stop_event.set()
        return self.domains

    def stopped(self):
        return self._stop_event.is_set()

    def clear_domains(self):
        self.domains = set();

    def get_domains(self):
        return self.domains

def initialize_unique_domain_tracking(self):
    try:
        tracking_thread = self.TrackingThread(target=self.TrackingThread, name="Tracking", webdriver=self)
        tracking_thread.start()
        return tracking_thread
    except Exception,e:
        return False;

我使用的是chromedriver版本2.29.461571和Chromium 58.0.3029.110

0 个答案:

没有答案