2012-06-07 18 views
8

C'è un modo nell'ultima versione di Selenium DotNet Webdriver (2.22.0) per verificare se un elemento è visibile prima di fare clic su/interagire con esso?Selenium C# Webdriver Come rilevare se l'elemento è visibile

L'unico modo che ho trovato è provare a gestire l'eccezione ElementNotVisible che si verifica quando si tenta di inviare chiavi o fare clic su di esso. Sfortunatamente ciò si verifica solo dopo aver tentato di interagire con l'elemento. Sto usando una funzione ricorsiva per trovare elementi con un certo valore, e alcuni di questi elementi sono visibili solo in determinati scenari (ma il loro html è ancora lì indipendentemente da cosa, in modo che possano essere trovati).

È a mia conoscenza che la classe RenderedWebElement è deprecata e altre varianti. Quindi niente casting per quello.

Grazie.

+0

Ci dovrebbe essere un WebElement.isDisplayed() per verificare se elemento è visibile –

+0

Purtroppo la cattura eccezione è strada da percorrere. Visualizzato e abilitato non sempre rende l'elemento utilizzabile, il che significa che l'elemento può essere sia visualizzato che abilitato ma non ancora cliccabile, ad esempio. Questo accade quando l'elemento è fuori dalla vista (in alcuni browser) e ciò che devi fare in genere è scorrere fino all'elemento in modo che diventi visibile. – ljgww

risposta

18

Per Java v'è isDisplayed() sul RemoteWebElement - così è isEnabled()

In C#, c'è un & proprietà Enabled Mostrato.

Entrambi devono essere veri per un elemento presente sulla pagina e visibile per un utente.

Nel caso di "html è ancora lì, non importa cosa, in modo che possano essere trovati", è sufficiente controllare ENTRAMBI isDisplayed (Java)/Visualizzato (C#) AND isEnabled (Java)/Enabled (C#).

esempio, in 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

Grazie per l'aiuto! – user1442482

Problemi correlati