2016-08-19 3 views
0

현재 자바 스크립트 환경에서 Mocha & Chai와 함께 selenium-webdriver를 사용하고 있습니다. & false 값을 반환하는 방법을 찾고 있습니다. 항목이 DOM에 존재하지 않습니다. 기본적으로 사용자가 로그인했는지 여부를 확인합니다.Mocha/Chai가 포함 된 Selenium - DOM에 아이템이 존재하지 않습니다.

로그인 한 사용자는 다음과 같이 DOM에 있습니다 (로그인하지 않은 경우에는 존재하지 않습니다).

<a class="account-panel-controls__link" role="link" id="sign-out-nav" data-log-out="">Sign out</a>

나는 그렇지 않으면 나는 다른 조각 위하지 않는 경우에만 존재하는 다른 뭔가를 (클릭합니다, 그것은 존재하는 경우를 클릭 & 존재 여부를 확인하는 방법을 찾고 있어요).

<a class="account-panel-controls__link" role="link" id="registration-sign-in-nav" data-log-out="">Sign in</a> 

나는 추적의 몇 가지 변화를 시도했다 그러나 그것은 아무데도 저를 얻었다 없습니다입니다. Id 'sign-out-nav'를 가진 요소가 처음에는 존재하지만 괜찮 으면 작동하지만, 그렇지 않으면 그 요소를 찾을 수 없다는 테스트가 실패합니다 (DOM에 없기 때문에 추측 할 수 있습니까?).

driver.findElement(By.id('sign-out-nav')).isDisplayed().then(function (displayed) { 
 
    if (displayed) { 
 
     driver.findElement(By.id('sign-out-nav')).click(); 
 
    } 
 
    else{ 
 
     driver.findElement(By.id('registration-sign-in-nav')).click(); 
 
    } 
 
});
나는 그것이 0 이상이다하지만 그 방법을 실행하기 위해 아무것도 얻을 수없는 경우 보는 게시물의 숫자 .getSize 같은 & 시도 물건() &를 검색했습니다. 나는 또한 'findElements'를 .length와 함께 사용해 보았지만 [Object object]의 값과 1의 길이를 반환하므로 값을 구분할 수 없다.

내가 누락 된 자료가 있습니까? 이 페이지 요소를 찾기 위해 시도 할 때

감사

+0

HTML 요소가 서버에서 보낸 요소입니까? 또는 JavaScript 라이브러리에서 생성 한 것입니까? 이는 사용할 수있는 기술이 사례에 따라 다를 수 있기 때문에 중요합니다. 전자의 경우에는 엘리먼트를 테스트 할 때 반드시 페이지에 있어야하기 때문에 엘리먼트를 기다리는 것을 건너 뛸 수 있습니다. (그리고 네,'driver.findElements'를 사용해야합니다.) 후자의 경우 요소를 기다려야합니다. – Louis

답변

0

셀레늄은 정말, 정말 변덕스러운입니다. driver.findElement를 driver.wait()로 둘러싸면 발견 할 수 있는지 확인하십시오. 이것은 webdriverio + 모카 + assertjs + 셀레늄을 사용하여 인스턴스에 도움이되지만 경우

+0

지금 회신 해 주셔서 사과드립니다. 나는 그것들이 이미 페이지 로딩의 일부인 로그인/가입을 기다리는 것과 마찬가지로 기다림과 관련이 있다고 믿지 않는다. 나는 또한 driver.sleep() 테스트를하면서 그것을 둘러싸고 있지만 슬프게도 운이 없었다. – Sean

0

확실하지, 내가 사용하는 다음이 내가 작업 스택 작동

assert.doesNotThrow(() => { browser.getText('#registration-sign-in-nav') }); 

을 때문에 때 요소 아무튼 존재하지 않으면 오류가 발생합니다.

관련 문제