【问题标题】:How to use the official selenium docker images?如何使用官方的 selenium docker 镜像?
【发布时间】:2018-12-05 20:36:58
【问题描述】:

我正在尝试在 Docker 中设置一个使用 Selenium Webdriver 和 Firefox 的 .NET Core 控制台应用程序,但我很难理解如何实际使用 official Selenium docker images

目前,控制台应用程序只是一个尝试访问 Google.com 并成功报告的应用程序。

在尝试创建新的 FirefoxDriver 时,我一直收到以下错误消息:

预期的浏览器二进制位置,但无法在默认位置找到二进制文件,未提供“moz:firefoxOptions.binary”功能,命令行上未设置二进制标志 (SessionNotCreated)

这是Dockerfile(由VSCode Docker扩展生成+我添加的一行,现在注释掉):

FROM microsoft/dotnet:2.1-runtime AS base
WORKDIR /app

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY ["MyAppName.csproj", "./"]
RUN dotnet restore "./MyAppName.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "MyAppName.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "MyAppName.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .

# FROM selenium/standalone-firefox-debug ## where does this go?

ENTRYPOINT ["dotnet", "MyAppName.dll"]

我尝试在各个点插入 selenium 独立图像,尝试从 '/bin/bash/' 入口点开始尝试查找 Firefox 是否真的在图像中(它似乎不是,不在常规位置)。它仍然抛出异常。

我真正想要的只是在我的容器中安装 firefox,以便我可以运行我的 .NET Core 控制台应用程序,但根据一些谷歌搜索,最简单的方法应该是通过 selenium 图像。

如何正确使用 selenium docker 镜像?

【问题讨论】:

    标签: selenium docker .net-core


    【解决方案1】:

    回答我自己的问题,以防 Docker 新手遇到同样的问题并在这里结束。

    我想通了。

    更好的方法是使用docker-compose 运行 3 个不同的服务:我的 C# 脚本、一个 selenium hub 服务和一个 selenium firefox 节点。 (您也许可以使用 just 一个脚本和一个 selenium firefox 独立图像来做到这一点,但我只是发布了第一个对我有用的东西。稍后会尝试其他东西)

    我从我的 .NET Core 控制台应用程序 Dockerfile 中删除了 FROM selenium/standalone-firefox-debug 语句,然后将以下 docker-compose.yml 文件放在与我的 Dockerfile 相同的文件夹中(大部分来自 this stackoverflow answer):

    version: '2'
    services:
      seltest:
        build:
          context: .
        volumes:
          - ./temp:/usr/src/app/target
        environment:
            - HUB_PORT_4444_TCP_ADDR=seleniumhub
            - HUB_PORT_4444_TCP_PORT=4444
        depends_on:
            - seleniumhub
      seleniumhub:
        image: selenium/hub
        ports:
          - 4444:4444
      firefoxnode:
        image: selenium/node-firefox-debug
        ports:
          - 5900
        environment:
            - HUB_PORT_4444_TCP_ADDR=seleniumhub
            - HUB_PORT_4444_TCP_PORT=4444
    

    在我的 C# 脚本中,我现在必须进行一些更改。我必须将我的远程网络驱动程序连接到正确的 URI:

    IWebDriver driver = new RemoteWebDriver(new Uri("http://seleniumhub:4444/wd/hub"), firefoxOptions);
    

    (seleniumhub:4444 因为我在 docker-compose.yml 中创建的服务名称是 seleniumhub 并且 4444 是为此服务打开的端口)

    因为 docker-compose 中的 depends_on 只等待 the services to start and not until they're 'ready',所以在我尝试使用它们之前,我采用了一种 hacky 方法来确保 selenium hub 和 firefox 服务准备就绪,然后做了一个:

    Thread.Sleep(10000);
    

    在调用远程网络驱动程序之前。如果我这样做,那么在尝试调用 webdriver 时会出现以下错误:

    未处理的异常:OpenQA.Selenium.WebDriverException:向远程 WebDriver 服务器发送 HTTP 请求以获取 URL http://seleniumhub:4444/wd/hub/session,引发了具有空响应的异常。异常状态为 UnknownError,消息为:Connection refused Connection refused ---> System.Net.WebException: Connection denied Connection refused ---> System.Net.Http.HttpRequestException: Connection denied ---> System .Net.Sockets.SocketException:连接被拒绝

    然后我只需要从命令行运行docker compose up 来启动服务,我可以验证我的C# 脚本是否成功到达https://www.google.com

    似乎整体可以在很多方面进行优化,但对我来说,概念验证已经完成!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-21
      • 2019-08-26
      • 2019-04-24
      • 2016-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-18
      相关资源
      最近更新 更多