我还在学习量角器,所以我不确定这是否是一个我没有得到的简单答案,但我只是想让浏览器等到属性I&I #39; m检索是真的。
我正在测试this site的披萨选项。
完整代码:
browser.get('https://material.angularjs.org/latest/#/demo/material.components.select');
var topping = element(by.model('topping'));
topping.click();
browser.wait(function() {
return topping.getAttribute('aria-expanded').then(function(value) {
return value == 'true';
});
}, 5000);
var toppingOptions = element.all(by.css('[role="option"]'));
toppingOptions.get(5).click();
expect(topping.getText()).toBe('Onion');
这给了我错误:
元素在点(436,693)处无法点击。其他元素会收到点击:
<md-backdrop class="md-select-backdrop md-click-catcher md-default-theme"></md-backdrop>
还有一点需要注意,如果我在browser.sleep(1000);
之后和topping.click()
之前放置browser.wait()
,那么测试就会通过。所以我知道测试的其余部分并不是什么失败。由于某种原因,等待的呼吁不起作用。
我认为这可能与我尝试点击的选项在点击topping
时在技术上不可见这一事实有关,因为它在ComboBox中用滚动元素。如果有人知道一个很好的方法来模拟滚动到&#34;洋葱&#34;我们也非常感激。
答案 0 :(得分:6)
您错过了等待条件函数中的return
:
browser.wait(function() {
return topping.getAttribute('aria-expanded').then(function(value) {
return value == 'true';
});
}, 5000);
请注意,我还简化了then
回调中的比较逻辑。
或者,您也可以等待选项元素变为可见:
var EC = protractor.ExpectedConditions;
var toppingOptions = element.all(by.repeater("topping in toppings"));
browser.wait(EC.visibilityOf(toppingOptions.first()), 5000);
toppingOptions.get(5).click();
答案 1 :(得分:0)
我想你想要这样的东西:
var toppingElem = by.id('#topping'); // or how ever you can designate this element
browser.wait(function() {
return ptor.isElementPresent(toppingElem);
}, 5000);
答案 2 :(得分:0)
我在我的一个测试中遇到了类似的问题,其中Selenium点击了错误的坐标。实际上,Selenium能够在元素从顶部到中心移动得非常快时找到元素(以这种方式加载弹出窗口)。然后在点击元素时,它的位置发生了变化,点击了错误的位置,从而出现错误。正如所讨论的那样here似乎是对硒的限制。
如果您遇到同样的问题,最好小间隔地使用thread.sleep。
您可能还想访问该页面:Debugging "Element is not clickable at point" error