Webdrivers :: BrowserNotFound: Impossible de trouver le binaire Chrome. Lorsque j'ai essayé pour la première fois de tester E2E avec Docker + Rails, je suis resté coincé dans une erreur.

Je laisserai pour mémoire que cela s'est produit parce que c'était beaucoup emballé.

Premier article auquel j'ai fait référence https://qiita.com/at-946/items/e96eaf3f91a39d180eb3

J'ai essayé de l'implémenter en me référant à l'article ci-dessus, mais j'obtiens une erreur sans navigateur. Pourquoi. .. ..

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

Lorsque j'ai vérifié diverses choses, le test normal a réussi, mais lorsque j'ai essayé de tester javascript (js: true), il semble que ce soit de la mousse avec l'erreur ci-dessus.

  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

↑ Donc, cette partie de l'article dont j'ai parlé ne fonctionne pas bien ...?

Vérifiez le conteneur de chrome

Essayez d'accéder à http: // localhost: 4444 / wd / hub. image.png

Il semble que cela fonctionne correctement.

Vérifier si la communication est transmise du conteneur Web au conteneur Chrome

Lancer un shell sur un conteneur Web

$ docker-compose run --rm web sh

Vérifiez si la communication est possible

$ ping chrome
64 bytes from ... 

Confirmez que les lettres circulent tout le temps. Apparemment, le conteneur Web et le conteneur Chrome sont connectés. Je ne comprends pas de plus en plus. .. ..

Peu importe ce que vous ajoutez ou supprimez en référence à divers autres articles

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

Souffrant de l'erreur.

Au fait, le Dockerfile ressemble à ceci.

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"]

Pensez depuis le début

Je suis resté coincé dans une copie et je ne pouvais plus y aller, alors je suis retourné au début.

De quoi ai-je besoin lors d'un test de navigateur (E2E)?

-Navigateur Web Chrome, Firefox, IE, Opera, etc.

  • WebDriver Un module qui expose une API pour faire fonctionner un navigateur
  • Selenium Une bibliothèque qui communique avec WebDriver et exploite le navigateur par programmation

(Cité ici https://qiita.com/Chanmoro/items/9a3c86bb465c1cce738a)

Vous aurez besoin de ces trois éléments lors du test de votre navigateur. Dans l'environnement avec Docker, ce qui précède n'est pas disponible, vous devez donc les préparer tous.

Aussi, sur la façon de préparer un navigateur --Créer du chrome avec la même image que l'environnement des rails

① Essayez-le avec la nouvelle application de rails

L'article auquel j'ai fait référence en premier, https: // qiita.com / at-946 / items / e96eaf3f91a39d180eb3, n'a pas fonctionné. .. ..

② Essayez de vous référer à un autre article

https://qiita.com/ngron/items/f61b8635b4d67f666d75#comments Ensuite, je ferai référence à cet article. Ensuite, la nouvelle application des rails a fonctionné! Un peu en avant!

Cependant, j'ai eu une erreur dans l'application qui voulait à l'origine implémenter le code de test. Voici l'erreur à ce moment-là.

/bin/sh: apt-get: not found

Si vous recherchez le texte d'erreur, cet article est un succès. https://qiita.com/HorikawaTokiya/items/a2a174680d7dd759ccae

Alpine Linux? ?? ?? ?? Ubuntu? ?? ?? Pourquoi parler d'OS ...?

③ Pensez à la différence entre les applications existantes et les applications créées avec des rails new

Y avait-il quelque chose où le système d'exploitation était réglé ...? Tout en réfléchissant, essayez de trouver une description différente entre la nouvelle application de rails et l'application existante.

Dockerfile


FROM ruby:2.6.6

Dockerfile (application existante)


FROM ruby:2.6.6-alpine3.11

Ah! J'écris Alpine! Mais que voulez-vous dire ...? ?? ?? Puisque j'étais conscient de ce qui est nécessaire pour créer un conteneur pour l'image docker, tout à coup l'histoire du système d'exploitation est sortie et il y a une description du système d'exploitation dans l'image ruby? ?? C'est dans un état.

Ce qui suit a été enseigné par un ingénieur (merci ...)

Alpine utilise APK comme gestionnaire de paquets, et Debian et Ubuntu utilisent APT. Le gestionnaire de packages est comme un endroit qui fournit des outils et des applications qui peuvent être installés sur le système d'exploitation, tels que l'iPhone App Store et Android Play Store. Le gestionnaire de paquets est divisé par OS (ou quelque chose comme une faction), et les applications installées sont légèrement différentes pour chacun. De plus, la même application, telle que MySQL, est appelée mysql-server pour APT et mysql pour APK, qui est également légèrement différente.

Dans le cas de Docker, la raison pour laquelle le système d'exploitation est différent dépend de l'image que vous utilisez.

Par exemple, image Ruby https://hub.docker.com/_/ruby

2.5.8 à 3.0.0, mais le nom du système d'exploitation (ou le nom de code du système d'exploitation) est alpin ou mince après chacun.

