我正在使用selenium 2.44和firefox 34.0,测试是在显示不一致行为的网站上:某些页面加载导致 socket.timeout错误(firefox加载图标保持旋转)。 在此错误之后,对驱动程序对象的任何调用都会导致httplib.CannotSendRequest,因此我无法从错误中恢复并继续测试流程。
根据这个: httplib CannotSendRequest error in WSGI
驱动程序对象可能正在等待加载过程完成,并且不允许访问该对象。
问题是如何从此错误中恢复?
理想的解决方案是关闭窗口并解决问题,并通过加载下一页继续测试。问题是我不能使用driver.close()因为描述驱动程序对象是不可访问的。 driver.current_url也无法访问,因此我无法找到当前的驱动程序测试位置。我正在考虑的最后一种方法是在每次加载之前存储所有窗口句柄的最后一个URL,并且当发生异常时重新创建驱动程序并加载所有窗口(在该窗口之后出现错误)。
这当然是一个次优的解决方案,但这是不可避免的吗?
答案 0 :(得分:2)
我的最终解决方案如问题中所述,我刚刚创建了一个新的webdriver实例并继续加载其中的页面。 错误的webdriver窗口(有时不止一个)在运行结束前保持打开状态,但会被忽略。如果您有多个页面,则可以存储所有窗口的URL(在driver.get(' URL')之前)并重新加载它们以防出现此错误。 这不是最佳解决方案,但可行。