2012-06-07 34 views
8

¿Hay forma en la última versión de Selenium DotNet Webdriver (2.22.0) de verificar si un elemento es visible antes de hacer clic/interactuar con él?Selenium C# Webdriver Cómo detectar si el elemento está visible

La única forma que he encontrado es intentar manejar la excepción ElementNotVisible que ocurre cuando intentas enviar claves o hacer clic en ella. Lamentablemente, esto solo ocurre después de que se ha intentado interactuar con el elemento. Estoy usando una función recursiva para encontrar elementos con un cierto valor, y algunos de estos elementos son accesibles solamente en ciertos escenarios (pero su HTML está todavía allí no importa qué, por lo que se puede encontrar).

Tengo entendido que la clase RenderedWebElement está en desuso y otras variantes. Entonces no hay casting para eso.

Gracias.

+0

No debe ser un WebElement.isDisplayed() para comprobar si el elemento es visible –

+0

excepción Desafortunadamente captura es camino a seguir. Los elementos mostrados y habilitados no siempre muestran elementos procesables, lo que significa que el elemento se puede mostrar y habilitar, pero aún no se puede hacer clic, por ejemplo. Esto sucede cuando el elemento está fuera de la vista (en algunos navegadores), y lo que normalmente necesita hacer es desplazarse al elemento para que se vuelva visible. – ljgww

Respuesta

18

Para Java se isDisplayed() en el RemoteWebElement - así es isEnabled()

En C#, hay un & propiedad Enabled Se muestra.

Ambos deben ser verdaderos para que un elemento esté en la página y sea visible para un usuario.

En el caso de "html todavía está allí, no importa qué, para que se puedan encontrar", simplemente marque AMBOS se muestra (Java)/Visualizado (C#) AND isEnabled (Java)/Enabled (C#).

ejemplo, en 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

¡Gracias por la ayuda! – user1442482

Cuestiones relacionadas