browser.wait(...)
을 통해 특정 요소가 있는지 확인하고 각도가 element1.isPresent()
인 검사기를 작성하려고합니다. 그럴 경우 다른 요소가 있는지 확인하고 싶습니다. element2.isPresent()
.각도기가 불필요하게 대기합니다.
정확하게 element1
과 element2
중 하나가 있어야하며 둘 다 같지 않으면 테스트가 실패하기를 원합니다.
내 코드는 다음과 같습니다
var element1 = element(by.id('test-elem1'));
var element2 = element(by.id('test-elem2'));
browser.wait(function() {
return element1.isPresent();
}, 5000, "Waiting for element 1").then(function() {
console.log('Found element 1');
// Do something with element 1
}, function() {
// Element 1 not present --> look for element 2
browser.wait(function() {
return element2.isPresent();
}, 5000, "Waiting for element 2");
print('Found element 2');
});
내가 기대하는 것은 : element1
가 존재
- 경우 그
.then
가야하므로, 다음 첫 번째browser.wait
는 성공 약속 마무리합니다 첫 번째 함수에 넣고Found element 1
을 인쇄하십시오. - 그러나
element1
이없는 경우 첫 번째browser.wait
은 실패로 끝날 것이므로.then
은element2
을 찾는 두 번째 기능으로 이동해야합니다. 그런 다음element2
이 있으면 테스트를 계속하고Found element 2
을 인쇄 한 다음 통과해야합니다. 그러나element2
이 없으면이 초에 실패하므로browser.wait
이므로 테스트가 실패해야합니다.
element1
이없는 경우 첫 번째 browser.wait
은 실패하고 테스트를 실패하게 만듭니다. element1
이 있으면 나머지 테스트는 예상대로 계속됩니다.
.then()
에 대한 두 번째 매개 변수가 정의 된 경우 실패한 경우 두 번째 함수가 완전히 실패하지 않고 호출되어야한다는 인상을 받았습니다.
다른 곳에서 작업 한 코드가 거의 동일하므로 (내가 삭제 한 이후로 더 이상 참조 할 수 없기 때문에)이 부분이 작동하지 않는 이유를 모르겠습니다.
왜 이런 일이 발생합니까? 난 그냥 예상 약관을 사용
오 : 또한, 두 번째
browser.wait()
호출의then()
콜백에 두 번째console.log()
통화를 보류해야한다. 실제로 문자열을 먼저 가져온 래퍼를 사용했기 때문에 첫 번째 인수를'browser.wait'에 문자열로 남겨 두었습니다. 나는 내 질문을 쓸 때 그것을 잊었다. – Jashaszun또한 'element1'또는 'element2'를 찾았는지에 따라 다른 작업을 수행해야합니다. 아직 예상 조건을 사용해야합니까? – Jashaszun
@Jashaszun 글쎄, 당신은 여전히 그들을 기다릴 수 있지만, 다음에'isPresent()'를 추가적으로 실행한다. 또는 현재 접근법을 고수 할 수 있습니다 (현재 작동한다고 가정) .. btw를 사용하면 함수를 'EC.presenceOf' 호출로 바꿀 수 있습니다. 감사. – alecxe