Webdrivers :: BrowserNotFound: Chrome-Binärdatei konnte nicht gefunden werden. Als ich zum ersten Mal versuchte, E2E mit Docker + Rails zu testen, war ein Fehler aufgetreten.

Ich werde es als Memorandum belassen, dass dies passiert ist, weil es sehr voll war.

Erster Artikel, auf den ich mich bezog https://qiita.com/at-946/items/e96eaf3f91a39d180eb3

Ich habe versucht, es unter Bezugnahme auf den obigen Artikel zu implementieren, erhalte jedoch eine Fehlermeldung ohne Browser. Warum. .. ..

Failure/Error: driven_by :remote_chrome 
Webdrivers::BrowserNotFound: Failed to find Chrome binary. 

Wenn ich verschiedene Dinge überprüft habe, hat der normale Test bestanden, aber als ich versucht habe, Javascript (js: true) zu testen, scheint es Moos mit dem obigen Fehler zu sein.

  config.before(:each, type: :system, js: true) do
    driven_by :remote_chrome
    Capybara.server_host = IPSocket.getaddress(Socket.gethostname)
    Capybara.server_port = 3000
    Capybara.app_host = "http://#{Capybara.server_host}:#{Capybara.server_port}"
  end

↑ Also funktioniert dieser Teil des Artikels, auf den ich mich bezog, nicht gut ...?

Überprüfen Sie den Chrombehälter

Versuchen Sie, auf "http: // localhost: 4444 / wd / hub" zuzugreifen. image.png

Es sieht so aus, als ob es richtig funktioniert.

Überprüfen Sie, ob die Kommunikation vom Webcontainer zum Chrome-Container erfolgt

Starten Sie eine Shell auf einem Webcontainer

$ docker-compose run --rm web sh

Überprüfen Sie, ob eine Kommunikation möglich ist

$ ping chrome
64 bytes from ... 

Stellen Sie sicher, dass die Buchstaben ständig fließen. Anscheinend sind der Webcontainer und der Chromcontainer verbunden. Ich verstehe nicht mehr und mehr. .. ..

Egal, was Sie mit Bezug auf verschiedene andere Artikel hinzufügen oder löschen

Failure/Error: driven_by :〇〇〇
Webdrivers::BrowserNotFound: Failed to find Chrome binary. 

Unter dem Fehler leiden.

Das Dockerfile sieht übrigens so aus.

Dockerfile


FROM ruby:2.6.6-alpine3.11
RUN apk --no-cache add tzdata \
                       libxml2-dev \
                       curl-dev \
                       make \
                       gcc \
                       libc-dev \
                       g++ \
                       bash \
                       mariadb-dev \
                       mariadb-client \
                       yarn \
                       sqlite-dev

RUN gem install bundler -v "2.0.2"

RUN mkdir /myapp
WORKDIR /myapp

COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install

COPY . /myapp

COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]

EXPOSE 3000
CMD ["bundle", "exec", "falcon", "--verbose", "serve", "-p", "3000", "-b", "http://0.0.0.0"]

Denken Sie von Anfang an

Ich steckte in einer Kopie fest und konnte nicht mehr gehen, also ging ich zurück zum Anfang.

Was brauche ich, wenn ich einen Browsertest (E2E) durchführe?

-Webbrowser Chrome, Firefox, IE, Opera usw.

  • WebDriver Ein Modul, das eine API zum Betreiben eines Browsers bereitstellt
  • Selenium Eine Bibliothek, die mit WebDriver kommuniziert und den Browser programmgesteuert bedient

