Selenium Java API 为什么 driver.findElement(By.tagName("title")).getText() 总是 returns 空

Selenium Java API why driver.findElement(By.tagName("title")).getText() always returns empty

我正在使用 Selenium2Java API Version 2.53.1chrome driver Version 2.24 打印出几个值。

但对于标签:<title>test</title> 功能 driver.findElement(By.tagName("title")).getText(); 总是 returns 空。

我的问题是,如何让 API 功能再次运行?

顺便说一句:Selenium3 是测试版,在 chromedrivergeckodriver 中也已损坏!

另一方面函数:-

driver.findElement(By.tagName("title")).getTagName();driver.getTitle(); returns 正确的价值观。

我尝试使用 JavaScript 代码解决此问题但无济于事:

JavascriptExecutor js;
    if (driver instanceof JavascriptExecutor) {
        js = (JavascriptExecutor)driver;

        a_tag_name_title = (ArrayList<RemoteWebElement>) js.executeScript("return document.getElementsByTagName('title');");


        System.out.println("Is empty? " + a_tag_name_title.isEmpty());
        for (RemoteWebElement object: a_tag_name_title){
            System.out.println("Title tag: " + object.getText());
        }
        found = false;

        for (RemoteWebElement object: a_tag_name_title){

            found = object.getText().contains("title");
        }
        assertTrue("Title tag not found", found); //sanitiy check if "getElementsByTagName" is working, too

    }

实际上 WebElement#getText() returns 元素在页面上可见 innerText,而 <title> 标签内的 innerText 在页面上不可见为什么你得到空文本。

要在使用 WebElement#getText() 之前确定该元素是否可见,请使用 :-

driver.findElement(By.tagName("title")).isDisplayed();

如果你使用上面的语句,你可以看到它总是 returns false.

要解决此问题,您可以使用 WebElement#getAttribute("textContent")WebElement#getAttribute("innerText"),如下所示:-

driver.findElement(By.tagName("title")).getAttribute("textContent")

driver.findElement(By.tagName("title")).getAttribute("innerText")