【发布时间】: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