web-dev-qa-db-ja.com

分度器、isDisplayed()でNoSuchElementErrorを取得:ロケーターを使用して要素が見つかりません

分度器2.0では、1つの要素が表示されている場合にexpect()をチェックインしています。私はfalseを期待していますが、奇妙なことは次のエラーが発生することです:

NoSuchElementError:ロケーターを使用して要素が見つかりません: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();
    });
});

要素がページ上にないためにこのエラーが発生することは理解していますが(確認したいのですが)、エラーではなくfalseを取得すべきではありませんか?

23
Mikel

isDisplayed()は要素が表示されているかどうかを確認しますが、DOMに要素が存在するかどうかを確認する必要があります。使用するには isElementPresent() または- isPresent()

expect(browser.isElementPresent(element(by.id('userForm')))).toBe(false);
expect(element(by.id('userForm')).isPresent()).toBe(false);

こちらもご覧ください:

32
alecxe

このエラーはWebDriverの動作の一部です。そのような場合には、 isPresent または isElementPresent を使用することをお勧めします

2
Vasiliy Vanchuk

表示されている要素が表示されていない場合にAを実行し、要素が見つからない場合は例外を無視します。

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
});
1