我正在测试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')]]
我对后代元素做错了什么?
答案 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
个元素,则必须指定它。