2017-07-28 203 views
0

所以我目前的情況是,我試圖點擊基於谷歌地圖窗口中的標記在網頁上。我已經成功定位了兩種標記:element.all(by.css('.angular-google-map-marker'))element.all(by.repeater('m in map.markers'))「點擊」一個不可見的元素

我已經證明,我通過更改Google地圖上的位置並使用count()來檢索存在的標記數,從而在每種情況下都返回正確的數字,從而獲得正確的元素。

然而,當我嘗試例如element.all(by.css('.angular-google-map-marker')).first().click()做,我收到以下錯誤:

Failed: element not visible

HTML節引發一些事件,由於點擊有

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

通常元素屬性如ng-click= foo(),但上述標記僅使用click= foo()。另外,如果您用div標籤查看該行,則表示display: none,這可能會解釋可見性錯誤。

我的問題:有沒有辦法激活像click= foo()這樣的屬性的效果而不直接點擊元素?

回答

1

首先確保您可以在元素可見時進行交互,您可以從瀏覽器的DevTools中執行此操作,並通過添加display:block使其可見。然後檢查如果您更改了選擇框的值,該值也可以與角度綁定一起使用。

如果是這樣,你可以很容易地將材料與量角器可見注射頁面一段JavaScript使用下面的命令:

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

這導致一個承諾,所以要意識到這一點!

2

除了努力使元素可見,然後單擊,您可以嘗試點擊「通過JavaScript」(也有一些區別,但 - WebDriver click() vs JavaScript click()):

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

生命的救星感謝 –