我正在尝试在测试期间在后台运行一个线程,以跟踪测试期间访问过的所有唯一域。我在浏览器打开时启动该线程,并最终清除在调用拆除关键字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