通过带路径的xpath查找元素

时间:2017-03-30 01:00:06

标签: xpath

我正在测试steampowered.com,我需要在表单上找到元素,条件是它有文本“Games”的后代。 它是下面的元素(它位于带有“store_nav”类的div中),我正在使用这样的xpath来定位它。

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

问题是这个xpath指向不正确的元素(firepath甚至显示了几个元素)。为了比较,这个xpath正常工作

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

我对后代元素做错了什么?

1 个答案:

答案 0 :(得分:0)

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

这将匹配div class="store_nav_bg"div class="store_nav"个节点。

这个Xpath:

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

将匹配div class="store_nav"以及之后的所有div/span/a元素,因为div class="store_nav"具有a类型的后代。 &#39;后代&#39;匹配所有后代,不管它们的层次结构是多远,而不仅仅是你之后的组合。如果您只想要div/span/a个元素,则必须指定它。