2011-10-20 2 views
6

Sto cercando un'implementazione funzionante di questo. Il migliore che è venuta in mente è:Driver Web Selenium 2.0: implementazione di isTextPresent

public boolean isTextPresent(String string) { 

     for (WebElement e : drv.findElements(By.cssSelector("*"))) { 

      if (e.isDisplayed() && e.getText().contains(string)) { 
       return true; 
      } 

     } 
     return false; 
    } 
+1

Non si può essere più specifico quando si cerca il testo? Questo sarà lento poiché stai potenzialmente camminando sull'intero DOM. IE sarà il peggiore. Sarebbe molto meglio se tu potessi almeno restringere la ricerca in qualche ... – Mikezx6r

+1

Naturalmente hai ragione. Sto correndo lì usando Jenkins, quindi il tempo non è un problema. –

risposta

5

Un modo più veloce per farlo sarebbe qualcosa di simile a questo:

public boolean isTextPresent(string str) 
{ 
    IWebElement bodyElement = driver.FindElement(By.TagName("body")); 
    return bodyElement.Text.contains(str); 
} 

E 'in C#, ma è lo stesso concetto. Ottenere il testo del tag body restituisce automaticamente il testo di tutti gli elementi nidificati. L'unica cosa di cui non sono sicuro è se gli elementi nascosti sono inclusi o meno.

+0

Sembra buono. Questo catturerebbe anche il testo invisibile? Per esempio. JavaScript? –

+0

No, questo restituirà il testo visibile sullo schermo, cioè il testo interno degli elementi. Ad esempio:

Questo testo

. – prestomanifesto

+0

Eccellente - grazie! –

0

Il seguente codice utilizzando Java in WebDriver dovrebbe funzionare bene come isTextPresent:

assertTrue(driver.getPageSource().contains("Welcome Ripon")); 
assertTrue(driver.findElement(By.id("widget_205_after_login")).getText().matches("^[\\s\\S]*Welcome ripon[\\s\\S]*$"));