获取错误"失败:元素当前不可见,因此可能无法与"

时间:2016-04-25 05:48:42

标签: angularjs jasmine protractor

尝试点击元素时:

element.all(by.repeater("condition in filterCtrl.conditions")).get(1).click();

我收到的错误是:

Failed: Element is not currently visible and so may not be interacted with". 

我如何克服这一点。

我的CSS如下

<div class="_md-select-menu-container _md-active _md-clickable" aria-hidden="false" id="select_container_198" style="display: block; left: 764px; top: 181px; min-width: 234.547px;"><md-select-menu class="ng-scope _md-overflow" style="transform-origin: 101.273px 72px 0px;"><md-content>
<!-- ngRepeat: condition in filterCtrl.conditions --><md-option ng-repeat="condition in filterCtrl.conditions" value="CONTAINS" tabindex="0" class="ng-scope md-ink-ripple" aria-selected="false" role="option" id="select_option_257"><div class="_md-text ng-binding">Contains</div></md-option><!-- end ngRepeat: condition in filterCtrl.conditions -->option ng-repeat="condition in filterCtrl.conditions" value="ENDS_WITH" tabindex="0" class="ng-scope md-ink-ripple" role="option" aria-selected="false" id="select_option_261"><div class="_md-text ng-binding">Ends with</div></md-option><!-- end ngRepeat: condition in filterCtrl.conditions -->
</md-content></md-select-menu></div>"

2 个答案:

答案 0 :(得分:1)

错误告诉您该元素当前不可见,这就是为什么它无法执行点击的原因。不确定您的应用是如何设置的,如果它是Angular与否等等。但我建议尝试两件事:

1)如果明确加载了该元素,请尝试将其滚动到视图中。

var scrollIntoView = function () {
    arguments[0].scrollIntoView();
}
browser.executeScript(scrollIntoView, yourwebelement);

2)确保元素实际存在并显示在页面上。如果您将代码更改为expect语句并添加.isPresent().isDisplayed() - 这是否会返回true?根据您的错误,我猜isPresent()会返回 true ,但isDisplayed()会返回 false 。如果是这种情况,请尝试添加隐式等待函数以等待元素加载,然后再尝试单击它。

答案 1 :(得分:0)

这是因为在单击元素之前打开了弹出窗口。通过单击URL处理此问题,以便弹出窗口关闭,因此量角器可以与元素进行交互。