2011-10-20 21 views
6

我正在寻找这个的工作实现。我想出的最好的是:Selenium 2.0 Web驱动程序: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

寻找文本时,您不能更具体?随着您可能走遍整个DOM,这会变得很慢。 IE将是最糟糕的。如果你至少可以将搜索范围缩小一些... – Mikezx6r

+1

当然你是对的。我在那里使用詹金斯,真的时间不是一个问题。 –

回答

5

一个更快的方式做到这一点会是这样的:

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

这是在C#中,但它是同一个概念。获取body标签的文本会自动返回所有嵌套元素的文本。我不确定的唯一情况是隐藏元素是否包含在内。

+0

看起来不错。这会捕获隐形文字吗?例如。 JavaScript的? –

+0

不,这将返回屏幕上可见的文本,即元素的内部文本。例如:

此文本

。 – prestomanifesto

+0

优秀 - 谢谢! –

0

在webdriver的使用Java下面的代码应该工作正常作为isTextPresent:

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