(Zitiert von hier https://qiita.com/Chanmoro/items/9a3c86bb465c1cce738a)

Sie benötigen diese drei, wenn Sie Ihren Browser testen. In der Umgebung mit Docker ist das oben Genannte nicht verfügbar, daher müssen Sie alle vorbereiten.

Außerdem erfahren Sie, wie Sie einen Browser vorbereiten --Bauen Sie Chrom mit dem gleichen Bild wie die Schienenumgebung

① Probieren Sie es mit der neuen Rails New App aus

Der Artikel, auf den ich mich zuerst bezog, "https: // qiita.com / at-946 / items / e96eaf3f91a39d180eb3", funktionierte nicht. .. ..

② Versuchen Sie, auf einen anderen Artikel zu verweisen

https://qiita.com/ngron/items/f61b8635b4d67f666d75#comments Als nächstes werde ich auf diesen Artikel verweisen. Dann hat es mit der Rails New App geklappt! Ein bisschen vorwärts!

Ich habe jedoch einen Fehler in der App erhalten, die ursprünglich den Testcode implementieren wollte. Hier ist der Fehler zu diesem Zeitpunkt.

/bin/sh: apt-get: not found

Wenn Sie den Fehlertext nachschlagen, ist dieser Artikel ein Hit. https://qiita.com/HorikawaTokiya/items/a2a174680d7dd759ccae

Alpines Linux? ?? ?? ?? Ubuntu? ?? ?? Warum über OS sprechen ...?

③ Denken Sie an den Unterschied zwischen vorhandenen Apps und Apps, die mit neuen Schienen erstellt wurden

Gab es etwas, wo das Betriebssystem eingestellt war ...? Versuchen Sie beim Nachdenken, eine andere Beschreibung zwischen der neuen Rails-App und der vorhandenen App zu finden.

Dockerfile


FROM ruby:2.6.6

Dockerfile (vorhandene App)


FROM ruby:2.6.6-alpine3.11

Ah! Ich schreibe Alpine! Aber was meinst du ...? ?? ?? Da mir bewusst war, was zum Erstellen eines Containers für das Docker-Image erforderlich ist, kam plötzlich die Geschichte des Betriebssystems heraus und es gibt eine Beschreibung des Betriebssystems im Ruby-Image? ?? Es ist in einem Zustand.

Folgendes wurde von einem Ingenieur unterrichtet (danke ...)

Alpine verwendet APK als Paketmanager und Debian und Ubuntu verwenden APT. Der Paketmanager ist wie ein Ort, an dem Tools und Apps bereitgestellt werden, die auf dem Betriebssystem installiert werden können, z. B. der iPhone App Store und der Android Play Store. Der Paketmanager ist nach Betriebssystem (oder einer Fraktion) unterteilt, und die installierten Apps unterscheiden sich jeweils geringfügig. Dieselbe App wie MySQL heißt auch MySQL-Server für APT und MySQL für APK, was ebenfalls etwas anders ist.

Im Fall von Docker hängt der Grund für die Abweichung des Betriebssystems vom verwendeten Image ab.

Zum Beispiel Ruby-Image https://hub.docker.com/_/ruby

2.5.8 bis 3.0.0, aber der OS-Name (oder OS-Codename) ist nach jedem alpin oder schlank.

APT und APK sollten als Anwendungen betrachtet werden. Da APT und APK unterschiedliche Anwendungen sind, werden sie unterschiedlich verwendet.

④ Versuchen Sie, das Rubinbild in das von Ubuntu zu ändern

Da es keinen Grund gab, alpine zu verwenden, habe ich die vorhandene App Ruby in Ubuntu's umgeschrieben. Wenn Sie dann diesem Artikel https: // qiita.com / ngron / items / f61b8635b4d67f666d75 # Kommentare früher folgen, wird der js-Test auch mit vorhandenen Apps bestanden! Es war lang. .. ..

Fazit

Schließlich habe ich im ersten Artikel, auf den ich mich bezog, nicht verstanden, warum es nicht funktioniert hat. Der Artikel, der nicht funktionierte, war jedoch das Hinzufügen eines Containers für Chrome zum Docker-Compose, und der Artikel, der funktionierte, befasste sich mit dem Erstellen von Chrome mit demselben Image wie die Rails-Umgebung. Ersteres war also aus irgendeinem Grund ein Versionsunterschied. War der Webcontainer und der Chromecontainer nicht miteinander verbunden? (Es ist ein Rätsel, dass Ping-Chrom vergangen ist ...)

Diesmal habe ich verschiedene Artikel ausprobiert und festgestellt, dass das Bild Unterschiede im Betriebssystem aufweist.

Recommended Posts

Webdrivers :: BrowserNotFound: Chrome-Binärdatei konnte nicht gefunden werden. Als ich zum ersten Mal versuchte, E2E mit Docker + Rails zu testen, war ein Fehler aufgetreten.
[Fehlerbehebung] Tritt auf, wenn versucht wird, mit Docker eine Umgebung für den Frühling zu erstellen
Beim Verschlüsseln mit Node + Docker wurde eine Fehlermeldung angezeigt
Als ich versuchte, ein Composer-Update im Docker-Container durchzuführen, wurde ich wütend auf proc_open (): fork failed
Beim Versuch, PowerMock mit JUnit zu verwenden, wurde ein IllegalAccessError angezeigt
[Ruby on Rails] Beim ersten Anmelden ・ So teilen Sie den Bildschirm mit jQuery in zwei Hälften
Als ich versuchte, mit Docker eine Umgebung für PHP7.4 + Apache + MySQL zu erstellen, blieb ich stecken [Windows & Mac]
Probleme, denen ich beim Erstellen der Digdag-Umgebung mit Docker verfallen war
Ich möchte bei der Registrierung in der Datenbank eine Fehlermeldung anzeigen
Beim Formatieren mit SimpleDateFormat blieb ich beim Umgang mit Zeitzonen
In WSL2, als ich "Docker-Compose Up" machte, bekam ich eine Fehlermeldung, dass die sh-Datei nicht gefunden wurde.
Was ist zu tun, wenn in einer der Quellen in der Entwicklungsumgebung mit Docker × Rails × RSpec "Nicht gefunden" angezeigt wird?
Ich habe zum ersten Mal versucht, Docker zu berühren
Umgang mit dem Fehler yaml.scanner.ScannerError: Beim Scannen nach dem nächsten Token, das beim Erstellen einer Rails-Umgebung mit Docker angezeigt wurde
Eine Geschichte über einen Fehler während der Migration in Docker PHP Laravel
Beim Versuch, sbt zu installieren, um eine Scala-Entwicklungsumgebung zu erstellen, ist ein Fehler aufgetreten
[Docker] Als ich Docker-Compose Build erstellt habe, wurde die Fehlermeldung "Datei kann nicht gelesen werden" angezeigt. .. [Rails 6.0]
Nachdem ich einen Artikel mit Rails Simple Calendar veröffentlicht habe, möchte ich ihn im Kalender wiedergeben.
Ich war süchtig nach WSl, als ich versuchte, mit Vue.js eine Entwicklungsumgebung für Android-Anwendungen zu erstellen
[Rails] Ich habe zum ersten Mal versucht, die button_to-Methode zu verwenden
Technische Ursachen und Gegenmaßnahmen für die Punkte, denen ich mit der ersten Android-App und Kotlin verfallen war
[Programmieranfänger] Was tun, wenn Schienen zu einem Fehler in der lokalen Entwicklungsumgebung werden?