#java #selenium #selenium-webdriver #title #selenium-chromedriver
#java #селен #selenium-webdriver #Название #selenium-chromedriver
Вопрос:
Я использую Selenium2
with 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
}
Ответ №1:
Фактически WebElement#getText()
возвращает видимый innerText
элемент на странице, в то время innerText
как внутренний <title>
тег не отображается на странице, поэтому вы получаете пустой текст.
Чтобы определить перед использованием 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")
Комментарии:
1. Кажется, что это было бы намного проще в использовании
driver.getTitle();
.2. @JeffC вы правы, OP уже использует его, и он работает нормально, но ему любопытно узнать, почему
driver.findElement(By.tagName("title")).getText();
возвращает пустой?? Спасибо, чтобы указать на это