[RUBY] Ich möchte in RSpec auf einen GoogleMap-Pin klicken

Einführung

Ich wollte einen Test schreiben, um auf einen Pin in GoogleMap in RSpec zu klicken, aber ich war süchtig danach, also ist es eine Erinnerung. Bitte beachten Sie, dass die aufgeführten Quellen und Fehlercodes die ausgegebenen sind und unnötige weggelassen werden.

Umgebung

Referenz-URL

https://qiita.com/jnchito/items/607f956263c38a5fec24

https://qiita.com/kon_yu/items/52a0f5f0016564486061

https://stackoverflow.com/questions/31479958/capybara-rspec-not-finding-and-clicking-css-element

https://code-kitchen.dev/html/map-area/

Ziel

Ich möchte testen, ob das Infofenster angezeigt wird, indem ich in GoogleMap auf eine Stecknadel klicke

googlemap.png

Problem

Ursache

Lösung

Kann angeklickt werden, indem das Bereichstag mit der Option "sichtbar: falsch" gefunden wird

googlemap.html


<div id="map"> //Ganze Karte
  <img src="https://maps.gstatic.com/mapfiles/api-3/images/spotlight-poi2_hdpi.png " usemap="#gmimap0"> //Pin Bild
  <map name="gmimap0" id="gmimap0">
    <area> //Klicken Sie auf diesen Kerl und es ist in Ordnung
  </map>
</div>

googlemap_spec.rb


require 'rails_helper'

RSpec.describe "GoogleMap", type: :system do
  describe "Die Seite, auf der GoogleMap angezeigt wird" do
    context "Überprüfen der Funktion von GoogleMap", js: true do
      it "Klicken Sie auf den Pin, um das Infofenster anzuzeigen" do
        pin = find("map#gmimap0 area", visible: false)
        pin.click
        expect(page).to have_css "div.infowindow" #Test auf Vorhandensein der Infowindow-Klasse
      end
    end
  end
end

Schlechtes Muster Teil 1

Suchen Sie das img-Tag des Pins und klicken Sie darauf

googlemap_spec.rb


#Suchen Sie das img-Tag des Pins und klicken Sie darauf
  describe "Die Seite, auf der GoogleMap angezeigt wird" do
    context "Überprüfen der Funktion von GoogleMap", js: true do
      it "Klicken Sie auf den Pin, um das Infofenster anzuzeigen" do
        pin = find("img[src$='spotlight-poi2_hdpi.png']") #Suche nach Pin-Bildern
        pin.click
        expect(page).to have_css "div.infowindow"
      end
    end
  end
#Ich kann nicht auf das IMG-Tag Fehler klicken
#Sie können auf das Bereichstag klicken
Failures:

  1)Seite, auf der GoogleMap angezeigt wird GoogleMap Inhalt anzeigen Wenn Sie auf die Stecknadel klicken, wird das Infofenster angezeigt.
     Failure/Error: find("img[src$='spotlight-poi2_hdpi.png']").click

     Selenium::WebDriver::Error::ElementClickInterceptedError:
       element click intercepted: Element <img alt="" src="https://maps.gstatic.com/mapfiles/api-3/images/spotlight-poi2_hdpi.png " draggable="false" style="position: absolute; left: 0px; top: 0px; width: 27px; height: 43px; user-select: none; border: 0px; padding: 0px; margin: 0px; max-width: none;"> is not clickable at point (699, 750). Other element would receive the click: <area log="miw" coords="13.5,0,4,3.75,0,13.5,13.5,43,27,13.5,23,3.75" shape="poly" title="" style="cursor: pointer; touch-action: none;">
         (Session info: headless chrome=85.0.4183.121)

     [Screenshot]:Pfad zu dem Verzeichnis, in dem die Screenshots gespeichert sind


     # 0   chromedriver                        0x00000001083091b9 chromedriver + 4911545
     .
     .
     .
     # 24  libsystem_pthread.dylib             0x00007fff6c49bb8b thread_start + 15

Finished in 9.05 seconds (files took 0.55005 seconds to load)
1 example, 1 failure

Failed examples:

Schlechtes Muster Teil 2

Suchen Sie das Karten-Tag und klicken Sie darauf

googlemap_spec.rb


#Suchen Sie das Karten-Tag und klicken Sie darauf
  describe "Die Seite, auf der GoogleMap angezeigt wird" do
    context "Überprüfen der Funktion von GoogleMap", js: true do
      it "Testen Sie, ob das Infofenster angezeigt wird" do
        pin = find("map#gmimap0").click #Karten-Tag suchen
        pin.click
        expect(page).to have_css "div.infowindow"
      end
    end
  end
#Map Tag nicht gefunden Fehler
Failures

  1)Seite, auf der GoogleMap angezeigt wird GoogleMap Inhalt anzeigen Wenn Sie auf die Stecknadel klicken, wird das Infofenster angezeigt.
     Failure/Error: pin = find("map#gmimap0").click

     Capybara::ElementNotFound:
       Unable to find visible css "map#gmimap0"

     [Screenshot]:Pfad zu dem Verzeichnis, in dem die Screenshots gespeichert sind