APT et APK doivent être considérés comme des applications, et comme APT et APK sont des applications différentes, ils sont utilisés différemment.

④ Essayez de changer l'image de rubis en celle d'ubuntu

Comme il n'y avait aucune raison d'utiliser alpine, j'ai réécrit l'application existante ruby en ubuntu. Ensuite, si vous suivez cet article https: // qiita.com / ngron / items / f61b8635b4d67f666d75 # comments plus tôt, le test js passera même avec les applications existantes! C'était long. .. ..

Conclusion

Après tout, je ne comprenais pas pourquoi cela ne fonctionnait pas dans le premier article auquel je faisais référence. Cependant, l'article qui ne fonctionnait pas était de savoir comment ajouter un conteneur pour chrome à docker-compose, et l'article qui fonctionnait était de savoir comment créer du chrome avec la même image que l'environnement rails, donc le premier était pour une raison quelconque, telle qu'une différence de version. Le conteneur Web et le conteneur Chrome n'étaient-ils pas liés? (C'est un mystère que le ping chrome est passé ...)

J'ai essayé plusieurs articles cette fois et j'ai appris qu'il y avait des différences de système d'exploitation dans l'image.

Recommended Posts

Webdrivers :: BrowserNotFound: Impossible de trouver le binaire Chrome. Lorsque j'ai essayé pour la première fois de tester E2E avec Docker + Rails, je suis resté coincé dans une erreur.
[Résolution d'erreur] Se produit lors de la tentative de création d'un environnement pour le printemps avec docker
Quand je bcrypt avec node + docker, j'ai une erreur
Quand j'ai essayé de composer une mise à jour dans le conteneur Docker, je me suis fâché avec proc_open (): fork a échoué
J'ai eu un IllegalAccessError en essayant d'utiliser PowerMock avec JUnit
[Ruby on Rails] Lors de la première connexion ・ Comment diviser l'écran en deux à l'aide de jQuery
Quand j'ai essayé de créer un environnement pour PHP7.4 + Apache + MySQL avec Docker, je suis resté bloqué [Windows & Mac]
Problèmes auxquels j'étais accro lors de la création de l'environnement digdag avec docker
Je souhaite afficher un message d'erreur lors de l'inscription dans la base de données
J'étais coincé avec la gestion des fuseaux horaires lors du formatage avec SimpleDateFormat
Dans WSL2, quand j'ai fait `docker-compose up`, j'ai eu une erreur disant que le fichier sh n'a pas été trouvé.
Que faire lorsque «Impossible de trouver» dans l’une des sources apparaît dans l’environnement de développement avec Docker × Rails × RSpec
J'ai essayé de toucher Docker pour la première fois
Comment gérer l'erreur yaml.scanner.ScannerError: lors de la recherche du jeton suivant apparu lors de la création d'un environnement Rails avec Docker
Une histoire sur une erreur lors de la migration dans docker PHP Laravel
J'ai eu une erreur en essayant d'installer sbt pour créer un environnement de développement Scala
[Docker] Quand j'ai fait la compilation de docker-compose, j'ai eu une erreur disant Impossible de lire le fichier. .. [Rails 6.0]
Après avoir publié un article avec Rails Simple Calendar, je souhaite le refléter dans le calendrier.
J'étais accro à WSl en essayant de créer un environnement de développement d'applications Android avec Vue.js
[Rails] J'ai essayé d'utiliser la méthode button_to pour la première fois
Causes techniques et contre-mesures pour les points auxquels j'étais accro avec la première application Android et Kotlin
[Débutant en programmation] Que faire lorsque les rails deviennent une erreur dans l'environnement de développement local