我正在使用Selenium2
与Java API Version 2.53.1
和chrome driver Version 2.24
打印出多个值。
但对于代码:<title>test</title>
功能
driver.findElement(By.tagName("title")).getText();
始终返回空。
我的问题是,如何让API函数再次运行?
顺便说一句:Selenium3
已成为测试版,但chromedriver
和geckodriver
也已被破坏!
另一方面功能: -
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
}
答案 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")