我的问题是如何在docker容器中运行google chrome进行e2e测试。
我从官方Jenkins图像创建# Create example data
dt <- read.csv(text = "Clone, V2, V3, V4
1201K_1, GS1, 1, 167
1201K_1, GS1, 1, 355
1201K_1, GS1, 1, 515
12419S_13, GS1, 1, 279
12419S_13, GS1, 1, 287
12468S_18, GS1, 1, 320
12468S_18, GS1, 1, 338
12468S_18, GS1, 1, 594
12468S_6, GS1, 1, 167
12468S_6, GS1, 1, 260")
# Set Seed
set.seed(1200)
# Split the data frame based on Clone and store them in a list
dt_list <- split(dt, f = dt$Clone)
# Create a new index and change the order of dt_list
# Save the result to dt_list2
dt_list2 <- dt_list[sample(1:length(dt_list), length(dt_list))]
# Combine each data frame
dt2 <- do.call(rbind, dt_list2)
# See the result
dt2
Clone V2 V3 V4
1201K_1.1 1201K_1 GS1 1 167
1201K_1.2 1201K_1 GS1 1 355
1201K_1.3 1201K_1 GS1 1 515
12419S_13.4 12419S_13 GS1 1 279
12419S_13.5 12419S_13 GS1 1 287
12468S_6.9 12468S_6 GS1 1 167
12468S_6.10 12468S_6 GS1 1 260
12468S_18.6 12468S_18 GS1 1 320
12468S_18.7 12468S_18 GS1 1 338
12468S_18.8 12468S_18 GS1 1 594
,但是当尝试运行谷歌浏览器时,它会崩溃并显示错误:
Dockerfile
Jenkins泊坞窗图片使用Debian Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted
Trace/breakpoint trap (core dumped)
。
我可以使用jessie
标记运行谷歌浏览器,不需要X服务器。
这是我的泊坞文件:
詹金斯官方形象:一个人使用来自docker的GUI运行google chrome:
我的第一种方法是使用--headless
,但使用xvbf
标志时,过程会更简单。
我可以使用相同的安装命令在Ubuntu服务器上运行chrome,但是在docker中它会失败。
在其他意图之后,我使用了--headless
标记,但是docker图像显示了下一个错误。
--no-sandbox
实际上我运行了这个命令:
[0427/180929.595479:WARNING:audio_manager.cc(295)] Multiple instances of AudioManager detected
[0427/180929.595537:WARNING:audio_manager.cc(254)] Multiple instances of AudioManager detected
libudev: udev_has_devtmpfs: name_to_handle_at on /dev: Operation not permitted
答案 0 :(得分:10)
只需使用--no-sandbox
启动Chrome即可解决问题
答案 1 :(得分:5)
使用此图片alpeware/chrome-headless-trunk
在ubuntu中为我工作!
该容器中用于启动无头镀铬的命令是:
/usr/bin/google-chrome-unstable \
--disable-gpu --headless --no-sandbox \
--remote-debugging-address=0.0.0.0 \
--remote-debugging-port=9222 --user-data-dir=/data
我使用以下命令在Ubuntu中启动了容器:
docker run -it --rm -p=0.0.0.0:9222:9222 \
--name=chrome-headless \
-v /tmp/chromedata/:/data alpeware/chrome-headless-trunk
然后使用Chrome连接到localhost:9222
通过一些修改,您可以在 Jenkins 中运行
。答案 2 :(得分:3)
添加
- 加帽SYS_ADMIN
到docker run命令
例如:
docker run --rm -p=81:81 -d -v $(pwd)/src:/opt/code --name chrome_test --cap-add=SYS_ADMIN test/chrome_iso
答案 3 :(得分:1)
答案 4 :(得分:1)
我通过以下
扩展默认的Dockerfile Selenium Chrome NodejScrollPane1.getViewport().setBackground(Color.WHITE);
searchResults.setOpaque(false);
jScrollPane1.setOpaque(false);
我的run.sh是
FROM selenium/standalone-chrome-debug:latest
MAINTAINER Serge Arbuzov <Serge.Arbuzov@advantechwireless.com>
USER root
### jenkins set up ###
RUN apt-get update && apt-get install -y openssh-server sudo
RUN mkdir /var/run/sshd
RUN adduser jenkins
RUN echo jenkins:jenkins | chpasswd
RUN echo "jenkins ALL=(ALL) NOPASSWD:ALL">>/etc/sudoers
USER root
RUN echo export DISPLAY=":1.5" >> /etc/environment
ADD run.sh /run.sh
RUN chmod +x /run.sh
EXPOSE 22
CMD ["/run.sh"]
所以我可以使用默认图像作为Jenkins节点
答案 5 :(得分:1)
本文正是我在docker内部使用Headless Chrome运行Karma测试所需要的:
https://hackernoon.com/running-karma-tests-with-headless-chrome-inside-docker-ae4aceb06ed3
基本上,解决方案是运行带有--no-sandbox
标志的Headless Chrome。
答案 6 :(得分:0)
我们使用Chrome和Chromedriver构建了Docker映像,该映像以无头模式运行Chrome,以进行自动化测试。我们在docker-compose.yml
设置中将其用作PhantomJS的替代品。该图像基于Alpine Linux,不需要或不包含Selenium,因此它很小。
来源: https://github.com/retreatguru/headless-chromedriver
Docker Hub: https://hub.docker.com/r/retreatguru/headless-chromedriver