2016-10-28 2 views
0

Nous avons du code HTML avec des éléments qui peuvent être étendus ou réduits (en fonction de ce qu'ils sont actuellement). Ils peuvent être étendus à un seul niveau. Il semble un peu comme ceRafraîchissement d'élément dans @FindBy avec Selenium et Java

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

Il y a beaucoup d'autres, et il est un peu plus compliqué que cela, mais vous obtenez l'image. En utilisant l'objet page J'ai fait une liste

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

Et puis une méthode pour les développer par exemple:

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

Dans le code actuel j'ai aussi essayé d'attendre jusqu'à ce que le titre a changé alors je sais qu'il a travaillé. Quoi qu'il en soit, le problème est qu'une fois que j'élargis un élément, tous les éléments en dessous deviennent apparemment obsolètes. Je sais que lorsque vous utilisez @FindBy, il se reconnecte à chaque fois. Mais je me demande quand l'élément est rafraîchi. Il semble que ce soit juste fait une fois au début de la boucle. Est-ce vrai? Quand la liste des éléments est-elle actualisée? Et y a-t-il une meilleure façon de faire cela? J'ai essayé de faire une nouvelle liste contenant la liste et de l'inverser qui a fonctionné mais pas vraiment. L'affaire est encore compliquée par le fait que ces lignes sont affichées dans son propre div scrollable où vous avez besoin de sacchar pour voir certains des éléments. Donc des pensées?

Répondre

0

Suggestion: C'est la différence entre foreach et for. Essayez d'utiliser "For loop" uniquement.

+0

Je pense que le problème réel est que ces éléments sont dans une fenêtre avec un défilement et quand j'en développe un, d'autres éléments sont cachés sous (ou au-dessus) ce qui est visible dans la fenêtre de défilement, ils ne sont plus trouvés . Y at-il un moyen d'accéder aux nœuds en dehors d'une fenêtre de défilement div? – Tony