2011-11-04 38 views
3

我有一个<div name="myDiv">0</div>Selenium WebDriver getText

我试着写一个测试myDiv有文本。使用WebDriver它是:

String text = webDriver.findElement(By.xpath("//div[@name='myDiv']")).getText(); 

但在结果中我有一个空字符串。我不应该使用getText()来获取div的内容吗?

回答

1

我找到了答案,我只需要使用真正的浏览器为我webdriver的

webDriver = new FirefoxDriver(); 

然后它工作。

也许这是JavaScript问题。

+0

虽然这是事实,一个Chrome或Firefox的驱动程序将工作,你知道为什么HtmlUnitDriver不? – Khanetor

0

您还可以通过验证事业部文: $ browser.is_element_present( “// DIV [@名称= 'myDiv']/[文本()= '0'。”)

1

声音就像你正在使用HTMLUnitDriver,在这种情况下,你将需要启用像下面的Java脚本的,

HtmlUnitDriver driver = new HtmlUnitDriver(); 
driver.setJavascriptEnabled(true); 

退房here

+0

是的你是对的,但它不工作,我使用Qquery fadeIn()为tahte元素 - 但事件与setJavascriptEnabled(真),并设置一个等待(xxxx)它不起作用..所以我更喜欢使用真正的浏览器,而不是。 – ses

1

硒2,我用这个文件,它精美的作品对我来说。

driver.getPageSource().contains(text); 
2

我有同样的问题;小挖把我带到这个:

https://groups.google.com/forum/#!msg/webdriver/fRb_1QOr3wg/wzUsW3Ll6bgJ

HTMLUnitDriver(显然FirefoxDriver)当您尝试在它的CSS属性“显示”设置为“无元素调用WebElement#的getText()将返回空字符串”。

这里是我的解决方案:

public void assertContainsText(final By by, final String value) { 
    browser.waitTillElementPresent(by); 
     Boolean result = new WebDriverWait(getWebDriver(),Browser.DEFAULT_WAIT_TIMEOUT_SECONDS).until(new ExpectedCondition<Boolean>() { 
      @Override 
      public Boolean apply(WebDriver arg0) { 
       WebElement elem = arg0.findElement(by); 
       String text = ""; 
       if (elem.isDisplayed()) { 
        text = elem.getText(); 
       } else { 
        //have to use JavaScript because HtmlUnit will return empty string for a hidden element's text 
        text = (String) executeScript("return arguments[0].innerHTML", elem); 
        text = text.replace("<BR></BR>", "\n"); //scary 
       } 
       return text.contains(value); 
      } 
     }); 
     Assert.assertTrue(by.toString() + " contains value ["+value+"]", result); 
} 

是的,这是其丑无比。并注意text.replace(“<BR> </BR >”) - 这是因为当您拉出原始数据时HTML标记不会被转义。如果您在元素上调用#getText(),WebDriver将会很好地'unescape'。

我已经向我们的IT人员提出了在我们的CI服务器上安装X-Windows的请求,以便我们可以运行FirefoxDriver。我们从HTMLUnitDriver中得到了一些麻烦,而且启动起来非常慢。

0

试试这个

WebDriver driver = new YourBrowserdirver(); //FirefoxDriver or ChromeDriver etc.. 
String Text = driver.findElement(By.id("myDiv")).getText(); 
System.out.println("The text present in myDiv = "+Text); 
1

您可以使用gettext(),即使它没有内容。这不应该是问题。 从你的答案看来,问题似乎是你没有实例化FirefoxDriver。 Selenium WebDriver只会与可见元素交互,因此不可见元素的文本将始终作为空字符串返回。

1

你可以尝试使用jsoup库来解析html。

首先,将页面内容(driver.getPageSource())加载到jsoup文档对象中,并使用该优秀库的方法的丰富性(作者的荣誉)。

例子:

String pageSource = driver.getPageSource(); 
Document doc = Jsoup.parse(pageSource); 
Elements requestsListRecords = doc.getElementsByTag("table").get(2).getElementsByTag("tr");