0

这个“会话超时或未找到”错误一直是我存在的诅咒。通常它最终会成为其他症状的症状,但我目前在八个不同的地方使用 Selenium 和 Chromium(通过 Selenoid),它在其中七个地方完美运行,并且在每次运行中始终失败,在另一个似乎没有理由:

...
  File "/opt/obo/virtualenv/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 333, in get
    self.execute(Command.GET, {'url': url})
  File "/opt/obo/virtualenv/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/opt/obo/virtualenv/lib/python3.8/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: Session timed out or not found

我还没有看到它与超时有任何实际关系,但我仍然可以找到每次超时都翻倍或三倍,而且它仍然在发生。我减少了从 Javascript 返回到 Python 的数据量,而且这种情况仍在发生。然后我计算了发生这种情况需要多长时间,何时发生,它看起来像(0)秒。那里似乎没有关于此错误的文档,而且通常很少有参考资料。所以,也许有人有一些建议,或者至少可以描述是什么原因造成的,然后我必须自己把它拆开?

4

4 回答 4

0

也可能是因为缺少某些页面元素(脚本、图像等)的防火墙规则。由于防火墙,这些请求需要无限时间才能完成,因此您的页面加载速度太慢,最后会发生超时。

于 2021-03-15T08:12:17.080 回答
0

它表明 Selenium Grid 实例不再保持会话。

请尝试在没有 Selenoid 的情况下使用本地网格运行测试以查看错误是否仍然存在

Selenoid 可能存在的问题:

  1. 当对该会话的连续调用之间的时间超过超时设置时,会发生默认会话超时(如果我没记错的话,为 60 秒)。解决方案是审查测试或延长超时。

  2. Selenoid 主机上的不当负载(CPU 或内存太少或实例太多)会导致资源争夺,因此 Selenoid 实例可能表现不稳定。解决方案:修复 Selenoid 设置

于 2021-03-14T10:22:29.340 回答
0

每次我通过无限滚动的另一个窗口运行后,似乎都会出现这个问题。它很少以看似随机的间隔在其他时间发生。

可能是某些网站做了一些使窗口处于不良状态的事情。可能是我没有做一些我不知道在无限滚动之后我需要做的事情。

无论哪种方式,我都添加了一个意外事件来检测特定的异常和消息,并关闭该窗口,然后在下一个周期打开一个新窗口。这完全消除了这个错误/症状,并且表面上阻止了它再次出现。

于 2021-03-15T19:08:34.800 回答
0

我也面临类似的问题。根据我的研究,我发现如下:

尝试less than 100%根据您的代码保持 Selenoid 会话。任何暂停的会话都可能遇到此问题。

例如:

您可以并行运行 10 个线程(默认配置),尝试一次仅启动 8 个线程。这将帮助您避免不必要的失败。

我已经使用 下面的pytest-parallel 链接在 python 中处理了它:

pytest --workers 8 --tests-per-worker 1

这将一次启动 8 个会话,每个工作人员进行 1 个测试,您的 selenoid 使用率为 80%,即less than 100 %

于 2022-01-20T11:16:19.483 回答