1

Я использую Selenium2 с Java API Version 2.53.1 и chrome driver Version 2.24, чтобы распечатать несколько значений.Selenium Java API, почему driver.findElement (By.tagName ("title")). GetText() всегда возвращает пусто

Но для тега: <title>test</title> функция driver.findElement(By.tagName("title")).getText(); всегда возвращает пустой.

Мой вопрос: как вернуть функции API снова?

BTW: 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

На самом деле 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

Спасибо большое! bye ... – Leder

+0

Кажется, было бы намного проще использовать 'driver.getTitle();'. – JeffC

+0

@JeffC вы правы, OP уже использует его, он отлично работает, но ему любопытно узнать, почему 'driver.findElement (By.tagName (« title »)). GetText();' возвращает пусто ??? Благодаря этому –