programing

트랙터, isDisplayed() NoSuchElementError:로케이터를 사용하는 요소를 찾을 수 없습니다.

css3 2023. 10. 2. 15:21

트랙터, isDisplayed() NoSuchElementError:로케이터를 사용하는 요소를 찾을 수 없습니다.

트랙터 2.0에서, 나는 체크인을 하고 있습니다.expect()하나의 요소가 표시되는 경우.저는 거짓을 예상하지만, 이상한 것은 제가 다음과 같은 오류를 범한다는 것입니다.

해당 요소 없음 오류:로케이터를 사용하는 요소를 찾을 수 없습니다: 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();
    });
});

페이지에 요소가 더 이상 없어서 그런 오류가 발생하는 것은 이해하지만(확인하고 싶은 것은) 오류가 아니라 거짓이 나와야 하는 것 아닌가요?

isDisplayed()는 요소가 표시되는지 여부를 검사하지만, 요소가 DOM에 있는지 여부를 검사하거나 를 사용합니다.

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

참고 항목:

이 오류는 WebDriver 동작의 일부입니다.이러한 경우는 Present 또는 elementPresent를 사용하는 것이 좋습니다.

보이는 요소가 보이지 않으면 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
});

.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);

언급URL : https://stackoverflow.com/questions/30099903/protractor-with-isdisplayed-i-get-nosuchelementerror-no-element-found-using