在可见元素上“单击”

时间:2017-07-28 19:47:47

标签: protractor

所以我目前的情况是我试图点击网页上Google地图窗口中的标记。我已成功找到标记的两种方式: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()时,我收到以下错误:

  

失败:元素不可见

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()等属性的效果,而无需直接点击该元素?

2 个答案:

答案 0 :(得分:3)

除了尝试使元素可见然后点击之外,您还可以尝试点击&#34;通过JavaScript&#34; (虽然有一些差异 - WebDriver click() vs JavaScript click()):

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

答案 1 :(得分:1)

首先确保您可以在元素可见时与元素进行交互,您可以在浏览器的DevTools中执行此操作,通过添加display:block使其可见。然后检查如果更改选择框的值,该值也可以与Angular Binding一起使用。

如果是这样,您可以通过使用以下命令在页面中注入一段Javascript,轻松地使用Protractor显示元素:

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

这会产生一种承诺,所以要注意这一点!