2017-04-26 2 views
-1

J'ai une table générée dynamiquement avec thead et tbody. Voici l'exemple:Trouver un élément par le texte, obtenir xpath et mettre dans une liste que chaque td est un élément unique - selenium webdriver junit

<tbody id="tableId" class="someclass1"> 
<tr id="rowId1" class="somesubclass"> 
<td id="item1" class="othersubclass"> 
    <span class="attr">john Doe</span> 
<td id="item2"> 
    <span class="attr">55</span> 
<td id="item3"> 
    <span class="attr">5 street</span> 
<td id="item2"> 
    <span class="attr">cat</span> 
<tr id="rowId2" class="somesubclass2"> 
<td id="item1" class="othersubclass2"> 
    <span class="attr">joe smith</span> 
<td id="item2"> 
    <span class="attr">60</span> 
<td id="item3"> 
    <span class="attr">2 street</span> 
<td id="item2"> 
    <span class="attr">dog</span> 

| joe doe | 55 | 5 rue | cat | | joe foo | 60 | 1 rue | chien |

Je voudrais trouver une ligne par texte où le nom est joe doe et le mettre dans une liste. Localisateur travaille avec ceci, mais ce n'est pas une liste.

@FindBy(xpath = "//tbody[contains(@id,'tableId')]/tr[td//text()[contains(.,'joe doe')]]") 
private List<WebElement> list; 

Je suis la liste, mais je ne peux pas itérer sur parce que tout a mis dans la première position comme ceci:

premier élément de liste

est: Untel 55 5 chat rue c'est donc le [ 0] élément

Comment puis-je localiser cette ligne sous forme de liste où chaque td est un élément unique de la liste.

(itérer, la conversion en chaîne, etc. ne sont pas un problème, juste le localisateur.)

Merci!

+0

Quelle langue utilisez-vous? Java/PHP/Python? – SomeDude

+0

Désolé, je ne l'ai pas mentionné. Java + sélénium webdriver. – brobee

Répondre

0

Je ne comprends pas ce qui est pour le -1. Quoi qu'il en soit, voici la réponse pour les autres, espérons que cela aide!

Il ya un bon plugin pour google kinda firepath: SelAssist, je l'utilise pour tester mes localisateurs xpath.

Le problème était que td manquait. Donc, le localisateur approprié est

//tbody[contains(@id,'tableId')]/tr[td//text()[contains(.,'joe doe')]]/td 

et il me donne la liste des éléments, pas seulement un.

À la votre!