내 웹 사이트에 대한 테스트 프레임 워크를 구축 중입니다. 프레임 워크를 테스트에서 완전히 분리하고 싶습니다. 문제는 테스트를 작성할 때 가끔 Assert에 시간이 필요합니다. 예를 들어 파일 업로드 페이지에 있고 파일 업로드시 웹 페이지에 성공적으로 업로드 된 파일이 표시되지만 브라우저가이 페이지에 도달 할 때까지 많은 시간이 필요합니다.Selenium Waits Logic
어서 트가 결과를 반환하기 전에 언젠가 강제로 대기 상태로 유지해야합니까? 직장 내 현재의 방법으로 설명 할 수
일부 코드 :
업로드 페이지 클래스
Public class UploadPage
{
[FindsBy(How = How.Name, Using = "upload-button")]
public IWebElement BtnUpload { get; set; }
public UploadPage()
{
PageFactory.InitElements(Driver, this);
}
public void UploadFile(string path)
{
//select file
BtnUpload.Click();
}
}
성공적인 업로드 페이지 :
Public class UploadSuccessfulPage
{
[FindsBy(How = How.Name, Using = "success-message")]
public IWebElement LblSuccessMessage{ get; set; }
public UploadSuccessfulPage()
{
PageFactory.InitElements(Driver, this);
}
public bool IsAt()
{
Driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(60))
return Driver.url==configurations.UploadSuccessfulPageURL;
}
}
시험 방법 :
public void TestUpload()
{
UploadPage uploadPage= new UploadPage();
uploadPage.UploadFile(path);
UploadSuccessfulPage successPage= new UploadSuccessfulPage();
Assert.IsTrue(successPage.IsAt());
}
wh 엉뚱한 생각이 든다. 내 테스트를 이렇게 작성한다. 어설 션은 암시 적 대기를 포함하고 있음에도 불구하고 기다리지 않는다.
P.S : Thread.Sleep();을 사용하지 않을 것이다.
public bool IsAt()
{
Driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(60));
try {
return driver.FindElement(By.Name("success-message").Displayed;
} catch (WebDriverException e) {
return false;
}
}
또는 명시 적으로 대기 사용 :
public bool IsAt()
{
try {
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(60));
wait.Until(ExpectedConditions.ElementIsVisible(By.Name("success-message")));
return true;
} catch (TimeoutException e){
return false;
}
}
업데이트 : 당신은 URL에 의해 확인하려면 을의 bool IsAt()
가 같아야합니다
고맙습니다. 다시 시도해보고 문제가 해결 될 수있는 방법을 알려주십시오. –
첫 번째로,'bool IsAt()'에 대해 제공 한 코드에서 기대하는 바가 전혀 없다는 것을 알 수 없습니다. ImplicitWait을 설정하면 ('driver.FindElement'처럼) 당신이 호출하는 다음 명령에만 영향을 미칩니다. 위의 두 예제는 IsAt() 메소드가 수행해야하는 메소드에 대해 명확하게 말하고 있습니다. 성공 메시지가 표시되는지 여부를 확인하는 것입니다. 나는 두 번째를 더 선호 할 것이다. –
하지만, IsAt 메소드에서 implicitwait 아래에 레이블을 찾을 수있는 조건이 있다고 썼습니다. –