2012-12-17 10 views
5

Ciao ho bisogno di controllare un campo a discesa è avere valori indicati, ma quei valori non sono selezionati, quindi non è sempre visualizzato nella casella a discesa. Ho seguito XPath per l'elementoQual è l'alternativa di selenium.isElementPresent in WebDriver

//table[contains(@id,'Field')]//tr[td//span[text()='Code']]/preceding-sibling::*[1]/td//select[contains(@id,'GSRCH_FLT')]/option[text()='not='] 

che sta identificando l'elemento correttamente nel browser. Ma quando io sto usando il seguente metodo WebDriver per verificare che

driver.findElement(By.xpath("//table[contains(@id,'Field')]//tr[td//span[text()='Code']]/preceding-sibling::*[1]/td//select[contains(@id,'GSRCH_FLT')]/option[text()='not=']")).isDisplayed(); 

suo ritorno falso dal momento che non è sempre visualizzato nella casella.

Can u mi dirà l'alternativa per questo.

risposta

8

desiderato:

private boolean isElementPresent(WebDriver driver, By by){ 
    return driver.findElements(by).count != 0; 
} 

findElements() è migliore per questo che findElement() perché non attendere se l'elemento non è presente. Se stai utilizzando le attese implicite attivate, l'intervallo findElement() scadrà cercando l'elemento (questa è l'eccezione che stai intercettando) e richiederà un po 'di tempo.

+0

Perché l'uguaglianza del test di restituzione è uguale a zero se si verifica se un elemento è presente? –

+0

@MatthewLock DOH! Grazie, il confronto è stato invertito, ora è stato corretto. –

4

ho scoperto che WebDriver non ha una funzione chiamata isElementPresent(). Questa era una delle funzioni importanti utilizzate in Selenium-1.0. Per implementarlo in WebDriver è sufficiente scrivere un metodo come indicato di seguito. È quindi possibile utilizzare questa funzione con qualsiasi tipo di By (By.id, BY.name, ecc)

private boolean isElementPresent(WebDriver driver, By by){ 
    try{ 
    driver.findElement(by); 
    return true; 
    }catch(NoSuchElementException e){ 
    return false; 
    } 
} 

E qui è un esempio di come si dovrebbe chiamare questa funzione

if (isElementPresent(by.id("btnSubmit")) { 
    // preform some actions 
} 

Il la funzione precedente restituirà true nel caso in cui l'elemento venga trovato nella pagina, altrimenti restituirà false.

+1

@Arun il codice di cui sopra è più facile da leggere ed è riutilizzabile. L'unico suggerimento ulteriore è quello di migliorare il codice includendo il timeout. Poiché di solito il controllo è che l'elemento compaia è un intervallo di tempo. –

+0

-1 per 'findElement()' -with-timeout invece di 'findElements()' -with-count. –

0
internal static bool IsElementPresent(IWebDriver driver, By by, int timeoutSeconds=10) 
    { 

     for (int second = 0; second< timeoutSeconds ; second++) 
     { 
      try 
      { 
       driver.FindElement(by); 
      } 
      catch (NoSuchElementException e) 
      { 
       Thread.Sleep(1000); 
       continue; 
      } 

      return true; 
     } 

     return false; 

    } 
0

Uso isDisplayed() per verificare se un elemento è disponibile nella pagina.