Selenium Java API 为什么 driver.findElement(By.tagName("title")).getText() 总是 returns 空
Selenium Java API why driver.findElement(By.tagName("title")).getText() always returns empty
我正在使用 Selenium2
与 Java API Version 2.53.1
和 chrome driver Version 2.24
打印出几个值。
但对于标签:<title>test</title>
功能
driver.findElement(By.tagName("title")).getText();
总是 returns 空。
我的问题是,如何让 API 功能再次运行?
顺便说一句:Selenium3
是测试版,在 chromedriver
和 geckodriver
中也已损坏!
另一方面函数:-
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")
我正在使用 Selenium2
与 Java API Version 2.53.1
和 chrome driver Version 2.24
打印出几个值。
但对于标签:<title>test</title>
功能
driver.findElement(By.tagName("title")).getText();
总是 returns 空。
我的问题是,如何让 API 功能再次运行?
顺便说一句:Selenium3
是测试版,在 chromedriver
和 geckodriver
中也已损坏!
另一方面函数:-
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")