2012-06-07 17 views
8

Czy istnieje sposób w najnowszej wersji Selenium DotNet Webdriver (2.22.0), aby sprawdzić, czy element jest widoczny przed kliknięciem/interakcją z nim?Selenium C# Webdriver Jak wykryć, czy element jest widoczny?

Jedynym sposobem, jaki znalazłem, jest próba obsługi wyjątku ElementNotVisible, który występuje podczas próby wysłania kluczy lub kliknięcia w niego. Niestety pojawia się to dopiero po podjęciu próby interakcji z elementem. Używam funkcji rekursywnej do znajdowania elementów o określonej wartości, a niektóre z tych elementów są widoczne tylko w niektórych scenariuszach (ale ich html nadal istnieje bez względu na to, więc można je znaleźć).

Rozumiem, że klasa RenderedWebElement jest nieaktualna, a także inne warianty. Więc nie rzucaj się do tego.

Dzięki.

+0

Nie powinno być WebElement.isDisplayed(), aby sprawdzić, czy element jest widoczny –

+0

Niestety łowienie Wyjątkiem jest droga. Wyświetlane i włączane nie zawsze wyświetlają element, który można aktywować, co oznacza, że ​​element może być wyświetlany i włączany, ale nadal nie można go kliknąć. Dzieje się tak, gdy element jest poza widokiem (w niektórych przeglądarkach), a zwykle wystarczy przewinąć element, aby stał się widoczny. – ljgww

Odpowiedz

18

Dla Java nie jest isDisplayed() na RemoteWebElement - jak dobrze jest IsEnabled()

W języku C#, jest wyświetlany & Włączone nieruchomość.

Obie wartości muszą być prawdziwe, aby element był na stronie i widoczny dla użytkownika.

W przypadku "html nadal istnieje bez względu na to, więc można je znaleźć", wystarczy sprawdzić OBU jest wyświetlana (Java)/wyświetlana (C#) AND isEnabled (Java)/włączona (C#).

przykład w 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

Dzięki za pomoc! – user1442482

Powiązane problemy