首页 > 解决方案 > Selenium 在 Docker 中由于浏览上下文而崩溃已被丢弃

问题描述

如何在 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 版本不兼容造成的错误。否则,我将遵循此兼容性表

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

标签: seleniumdockerselenium-webdriverdocker-compose

解决方案


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

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

例子:

 --shm-size="2G"

推荐阅读