【问题标题】:Selenium crashing in Docker due to Browsing context has been discardedSelenium 在 Docker 中由于浏览上下文而崩溃已被丢弃
【发布时间】:2020-01-08 02:13:08
【问题描述】:

如何在 Docker 中运行基于 Selenium 的测试?

我正在尝试进行一些使用 Firefox 和 Geckodriver 的 Python+Selenium 测试,以便在 Ubuntu 18 Docker 映像下运行。

我的 docker-compose.yml 文件很简单:

version: "3.5"
services:
  app_test:
    build:
      context: .
      shm_size: '4gb'
      mem_limit: 4096MB
      dockerfile: Dockerfile.test

不幸的是,大多数测试都失败并出现以下错误:

selenium.common.exceptions.NoSuchWindowException: Message: Browsing context has been discarded

我能找到的几个搜索结果提到这个错误表明这是因为内存不足。我正在运行测试的服务器有 8GB 的​​总内存,尽管我也在一台 32GB 的机器上进行了测试并收到了同样的错误。

我还在每次测试之前添加了一个调用来打印top 的输出,它显示几乎没有内存使用,所以我不确定是什么导致测试由于内存不足而崩溃。

一些文章建议添加 shm_size 和 mem_limit 行,但没有效果。

我还尝试了不同版本的 Firefox,从最新的 71 版本到较旧的 ESR 版本,以排除这不是由于 Firefox+Selenium+Geckodriver 版本不兼容造成的错误。否则我会关注this compatibility table

是什么导致了这个错误,我该如何解决?

【问题讨论】:

  • 您的容器是否能够消耗那么多内存,或者您是否在测试中打开了大量的文件?您可能想检查主机上的 ulimit 值。 geekswing.com/geek/…
  • @DebanjanB 这不是重复的。另一个问题不涉及 Docker。
  • @ckaserer 就像我在问题中提到的那样,我在测试中打印了top 的输出,它似乎根本没有使用太多内存。顶多,好像只用了1%。我只是增加了限制以排除我误读的可能性。我的测试不打开我的网站,只浏览几页。基本的 CRUD 类型测试。
  • @Cerin 无论使用 Docker 还是 localhost,此错误的基本原因都是一样的。你能用你的代码试验更新问题吗?
  • @Cerin 您有问题的更新或解决方案吗?在安装了 XVFB 的 Ubuntu docker 容器中运行 Python+Selenium+pyvirtualdisplay 时,我遇到了相同的 NoSuchWindowException

标签: selenium docker selenium-webdriver docker-compose


【解决方案1】:

根本原因可能是 RAM 内存不足。

要修复它,请运行添加 --shm-size 的 docker 容器。

例子:

 --shm-size="2G"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-28
    • 2018-11-22
    • 1970-01-01
    • 2019-06-28
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多