在量角器2.0中,如果显示一个元素,我正在检查expect()
。我希望是假的,但奇怪的是我得到了以下错误:
NoSuchElementError:找不到使用locator找到的元素:By.id(" userForm")
我的代码是:
describe('closeModal', function() {
it('should close the alert that appears after registration.', function(){
element(by.id('closeAlertModalButton')).click();
expect(element(by.id('userForm')).isDisplayed()).toBeFalsy();
});
});
我明白我得到了那个错误,因为页面上的元素不再是(我想要确认的),但是我不应该得到错误而不是错误吗?
答案 0 :(得分:32)
isDisplayed()
会检查元素是否可见,但您需要检查DOM中是否存在元素,使用isElementPresent()
或isPresent()
:
expect(browser.isElementPresent(element(by.id('userForm')))).toBe(false);
expect(element(by.id('userForm')).isPresent()).toBe(false);
另见:
答案 1 :(得分:2)
此错误是WebDriver行为的一部分。对于这种情况,你应该更好地使用 isPresent或isElementPresent
答案 2 :(得分:1)
如果元素可见,则执行A如果不可见则执行B,如果未找到元素,则忽略异常:
element.isDisplayed().then(function(visible){
if (visible) {
// do A when element visible
}else{
// do B when element not visible
}
}, function () {
//suppress exception if element is not found on page
});
答案 3 :(得分:1)
.isDisplayed()
假定元素存在(存在于 DOM 中)
所以如果你这样做
expect($('[ng-show=saving]').isDisplayed()).toBe(true);
但该元素不存在,而不是正常的失败期望,$('[ng-show=saving]').isDisplayed()
将抛出错误导致 it
块的其余部分未执行
如果您假设您正在检查的元素可能因任何原因不存在于页面上,那么请使用下面的安全方法
/**
* element is Present and is Displayed
* @param {ElementFinder} $element Locator of element
* @return {boolean}
*/
let isDisplayed = function ($element) {
return (await $element.isPresent()) && (await $element.isDisplayed())
}
并使用
expect(await isDisplayed( $('[ng-show=saving]') )).toBe(true);