2017-07-28 159 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

生命的救星感谢 –