2015-06-22 57 views
4

我还在学习量角器,所以我不确定这是一个简单的答案,我没有得到,但我只是想让浏览器等待直到我检索的属性为真。Browser.wait()直到.getAttribute()返回true

我正在测试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'); 

这给我的错误:

Element is not clickable at point (436, 693). Other element would receive the click: <md-backdrop class="md-select-backdrop md-click-catcher md-default-theme"></md-backdrop>

还要说明一点,如果我topping.click()browser.wait(),则测试通过之前把browser.sleep(1000);。所以我知道剩下的测试不是失败的。出于某种原因,等待呼叫不起作用。

我在想这可能与我试图点击的选项在点击topping时在技术上看不到这一事实有关,因为它位于带有滚动元素的组合框中。如果有人知道模拟滚动到“洋葱”元素的好方法,那么也会非常感激。

回答

5

你缺少从等待状态功能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(); 
+0

这似乎并没有解决它。我仍然得到元素在点(x,y)错误处不可点击。我可以看到被点击的按钮,然后一个选择窗口开始弹出,但它似乎在该窗口完全加载之前尝试点击。我正在测试[本页]的比萨饼部分(https://material.angularjs.org/latest/#/demo/material.components.select)以供参考。 –

+0

@WesThompson明白了。你能分享到目前为止你所拥有的完整代码以及你得到的错误的堆栈跟踪吗?谢谢。 – alecxe

+0

更新,感谢您愿意帮助。 –

0

我想你想是这样的:

var toppingElem = by.id('#topping'); // or how ever you can designate this element 

browser.wait(function() { 
    return ptor.isElementPresent(toppingElem); 
}, 5000); 
+0

这似乎并没有解决它。我在@ alexce的回答中给出了更长的解释。 –

0

我在硒被点击在错误的坐标我考试中的一过类似的问题来了。实际上,Selenium能够在元素从顶部移动到中心的时候找到元素(弹出以这种方式加载)。然后在点击元素时,它的位置发生了变化,点击错误的位置,从而出现错误。如讨论的here,似乎限制了硒。

如果你有同样的问题,更好地使用thread.sleep与小间隔。

你可能也想访问的页面:Debugging "Element is not clickable at point" error

+0

这是一个非常讨厌的限制哈哈。 –

相关问题