2016-03-19 2 views
0

Ich habe eine Webseite mit einem linken Menü. Es besteht aus vielen div Tags. Ich habe bemerkt, wenn mein Selenium Python-Skript ausgeführt wird, klickt es nicht auf den Text, den ich aus dem linken Menü klicken möchte. Es klickt etwas anderes. Mein Xpath ist nicht korrekt.Selenium Python Xpath Wie wähle ich den richtigen Span Text von vielen geschachtelten div Tags

Ich möchte den Text lokalisieren „Statistik“ (es ist in einem div-Tag \ Spanne), die die Eltern div Text „Analyse“ hat

Es ist nicht die korrekten Text „Statistiken klicken "weil es vielleicht irgendwo in der HTML-Quelle ein anderes" Statistics "gibt. Wenn ich starte von dem Div-Tag, das den Text "Analyse" hat und dann den Text "Statistiken" dann werde ich das richtige Element bekommen.

Mein Xpath ist:

.//div//span[@title="Analysis"]/following::div[5]//span[text()="Statistics"] 

Die HTML ist:

<div> 
    <span class="" title="Analysis" 
      style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;empty-cells:show;display:block;">Analysis</span> 
</div> 
</div> 
</div> 
</div> 
</div> 
<div style="overflow: hidden;"> 
    <div> 
     <div> 
      <div aria-selected="false" role="treeitem" aria-setsize="3" aria-posinset="1" aria-expanded="false" 
       aria-level="2"> 
       <div class="GJPPK2LBIF" style="padding-left: 16px;"> 
        <div class="GJPPK2LBIF GJPPK2LBKF" style="padding-left: 16px;position:relative;" onclick=""> 
         <div class="GJPPK2LBJF" style="left: 0px;width: 15px;height: 15px;position:absolute;"> 
          <img border="0" 
           style="width:15px;height:15px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA7/HbnjJn53wAAAABJRU5ErkJggg==) no-repeat 0px 0px;" 
           src="http://test1:8080/clearcore/ClearCore/clear.cache.gif" 
           onload="this.__gwtLastUnhandledEvent=" load";"/> 
         </div> 
         <div class="GJPPK2LBLF"> 
          <div style="padding-left: 22px;position:relative;zoom:1;"> 
           <div style="left:0px;margin-top:-8px;position:absolute;top:50%;line-height:0px;"> 
            <img border="0" 
             style="width:16px;height:16px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaekJggg==) no-repeat 0px 0px;" 
             src="http://test1:8080/clearcore/ClearCore/clear.cache.gif" 
             onload="this.__gwtLastUnhandledEvent=" load";"/> 
           </div> 
           <div> 
            <span class="" title="Statistics" 
              style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;empty-cells:show;display:block;">Statistics</span> 
           </div> 
          </div> 
         </div> 
        </div> 
       </div> 
      </div> 

Danke, Riaz

+1

Ich bin verwirrt, funktioniert es oder nicht? – Guy

+0

Dies beantwortet deine Frage nicht, aber ich würde deinen xpath - es ist ziemlich starr und deshalb wird es die Wahrscheinlichkeit dieses Tests im Laufe der Zeit versagen, nur weil du mit einigen divs herumgespielt hast. –

+1

Betrachte xpath Helfer für Chrome - https://chrome.google.com/webstore/detail/xpath-helper/hgimnogjllphhhkhlmebbmlgjoejdpjl?hl=de - mit dieser können Sie sehen, was übereinstimmt und kopieren und fügen Sie den Xpath für vorhandene Elemente –

Antwort

1

Wenn Sie FireFox mit FirePath haben, können Sie den XPath testen und sehen, wie viele und was dir passt. Zum Beispiel:

//span[text()="Statistics"] 

Dies kann zu 1 übereinstimmenden Knoten aber auch in mehr führen. Nehmen wir an, es gibt zwei Übereinstimmungen und das gewünschte ist das zweite. Dann würden Sie wählen:

//span[text()="Statistics"][2] 
Verwandte Themen