Finished in 7.84 seconds (files took 0.54001 seconds to load)
1 example, 1 failure

Failed examples:

Schlechtes Muster Teil 3

Suchen Sie das Karten-Tag mit "sichtbar: falsch" und klicken Sie auf

googlemap_spec.rb


#sichtbar im Map-Tag:finde mit falsch
  describe "Die Seite, auf der GoogleMap angezeigt wird" do
    context "GoogleMap zeigt Inhalte an", js: true do
      it "Testen Sie, ob das Infofenster angezeigt wird" do
        pin = find("map#gmimap0", visible: false).click #Suchen Sie nach Karten-Tags mit Suchoptionen für versteckte Elemente
        pin.click
        expect(page).to have_css "div.infowindow"
      end
    end
  end
#Fehler, dass auf das Map-Tag nicht geklickt werden kann, da es die Größe Null hat
Failures:

  1)Die Seite, auf der GoogleMap angezeigt wird, sollte angezeigt werden
     Failure/Error: pin = find("map#gmimap0", visible: false).click

     Selenium::WebDriver::Error::ElementNotInteractableError:
       element not interactable: element has zero size
         (Session info: headless chrome=85.0.4183.121)

     [Screenshot]:Pfad zu dem Verzeichnis, in dem die Screenshots gespeichert sind


     # 0   chromedriver                        0x0000000107a8c1b9 chromedriver + 4911545
     .
     .
     # 21  libsystem_pthread.dylib             0x00007fff7034eb8b thread_start + 15

Finished in 8.19 seconds (files took 0.52799 seconds to load)
1 example, 1 failure

Lernen

Recommended Posts

Ich möchte in RSpec auf einen GoogleMap-Pin klicken
Ich möchte ein kleines Symbol in Rails verwenden
Ich möchte eine Funktion in der Rails Console definieren
Ich möchte einen relativen Pfad in einer Situation finden, in der Pfad verwendet wird
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben
Ich möchte eine Parkettdatei auch in Ruby erstellen
Ich möchte eine Webanwendung entwickeln!
Ich möchte einen Unit Test schreiben!
Ich möchte @Autowired in Servlet verwenden
[Rails] Ich möchte Daten verschiedener Modelle in einem Formular senden
Ich möchte im Dialogfeld mehrere Elemente mit einem benutzerdefinierten Layout auswählen
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben (PowerMockito Edition)
Ich möchte ein chinesisches (koreanisches) PDF mit dünnen Berichten anzeigen
Ich möchte für jedes Array mit Lambda-Ausdruck in Java
"Lehrer, ich möchte im Frühjahr eine Anmeldefunktion implementieren" ① Hallo Welt
Ich möchte eine E-Mail in Java senden.
[Ruby] Ich möchte einen Methodensprung machen!
Ich möchte APP_HOME an Logback in Gradle übergeben
Ich wollte (a == 1 && a == 2 && a == 3) in Java wahr machen
Ich möchte eine Struktur für die Ausnahmebehandlung entwerfen
Ich möchte irgendwann sogar in Kotlin sein
Ich möchte den Wert in Ruby erhalten
Sogar in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben (Javassist zweite Abkochung)
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 (Black Magic) ausgeben.
Ich möchte Combine auch in UIKit verwenden.
Ich möchte die praktischen Funktionen von Clojure in Kotlin nutzen
Ich möchte so etwas wie "cls" in Java machen
Ich möchte eine TraceId in das Protokoll einbetten
Ich möchte auch in Laradock Fischschalen verwenden! !!
Ich möchte ES2015 auch in Java verwenden! → (´ ・ ω ・ `)
Ich habe versucht, eine Clova-Fähigkeit in Java zu erstellen
Ich habe versucht, eine Anmeldefunktion mit Java zu erstellen
Ich möchte Schlangenfälle mit Tabellendefinitionen stoppen
Ich möchte eine generische Anmerkung für einen Typ erstellen
Ich möchte der Kommentarfunktion eine Löschfunktion hinzufügen
Ich möchte Zeichen konvertieren ...
[Java] Ich möchte ein Byte-Array in eine Hexadezimalzahl konvertieren
[Anfänger] Ich habe ein Programm zum Verkauf von Kuchen in Java erstellt
Ich möchte mit Ruby (ABC177E) eine schnelle Primfaktorisierung durchführen.
Ich möchte ein bestimmtes Modell von ActiveRecord ReadOnly erstellen
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Methode aufrufen und die Nummer zählen
Ich wollte nur eine reaktive Eigenschaft in Java erstellen
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Ich möchte ein Formular erstellen, um die Kategorie [Schienen] auszuwählen
Ich habe versucht, in Java von einer Zeichenfolge in einen LocalDate-Typ zu konvertieren
Ich möchte dem select-Attribut einen Klassennamen geben
Ich habe versucht, eine Webanwendung voller Fehler mit Kotlin zu implementieren
Ich habe einen RESAS-API-Client in Java erstellt
Ich möchte im gespeicherten Zustand zum selben Bildschirm wechseln
Ich möchte FireBase verwenden, um eine Zeitleiste wie Twitter anzuzeigen