레거시 ASP.Net 응용 프로그램에 대해 Cucumber, Selenium 및 Xunit을 사용하여 BDD 테스트를 작성하고 있습니다. 페이지가 디자인 된 방식에 따라 "클릭"할 때마다 서버에서 새 페이지를 가져옵니다. 특정 페이지에 대한 테스트를 자동화해야하는 경우 "클릭"할 때마다 다음과 유사한 줄이 있어야합니까?
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeout));
wait.Until(...); //Wait until something about the page is true
Selenium이 항상 명시 적으로 언급하지 않고 페이지로드를 암묵적으로 기다릴 지 확실하지 않습니다. 이 시나리오를 처리하는 데 권장되는 패턴은 무엇입니까?
항상 "일부 요소"에 대한 아이디어를 가지고 있기 때문에 Until
메서드에 넣을 수 있고 그 결과 취성 테스트로 이어진다 는 것은 번거 롭습니다 . ASP.Net 페이지는 많은 동적 컨트롤과 전체 페이지 새로 고침으로 가득 차있어 테스트 코드를 읽을 수 없게 만듭니다.
내 제안 된 솔루션 : 묵시적으로 대기하고 대기 할 element-id의 매개 변수를 취하는 확장 메서드를 작성합니다. 그러나 나는 위의 문제를 더 관리하기 쉬운 곳으로 리팩토링하고 있습니다. 나는 여전히 명시 적으로 기다릴 필요가있다. 그것을 제거 할 방법이 없습니까? 셀레늄에는 그러한 확장 방법이 필요없이이 경우를 처리 할 수있는 명백한 기본값이 있습니까? 아니면 이것이 실제로 수행하는 자연스러운 방법입니까?
테스트를 신뢰할 수 있고 정확히 필요한 시간 간격 만 기다리려면-그렇습니다. Explicit Waits with WebDriverWait
는 완벽한 솔루션입니다. 그리고 이것은 실제로 매우 "자연스러운" 해결책입니다. 사용자로서 페이지가로드되었음을 어떻게 정의하는지 생각해보십시오. 일반적으로 원하는 콘텐츠를 볼 때입니다. 맞습니까? 로딩 페이지를 볼 때 원하는 콘텐츠가 표시되었는지 여부를 확인하면서 페이지 상태를 지속적으로 재평가하고 있습니다. 명시 적 대기는 동일한 논리를 따릅니다. 기본적으로 500ms마다 예상 조건이 참인지 아닌지 확인하지만 WebDriverWait
.
wait.until()
호출을 자주 사용해야 하고 DRY 원칙을 따르고 싶다면 "추출 방법" 또는 기타 리팩토링 방법을 적용하는 것이 좋습니다.
모든 요소 검색에 적용되는 암시 적 대기를 설정하거나 하드 코딩 된 "인공"지연을 도입 할 수 있지만 이는 신뢰할 수없고 시간 낭비입니다. 결국 필요 이상으로 대기하고 가끔 테스트를 받게됩니다. 실패.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다