Tony
Tony

Reputation: 1165

Element refreshing in @FindBy with Selenium and java

We have HTML code that has elements which can be expanded or collapsed (depending on what they currently are). They can be expanded only one level. It looks sort of like this

<a href = "#" title = "Expand" id = ...>Row 1 </a>
<a href = "#" title = "Expand" id = ...>Row 2 </a>
<a href = "#" title = "Collapse" id = ...>Row 3 </a>
<a href = "#" id = ...>Subrow 3.1 </a>
<a href = "#" id = ...>Subrow 3.2 </a>
<a href = "#" title = "Expand" id = ...>Row 4 </a>
<a href = "#" title = "Collaps" id = ...>Row 5 </a>
<a href = "#" id = ...>Subrow 5.1 </a>
<a href = "#" id = ...>Subrow 5.2 </a>

There are many more, and it is a bit more complicated than this but you get the picture. Using page object I made a list

@FindBy(xpath = "//a[contains(@title, 'Expand') or contains(@title, 'Collapse')]")
private List<WebElement> expandCollapseElements

And then a method to expand them for instance:

public void expand() {
   for (WebElement ele : expndCollapseElements) {
       if (ele.getAttribute("title").equals("Expand")) {
            ele.click();
       }
   }
}

In the actual code I also tried waiting until the title changed so I know it worked. Anyway, the problem is that once I expand an element, all the elements underneath apparently become stale. I know when you use @FindBy it refinds the element each time. But I am wondering when the element is refreshed. It seems like it is just done once at the beginning of the loop. Is that true? When is the element list refreshed? And is there a better way to do this? I tried making a new list containing the list and reversing it which kind of worked but not really. The matter is further complicated by the fact that these rows are displayed in its own scrollable div where you need to sacroll to see some of the elements. So any thoughts?

Upvotes: 0

Views: 872

Answers (1)

Viet Pham
Viet Pham

Reputation: 214

Suggestion: That's the difference between foreach and for. Try to use "For loop" only.

Upvotes: 0

Related Questions