2012-06-07 6 views
8

Selenium DotNet Webdriver (2.22.0)의 최신 버전에서 요소가 클릭/상호 작용하기 전에 표시되는지 확인하는 방법이 있습니까?Selenium C# Webdriver 요소가 표시되는지 검색하는 방법

내가 찾은 유일한 방법은 키를 보내거나 클릭하려고 할 때 발생하는 ElementNotVisible 예외를 처리하는 것입니다. 불행하게도 이것은 요소와 상호 작용하려는 시도가 이루어진 후에 발생합니다. 재귀 함수를 사용하여 특정 값을 갖는 요소를 찾고 이러한 요소 중 일부는 특정 시나리오에서만 볼 수 있습니다 (그러나 html은 무엇이든지간에 여전히 존재하므로 찾을 수 있음).

RenderedWebElement 클래스는 다른 변형과 함께 사용되지 않습니다. 그래서 그것에 주조하지 마십시오.

감사합니다.

+0

WebElement.isDisplayed은() 요소가 –

+0

불행하게도 잡기 예외가 갈 방법이 표시되는지 여부를 확인하기 위해이 있어야한다. 표시 및 사용은 항상 실행 가능 요소를 렌더링하지는 않습니다. 즉, 항목을 표시하고 사용할 수 있지만 클릭 할 수는 없습니다. 이것은 요소가보기에서 (일부 브라우저에서) 벗어 났을 때 발생하며 일반적으로 필요한 것은 요소로 스크롤하여 표시되도록하는 것입니다. – ljgww

답변

18

자바의 경우 RemoteWebElement에()가 isDisplayed한다 -뿐만 아니라의 IsEnabled이다()

의 C#에서는 표시 & Enabled 속성이 있습니다.

요소가 페이지에 있고 사용자가 볼 수 있어야합니다.

"HTML이 아직 무엇이든 관계없이 찾을 수 있습니다."라는 메시지가 표시되면 BOTH isDisplayed (Java)/Displayed (C#) AND isEnabled (Java)/Enabled (C#)를 선택하십시오.

예, C#으로 :

public void Test() 
{ 
    IWebDriver driver = new FirefoxDriver(); 
    IWebElement element = null; 
    if (TryFindElement(By.CssSelector("div.logintextbox"), out element) 
    { 
     bool visible = IsElementVisible(element); 
     if (visible) 
     { 
      // do something 
     } 
    } 
} 

public bool TryFindElement(By by, out IWebElement element) 
{ 
    try 
    { 
     element = driver.FindElement(by); 
    } 
    catch (NoSuchElementException ex) 
    { 
     return false; 
    } 
    return true; 
} 

public bool IsElementVisible(IWebElement element) 
{ 
    return element.Displayed && element.Enabled; 
} 
+0

도움 주셔서 감사합니다! – user1442482

관련 문제