selenium - 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 版本不兼容造成的错误。否则,我将遵循此兼容性表。
是什么导致了这个错误,我该如何解决?
解决方案
根本原因可能是 RAM 内存不足。
要修复它,请运行 docker 容器添加--shm-size
.
例子:
--shm-size="2G"
推荐阅读
- angular - 设置路由以定位命名
来自组件的模板,而不是来自 AppComponent 的模板 - swift - Using two values from a function
- python - 来自两个列表的随机元素 - Python
- android - RSA 加密非法块大小异常
- ios - 如何使用选择器通过函数传递两个参数
- python - How to do a regression starting from a list of list of elements
- javascript - 与动态命名的构造函数的对象属性访问器中的括号表示法不一致。有解释吗?
- ios - Regular expression for capturing hashtags in groups
- python - Does this mechanism use the Buffer or the Cache?
- python - 获取每列中某个值的频率