Java Selenium WebDriver getText

Java Selenium WebDriver getText,java,selenium-webdriver,Java,Selenium Webdriver,我有一个0 我尝试编写一个测试,使myDiv中包含0文本。使用WebDriver,它是: String text = webDriver.findElement(By.xpath("//div[@name='myDiv']")).getText(); 但结果是一个空字符串。我不应该使用getText()获取div的内容吗?我只需要为我的webDriver使用一个真正的浏览器即可: webDriver = new FirefoxDriver(); 然后它就起作用了 可能是J

我有一个
0

我尝试编写一个测试,使myDiv中包含0文本。使用WebDriver,它是:

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

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

我只需要为我的webDriver使用一个真正的浏览器即可:

webDriver = new FirefoxDriver();
然后它就起作用了


可能是JavaScript问题。

您还可以通过以下方式验证div中的文本:


听起来您正在使用HTMLUnitDriver。在这种情况下,您需要启用如下所示的JavaScript代码

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

查看文档。

在Selenium 2中,我使用了这个,它对我来说很好

driver.getPageSource().contains(text);

我也有同样的问题;一点挖掘让我想到了这一点:

当您尝试对CSS属性“display”设置为“none”的元素调用WebElement#getText()时,HTMLUnitDriver(显然是FirefoxDriver)将返回空字符串

以下是我的解决方案:

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);
}
public void assertContainsText(final By By,final String value){
browser.waitillelementpresent(by);
布尔结果=新建WebDriverWait(getWebDriver(),Browser.DEFAULT_WAIT_TIMEOUT_SECONDS)。直到(new ExpectedCondition(){
@凌驾
公共布尔应用(WebDriver arg0){
WebElement elem=arg0.findElement(by);
字符串文本=”;
if(elem.isDisplayed()){
text=elem.getText();
}否则{
//必须使用JavaScript,因为HtmlUnit将为隐藏元素的文本返回空字符串
text=(String)executeScript(“返回参数[0].innerHTML”,elem);
text=text.replace(“

”,“\n”);//替换 } 返回text.contains(值); } }); Assert.assertTrue(by.toString()+“包含值[“+值+”],结果); }
是的,这就像罪恶一样丑陋。并注意文本。replace(“

”)-这是因为在提取原始数据时HTML标记不会转义。如果您在元素上调用#getText(),WebDriver将很好地“取消”这一点

我现在已经向我们的IT人员发出请求,要求他们在我们的CI服务器上安装X-Windows,这样我们就可以运行FirefoxDriver了。除了HTMLUnitDriver,我们什么都没有遇到问题,而且它的启动速度非常慢。

试试这个

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);
您可以使用getText(),即使它没有任何内容。这不应该是问题所在

从您的回答来看,问题似乎是您没有实例化FirefoxDriver

Selenium WebDriver将只与可见元素交互,因此不可见元素的文本将始终作为空字符串返回。

您可以尝试使用jsoup库解析HTML

首先,只需将页面内容(driver.getPageSource())加载到jsoup文档对象,并使用该优秀库丰富的方法(作者对此表示敬意)

例如:

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

是的,您是对的,但它不起作用,我对tahte元素使用Qquery fadeIn(),但如果事件具有setJavascriptEnabled(true)和设置等待(xxxx),则它不起作用。。所以我更喜欢使用Real browser。虽然Chrome或Firefox驱动程序确实可以工作,但你知道为什么HtmlUnitDriver不能工作吗?相关:
String pageSource = driver.getPageSource();
Document doc = Jsoup.parse(pageSource);
Elements requestsListRecords = doc.getElementsByTag("table").get(2).getElementsByTag("tr");