2017-07-28 5 views
0

Meine aktuelle Situation ist, dass ich versuche, auf einen Marker in einem Google Maps-Fenster auf einer Webseite zu klicken. Ich habe die Markierungen auf zwei Arten erfolgreich lokalisiert: element.all(by.css('.angular-google-map-marker')) und element.all(by.repeater('m in map.markers'))."Klicken" auf ein nicht sichtbares Element

Ich habe bewiesen, dass ich die richtigen Elemente erhalte, indem ich den Standort auf der Google Map ändere und count() benutze, um die Anzahl der vorhandenen Marker abzurufen, die in jedem Fall die richtige Zahl zurückgibt.

aber wenn ich versuche, element.all(by.css('.angular-google-map-marker')).first().click() zum Beispiel zu tun, erhalte ich folgende Fehlermeldung:

Failed: element not visible

HTML-Abschnitt

<div ng-transclude="" style="display: none"> 

    <span class="angular-google-map-marker" ng-transclude="" ng-repeat="m in map.markers" options="m.options" coords="m.coords" idkey="m.id" click="onMarkerClick"></span> 

    <span class="angular-google-maps-window" ng-transclude="" coords="activeMarker.coords" options="windowMapOptions" show="windowMapOptions.show" closeclick="closeInfoWindow" templateurl="'gMapInfoWindow.html'" templateparameter="activeMarker"></span> 

</div> 

Normalerweise Elemente, die ein Ereignis aufgrund Klick hat eine auslösen Attribut wie ng-click= foo(), jedoch verwenden die obigen Markierungen nur click= foo(). Wenn Sie die Zeile mit dem div-Tag anzeigen, wird außerdem angezeigt, was möglicherweise den Sichtbarkeitsfehler erklärt.

Meine Frage: Gibt es eine Möglichkeit, den Effekt eines Attributs wie click= foo() zu aktivieren, ohne auf das Element direkt zu klicken?

Antwort

1

Stellen Sie zunächst sicher, dass Sie mit dem Element interagieren können, wenn es sichtbar ist. Sie können dies in den DevTools Ihres Browsers tun, indem Sie es durch Hinzufügen einer display:block sichtbar machen. Stellen Sie dann sicher, dass der Wert auch bei Verwendung der Angular Binding verwendet werden kann, wenn Sie den Wert der Auswahlbox ändern.

Wenn ja, können Sie einfach das Element sichtbar mit Protractor machen, indem ein Stück Javascript auf der Seite mit dem folgenden Befehl Injektion:

browser.executeScript('document.querySelector("div").style.display = "block"'); 

Daraus ergibt sich ein Versprechen, so bewusst sein, dass!

2

Abgesehen von dem Versuch, ein Element sichtbar und dann auf machen, können Sie versuchen, „über JavaScript“ (es gibt ein paar Unterschiede - WebDriver click() vs JavaScript click()) klicken:

var marker = $('.angular-google-map-marker'); 
browser.executeScript("arguments[0].click();", marker.getWebElement()); 
+0

Lebensretter dank –

Verwandte Themen