2012-04-05 3 views
1

Selenium 2.0 웹 드라이버를 사용하고 있습니다. 내 페이지에서 뭔가 찾을 때마다 내 스크립트가 가끔 실패합니다.ID로 찾기 요소가 Selenium 2.0 Webdriver에서 실패 함

요소를 찾을 수 없습니다. { "method": "id", "selector": "username"}; 내 코드의

부분 : 그것은 같은 코드를 성공적으로 때로는 통과

driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 

WebElement userName = driver.findElement(By.id("username")); 
userName.clear(); 
userName.sendKeys("admin"); 

. 나는 무슨 일이 일어나고 있는지 이해하지 못한다.

답변

4

때로는 페이지가 예상보다 느리게로드되어이 문제가 발생합니다. 내 래퍼 도우미를 적용하여 해결 방법을 찾고 있습니다. 그것은 다음과 같습니다

private WebElement foundElement; 

public WebElement find(By by){ 
    for (int milis=0; milis<3000; milis=milis+200){ 
     try{ 
     foundElement = driver.findElement(by); 

     }catch(Exception e){ 
     Thread.sleep(200); 
     } 

    } 
    return foundElement; 
} 

그리고 나중에 코드 :

WebElement userName = find(By.id("username")); 

이 방법을 찾기 위해 노력하고 발견되지 않는 경우는 200 밀리 초 수면하고 다시 시도합니다. 3 초 (편집 가능)에서 찾을 수없는 경우 충돌이 발생합니다 (메서드에서 예외를 throw한다고 아마 말할 수 있습니다).

페이지로드 속도가 확실하지 않을 때마다 적용합니다 ...

new WebDriverWait(driver, 10).until(new ExpectedCondition<Boolean>() { 

     public Boolean apply(WebDriver arg0) { 

      WebElement element = driver.findElement(By.id("username")); 


      return element.isDisplayed(); 
     } 
    }); 

이 드라이버가 id 요소가있는 경우 검사를 중지해야한다 -

+0

감사합니다. 당신의 접근 방식을 시험해 보도록하겠습니다. 어떻게 작동하는지 알려줍니다. – user1315920

+0

감사합니다. 그것은 일했다!! – user1315920

+0

이런 종류의 명시 적 대기보다 훨씬 뛰어난 경우 Hari Reddy가 보여주는 유창한 대기를 사용하십시오. –

3

문제에 대한 가장 좋은 해결책은 WebDriverWait 개체를 사용하여 브라우저에서 id 요소를로드 할 때까지 드라이버의 대기를 만드는 것입니다 짐을 실은. 10 초 이내에로드되지 않으면 timedOutException이 발생합니다.

+0

협조가 필요한 분 : C# WebDriverWait 객체는 Selenium.Support NuGet 패키지의 일부입니다. – MegaMilivoje

관련 문제