2017-03-30 4 views
-1

Ich teste steampowered.com und ich muss Element auf dem Formular mit der Bedingung finden, dass es Nachkommen mit Text "Games" hat. Es ist das Element darunter (es findet im div mit der Klasse "store_nav") und ich benutze solche xpath, um es zu lokalisieren.Finden von Element über Xpath mit Achsen

//div[contains(@class,'store_nav')]/div[descendant::a[contains(text(),'Games')]]" 

<div class="store_nav_bg"> 
<div class="store_nav"> 
    <div id="foryou_tab" class="tab flyout_tab" data-flyout="foryou_flyout" data-flyout-align="left" data-flyout-valign="bottom" onmouseover="EnsureStoreMenuTagsLoaded('#foryou_yourtags');"> 
    <div id="foryou_flyout" class="popup_block_new flyout_tab_flyout responsive_slidedown" style="visibility: visible; top: 42px; left: 0px; display: none; opacity: 0.245479;"> 
    <div id="genre_tab" class="tab flyout_tab" data-flyout="genre_flyout" data-flyout-align="left" data-flyout-valign="bottom"> 
    <span class="pulldown"> 
     <a class="pulldown_desktop" href="http://store.steampowered.com/games/?snr=1_4_4__12">Games</a> 
    </span> 
    <div id="genre_flyout" class="popup_block_new flyout_tab_flyout responsive_slidedown" style="visibility: visible; top: 42px; left: 131.667px; display: none; opacity: 1;"> 
    <div id="software_tab" class="tab flyout_tab " data-flyout="software_flyout" data-flyout-align="left" data-flyout-valign="bottom"> 
    <div id="software_flyout" class="popup_block_new flyout_tab_flyout responsive_slidedown" style="display: none;"> 
    <div id="hardware_tab" class="tab flyout_tab " data-flyout="hardware_flyout" data-flyout-align="left" data-flyout-valign="bottom"> 
    <div id="hardware_flyout" class="popup_block_new flyout_tab_flyout responsive_slidedown" style="display: none;"> 
    <div id="videos_tab" class="tab flyout_tab " data-flyout="videos_flyout" data-flyout-align="left" data-flyout-valign="bottom"> 
    <div id="videos_flyout" class="popup_block_new flyout_tab_flyout responsive_slidedown" style="display: none;"> 
    <a class="tab " href="http://store.steampowered.com/news/?snr=1_4_4__12"> 
    <div class="search_area"> 
</div> 
</div> 

Das Problem ist, dass dieser XPath auf falsches Element zeigt (Feuerpfad zeigt sogar mehrere Elemente). Zum Vergleich: Dieser XPath funktioniert einwandfrei.

//div[contains(@class,'store_nav')]/div[span/a[contains(text(),'Games')]] 

Was mache ich falsch mit dem Nachkommenelement?

+0

Ihr XPath verweist auf einen 'store_nav'-Klassenwert, aber Ihr Markup hat keinen solchen '@ class'-Wert. Veröffentlichen Sie eine [mcve] oder Ihre Frage wird als Off-Topic geschlossen. – kjhughes

Antwort

0
//div[contains(@class,'store_nav')] 

die div class="store_nav_bg" und die div class="store_nav" Knoten übereinstimmen Dies wird.

Diese Xpath:

//div[contains(@class,'store_nav')]/div[descendant::a[contains(text(),'Games')]] 

wird div class="store_nav" entsprechen, sowie alle div/span/a Elemente Sie nach, weil div class="store_nav" ein Nachkomme des Typs a hat. "Nachkommen" stimmt mit allen Nachkommen überein, egal wie weit sie in der Hierarchie liegen, nicht nur die Kombination, nach der Sie suchen. Wenn Sie nur die div/span/a Elemente möchten, müssen Sie dies angeben.

Verwandte Themen