DockerコンテナでSeleniumを実行するためにすべてのコンポーネントをインストールする方法を教えてください。
私はこの画像から始めています:
FROM Microsoft/aspnetcore-build:2 AS builder
WORKDIR /source
COPY . .
RUN dotnet restore
RUN dotnet build
ENTRYPOINT ["dotnet", "run"]
ヘッドレスChrome Driver with this:
ChromeOptions options = new ChromeOptions();
options.AddArgument("--headless");
options.AddArgument("--disable-gpu");
var driverPath = Path.GetFullPath(Path.Combine(environment.ContentRootPath, "bin/Debug/netcoreapp2.0"));
return new ChromeDriver(driverPath, options, TimeSpan.FromSeconds(60));
dockerコンテナー内?
chromedriver
はSelenium.WebDriver.ChromeDriver
NuGetパッケージを介して配布されます。
GoogleがインストールされているMac OS X Chromeがインストールされている場合、現在の設定は問題なく動作します。
私はこれらの行を追加しようとしました:
RUN apt-get update && apt-get -y install libglib2.0-dev libxi6 libnss3-dev
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
RUN apt-get update && apt-get -y install google-chrome-stable
上記はこのバージョンのChromeをインストールします:
google-chrome-stable:
Installed: 64.0.3282.119-1
Candidate: 64.0.3282.119-1
Version table:
*** 64.0.3282.119-1 500
500 http://dl.google.com/linux/chrome/deb stable/main AMD64 Packages
100 /var/lib/dpkg/status
Chromeドライバのバージョンと互換性があります。
これは、DockerコンテナでSeleniumを実行しようとすることで発生する各エラーを解決しようとすることから生じます。
このセットアップを実行すると、次のようになります。
ポート57889でChromeDriver 2.35.528139(47ead77cb35ad2a9a83248b292151462a66cd881)を起動していますローカル接続のみが許可されています。リクエストの送信中にエラーが発生しました。接続できませんでした
コンテナを実行するとき。
コンテナを手動で入力してchromeドライバを手動で実行しようとすると、次のようになります。
ポート9515でChromeDriver 2.35.528139(47ead77cb35ad2a9a83248b292151462a66cd881)を起動していますローカル接続のみが許可されています。
実行中のcurl -i http://localhost:9515/status
を取得:
HTTP/1.1 200 OK
Content-Length:136
Content-Type:application/json; charset=utf-8
Connection:close
{"sessionId":"","status":0,"value":{"build":{"version":"alpha"},"os":{"Arch":"x86_64","name":"Linux","version":"4.9.60-linuxkit-aufs"}}}
そのため、ドライバーは正常に動作しているようです。
代わりにchromeヘッドレスをgoogle-chrome-stable --headless --disable-cpu --no-sandbox
経由で実行すると、次のようになります。
[0125/210641.877388:WARNING:discardable_shared_memory_manager.cc(178)] Less than 64MB of free space in temporary directory for shared memory files: 63
[0125/210641.902689:ERROR:instance.cc(49)] Unable to locate service manifest for metrics
[0125/210641.902756:ERROR:service_manager.cc(890)] Failed to resolve service name: metrics
[0125/210642.031088:ERROR:instance.cc(49)] Unable to locate service manifest for metrics
[0125/210642.031119:ERROR:service_manager.cc(890)] Failed to resolve service name: metrics
[0125/210642.032934:ERROR:gpu_process_transport_factory.cc(1009)] Lost UI shared context.
最初の警告は、/dev/shm:/dev/shm
にDockerボリュームを設定するか、-shm-size
を64MBより大きい値に設定することで解決できます。
残りのエラーは、Googleの場合、Googleからの多くのバグレポートにつながりますChromeリポジトリ。
最も一般的なオプションは、「docker Selenium」または「selenoid」です。実装は異なりますが、どちらのソリューションもdockerを利用して、Seleniumグリッドに似たテスト環境を作成します。
私は「セレノイド」をお勧めし、それを適切に構成するには、次のガイドから始めることができます: https://www.swtestacademy.com/selenoid-tutorial/
「docker Selenium」を選択した場合、これが出発点になる可能性があります。 https://www.swtestacademy.com/docker-Selenium-tutorial/
リモートドライバーの場所として使用されるDockerコンテナーを中心に構築された、かなりきちんとしたフレームワークがあります。
http://aerokube.com/selenoid/latest/
まだ完全には実装していませんが、適切なchromeと内部にFirefoxドライバーを備えたDockerコンテナーを簡単に作成できました。