2017-01-29 2 views
0

학습 곡선에서 나는 요소가로드 될 때까지 기다렸다가 google에서 많은 페이지를 얻었습니다.잠깐 혼란스러운 요소 찾기 Selenium C#

내 의견으로는 Method2 (ExpectedConditions.ElementIsVisible)가 더 우아하고 달성하고자하는 method1이 무엇인지 동의합니까 아니면 더 좋은 방법이 있습니까?

방법 1

 public static IWebElement FindElement(this IWebDriver driver, By by, int timeoutInSeconds) 
     { 
      if (timeoutInSeconds > 0) 
      { 
       var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds)); 
       return wait.Until(drv => drv.FindElement(by)); 
      } 
      return driver.FindElement(by); 
     } 

방법 2

public static IWebElement FindElement(this IWebDriver driver, By by, int timeoutInSeconds) 
     { 
      WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds)); 
      var element = wait.Until(ExpectedConditions.ElementIsVisible(by)); 
      return element; 
     } 

모든 NoFoundElement 예외가 이미 처리 던져 또는 그것을 무시해야 "하면 어떻게 또한 어떤 제안이나 개선?

답변

0

I 이라고 말하면 "방법 2"가 선호되는 방법입니다. WebDriver를 사용하면 테스트 프레임 워크에서 다시 구현할 필요가 없습니다.

NotFoundException에 관한 질문 : 지정된 제한 시간이 지난 후에 기다리는 조건이 충족되지 않으면 WebDriverWaitWebDriverTimeoutException을 발생시킵니다. 기다리고 싶은 조건에 따라 WebDriverTimeoutException에 자세한 내용이있는 내부 예외가 있습니다. 예를 들어 ExpectedConditions.ElementIsVisible(By.Id("myid"))을 사용하고 요소를 전혀 찾을 수 없으면 내부 예외는 NoSuchElementException이됩니다. 지정된 시간 초과 후에 요소를 찾을 수는 있지만 보이지 않는 경우 WebDriverTimeoutException이 표시됩니다.

요소가 "있음"인지 확인한 후에 수행 할 작업에 따라 다른 ExpectedConditions을 사용할 수도 있습니다. 기다리고있는 요소가 버튼이고 해당 요소를 클릭하려는 경우 ExpectedConditions.ElementToBeClickable을 사용할 수 있습니다. 요소가 DOM에로드되어 표시 될 때까지 기다리지 않고 요소가 활성화 될 때까지 기다릴뿐 아니라 .

+0

내가 생각했던 것을 확인해 주셔서 감사합니다. DefaultWait과 WebdriverWait의 차이점을 알고 있습니까? 나는 혼란 스럽다 – developer9969

+0

'DefaultWait'는'WebDriverWait'의 기본 클래스입니다. 'DefaultWait'는 일반적인 구현 (예를 들어, 타입 파라미터'T')을 가지며,'WebDriverWait'는'TW'가'IWebDriver'가되는 DefaultWait의 서브 클래스입니다. 'DefaultWait'의 아이디어는 당신이 기다리고있는 이벤트가 이미 발생했는지를 결정하기 위해'T' 객체의 도움을 받아 물건을 기다리는 표준화 된 방법을 가질 수있게 해준다는 것입니다. 'WebDriverWait'는'IWebDriver' 객체를 사용하여 이벤트가 발생했는지를 결정하는 방식으로 그 기능을 사용합니다. –

관련 문제