2016-12-21 5 views
1

내 웹 사이트에 대한 테스트 프레임 워크를 구축 중입니다. 프레임 워크를 테스트에서 완전히 분리하고 싶습니다. 문제는 테스트를 작성할 때 가끔 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()가 같아야합니다

답변

2

방법 bool IsAt()는 다음과 같이 구현한다 :

public bool IsAt() 
    { 
     try { 
     WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(60)); 
     wait.Until(ExpectedConditions.UrlToBe(configurations.UploadSuccessfulPageURL)); 
     return true; 
     } catch (TimeoutException e){ 
     return false; 
     } 
    } 

클래스 ExpectedConditions에서 적절한 조건을 찾으십시오.

+0

고맙습니다. 다시 시도해보고 문제가 해결 될 수있는 방법을 알려주십시오. –

+2

첫 번째로,'bool IsAt()'에 대해 제공 한 코드에서 기대하는 바가 전혀 없다는 것을 알 수 없습니다. ImplicitWait을 설정하면 ('driver.FindElement'처럼) 당신이 호출하는 다음 명령에만 영향을 미칩니다. 위의 두 예제는 IsAt() 메소드가 수행해야하는 메소드에 대해 명확하게 말하고 있습니다. 성공 메시지가 표시되는지 여부를 확인하는 것입니다. 나는 두 번째를 더 선호 할 것이다. –

+0

하지만, IsAt 메소드에서 implicitwait 아래에 레이블을 찾을 수있는 조건이 있다고 썼습니다. –