我有下面的Docker撰写文件
version: "3"
services:
selenium-hub:
image: selenium/hub
container_name: selenium-hub
ports:
- "4444:4444"
chrome:
image: selenium/node-chrome
depends_on:
- selenium-hub
environment:
- HUB_PORT_4444_TCP_ADDR=selenium-hub
- HUB_PORT_4444_TCP_PORT=4444
firefox:
image: selenium/node-firefox
depends_on:
- selenium-hub
environment:
- HUB_PORT_4444_TCP_ADDR=selenium-hub
- HUB_PORT_4444_TCP_PORT=4444
devenv:
build: .
ports:
- "4444:4444"当我运行Docker撰写文件时,没有:
devenv:
build: .
ports:
- "4444:4444"它工作得很好,Selenium Grid将成功地站起来。然而,当我介绍这个服务时,网格将无法运行,测试将尝试运行,但当然没有网格,因此它将失败。
我哪里出问题了?
在构建时调用Docker文件。
FROM maven
RUN apt update
COPY . /
RUN mvn clean test错误消息: org.openqa.selenium.remote.UnreachableBrowserException:无法启动新会话。可能的原因是远程服务器或浏览器启动失败的地址无效。
发布于 2022-04-17 18:21:55
我建议你遵循以下步骤-
先决条件:
让我们假设您的测试项目使用TestNG运行它的selenium脚本。
步骤1:修改BaseTest或Test类以初始化RemoteWebDriver。
将以下代码替换或添加到BaseTest或浏览器驱动程序初始化的任何位置。
@BeforeTest
public void beforeTestSetup() throws MalformedURLException {
MutableCapabilities dc = new ChromeOptions();
host = System.getenv("HUB_HOST") != null ? System.getenv("HUB_HOST") : "hub";
driver.set(new RemoteWebDriver(new URL("http://" + host + ":4444/wd/hub"), dc));
logger.info("Remote Chrome Driver Started...");
driver.get().manage().deleteAllCookies();
driver.get().manage().window().maximize();
}步骤2:将Maven插件添加到pom.xml中以创建可执行的jars。
我们需要添加下面的插件,以便为我们的测试项目生成一个可执行的jar。
例如,查看下面的片段-
<build>
<finalName>dockerized</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<compilerVersion>1.8</compilerVersion>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/libs
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>testng.xml</suiteXmlFile>
</suiteXmlFiles>
<argLine>
-javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
</argLine>
</configuration>
</plugin>
</plugins>
</build>
healthcheck.sh步骤3:添加一个脚本
在运行测试之前,需要使用healthcheck脚本来检查以接收测试请求。
echo "Checking if hub is ready - $HUB_HOST"
while [ "$( curl -s http://$HUB_HOST:4444/wd/hub/status | jq -r .value.ready )" != "true" ]
do
sleep 1
done步骤4:添加run.sh脚本
java -cp dockerized.jar:dockerized-tests.jar:libs/* org.testng.TestNG testng.xmldocker-compose.yml步骤5:创建一个文件
version: "3"
services:
hub:
image: selenium/hub:4.1.3
ports:
- "4442:4442"
- "4443:4443"
- "4444:4444"
chrome:
image: selenium/node-chrome:4.1.3
shm_size: '3gb'
depends_on:
- hub
links:
- hub
environment:
- SE_EVENT_BUS_HOST=hub
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
- VNC_NO_PASSWORD=1
test-run:
build: .
container_name: test-run
depends_on:
- chrome
links:
- hub
environment:
- MODULE=testng.xml
volumes:
- ./src/test/resources/results:/app步骤6:创建Dockerfile以指示您的Docker映像的创建
我们将在多阶段构建中使用多个基本图像来创建最终图像。第一阶段(名为package)将生成可执行的jars,第二阶段(名为testrun)将运行这些可执行jars。
请注意每个阶段所使用的不同的基本图像。
FROM maven:3.6.1-jdk-8-alpine AS package
RUN apk add --update \
curl \
jq
RUN mkdir -p /app
WORKDIR /app
COPY pom.xml .
COPY healthcheck.sh .
RUN mvn -e -B dependency:resolve
COPY src ./src
RUN mvn verify --fail-never -DskipTests
WORKDIR /app/
ENTRYPOINT ["/bin/sh"]
CMD ["healthcheck.sh"]
FROM openjdk:8-jre-alpine AS testrun
RUN mkdir -p /jar
WORKDIR /jar/
COPY --from=package /app/target/dockerized.jar .
COPY --from=package /app/target/dockerized-tests.jar .
COPY --from=package /app/target/libs ./libs
COPY testng.xml .
COPY run.sh .
WORKDIR /jar/
ENV HUB_HOST=hub
ENV MODULE=testng.xml
ENTRYPOINT ["/bin/sh"]
CMD ["run.sh"]步骤7:最后,运行您的对接者-撰写
在项目根文件夹中打开Powershell并运行以下命令。
***docker-compose up --build***https://stackoverflow.com/questions/51830701
复制相似问题