2016-11-17 57 views
0

我需要抓取第三个span元素,位于A元素内部,该元素也位于具有ID的LI元素内。我想用ID来先找到LI元素,然后在其中找到第三个span元素。 HTML例子:使用XPath或CssSelector通过ID找到的元素中的标记名称查找第n个元素

<li id='MyID'> 
<a href="MyHRef"> 
<span>first span</span> 
<span>second span</span> 
<span>third span</span> 
</a> 
</li> 

我尝试以下,但我不认为我有它正确地写入:

public readonly By Menu_ProgramMatchingNumber = By.XPath("li[@id='MyID']/following-sibling::span[3]"); 

回答

3

根据XPath语法:

http://www.w3schools.com/xml/xpath_syntax.asp

您可能希望使用://li[@id='MyID']/a/span[3]

或更具体: //li[@id='MyID']/a[@href='MyHRef']/span[3]

+0

我编辑了原来的职位为包括A标签。如果您编辑您的答案以包含此A标记,我会将其标记为答案。 By.XPath(“// li [@ id ='ap-menu-program-matching']/a/span [3]”) –

+0

@MikeJohnston,刚刚更新了答案以反映您的最新变更。 –

1

使用CSS:

By.CssSelector("li#MyID a > span:nth-of-type(3)") 
+0

你可能应该使用''li#MyID> a> span:nth-​​of-type(3)“'作为额外的细节,因为你可以。 – JeffC

+0

这个问题,在我多年的经验中,'li'比'a'更有可能被改变。通过消除li到'a'的'>',你可以节省一些心痛,如果他们加了'

  • ...
  • '但是,它不会改变。 :)谢谢@JeffC – sircapsalot

    +0

    虽然,现在我想到了 - 两者都有可能改变。我通常不会尽可能地使用直接的孩子,因为我会脆弱:) – sircapsalot

    相关问题