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

时间:2016-10-17 13:49:18

标签: java selenium selenium-webdriver title selenium-chromedriver

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

但对于代码:<title>test</title> 功能 driver.findElement(By.tagName("title")).getText();始终返回空。

我的问题是,如何让API函数再次运行?

顺便说一句:Selenium3已成为测试版,但chromedrivergeckodriver也已被破坏!

另一方面功能: -

driver.findElement(By.tagName("title")).getTagName();driver.getTitle(); 返回正确的值。

我尝试使用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

    }

1 个答案:

答案 0 :(得分:0)

实际上WebElement#getText()会返回页面上元素的可见innerText,而innerText标记内的<title>在页面上不可见,这就是为什么你& #39; r得到空文本。

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

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

如果您使用上述声明,则可以看到它始终返回false

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

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

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