Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

getText() method of selenium chrome driver sometimes returns an empty string

I have a curious case where the selenium chrome driver getText() method (java) returns an empty string for some elements, even though it returns a non-empty string for other elements with the same xpath. Here is a bit of the page.

<div __gwt_cell="cell-gwt-uid-223" style="outline-style:none;"> <div>Text_1</div> <div>Text_2</div> <div>Text_3</div> <div>Text_4</div> <div>Text_5</div> <div>Text_6</div> </div> 

for each of the inner tags, I can get valid return values for getTagName(), getLocation(), isEnabled(), and isDisplayed(). However, getText() returns an empty string for some of the divs.

Further, I notice that if I use the mac chrome driver, it is consistently the ‘Text_5’ for which getText() returns an empty string. If I use the windows chrome driver, it is , it is consistently the ‘Text_2’ for which getText() returns an empty string. If I use the firefox driver, getText() returns the expected text from all the divs.

Has anyone else had this difficulty?

In my code, I use something like this…

ArrayList<WebElement> list = (ArrayList<WebElement>) driver.findElements(By.xpath(“my xPath here”)); for (WebElement e: list) System.out.println(e.getText()); 

As suggested below, here is the actual xPath I am using. The page snippet above deals with the last two divs.

//*[@class='gwt-DialogBox']//tr[contains(@class,'data-grid-table-row')]//td[contains(@class,'lms-assignment-selection-wizard-cell')]/div/div 
like image 710
JackhammersForWeeks Avatar asked Jan 02 '14 17:01

JackhammersForWeeks


People also ask

What does getText return in Selenium?

The getText() method returns the visible inner text of a web element.

What are the alternative of getText in Selenium?

getAttribute: This is used to get the text inside the control.

In which interface getText () and getAttribute () is available?

getText() is a method which gets us the visible (i.e. not hidden by CSS) innerText of this element, including sub-elements, without any leading or trailing white space. The getAttribute() method is declared in the WebElement interface, and it returns the value of the web element's attribute as a string.

What is return type of driver get string url method in Selenium?

It accepts String as parameter and returns void. The respective command to load a new web page can be written as: driver. get(URL);


1 Answers

Update: The textContent attribute is a better option and supported across the majority of browsers. The differences are explained in detail at this blog post: innerText vs. textContent

As an alternative, the innerText attribute will return the text content of an element which exists in the DOM.

element.getAttribute("innerText") 

The isDisplayed() method can sometimes trip over when the element is not really hidden but outside the viewport; getText() returns an empty string for such an element.

You can also bring the element into the viewport by scrolling to it using javascript, as follows:

((JavaScriptExecutor)driver).executeScript("arguments[0].scrollIntoView(true);", element); 

and then getText() should return the correct value.

Details on the isDisplayed() method can be found in this SO question:

How does Selenium WebDriver's isDisplayed() method work

like image 177
Faiz Avatar answered Sep 27 '22 16:09

Faiz