所以我目前的情况是我试图点击网页上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()
等属性的效果,而无需直接点击该元素?
答案 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"');
这会产生一种承诺,所以要注意这一点!