2017-02-02 41 views
2

当页面调整大小时,我有一个链接隐藏了元素,所以即时通过前一个元素尝试获取该元素。使用Xpath获取前面的兄弟姐妹

<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"> 
     <i class="icon icon-doc-new"></i> 
     <span class="hidden-sm dropdown-label">Create</span> 
     <span class="caret hidden-sm"></span> 
    </a> 

获得 “正常” 的元素我使用XPath:

.//*[@id='main-menu']/li/a/span[contains(text(), 'Create')] 

的话,我想获得元素<i class="icon icon-doc-new"></i> 像这样

.//*[@id='main-menu']/li/a/span[contains(text(), 'Create')]/precending-sibling::i[0] //(also tried different indexes] 

试过一对夫妇其他方法,但没有去。

任何提示?

回答

1

试试用下面XPath

.//*[@id='main-menu']/li/a[span[text()="Create"]]/i 
+0

这工作马上。你介意多解释一下为什么? – Dymond

+1

其实,我刚刚注意到你的'XPath'表达式中有一个输入错误:'前同胞'应该是'前同胞'。所以你的'XPath'也应该是正确的。我的意思是用'[1]'索引,而不是'[0]' – Andersson

1

所以,如果我是正确的,并且不在兄弟姐妹之前,你实际上需要父元素。

尝试用.//*[@id='main-menu']/li/a/span[contains(text(), 'Create')]/parent::a

如果你想前置兄弟然后用.//*[@id='main-menu']/li/a/span[contains(text(), 'Create')]/precending-sibling::i

+0

谢谢!这工作。当然现在当我看到它的父::一个。 谢谢 – Dymond

1

尝试以下任一提到xpath

//span[@class='caret hidden-sm']/..//preceding-sibling::span[text()= 'Create'] 

xpath的说明: -使用class属性的<span>标记,并使用preceding-sibling keyword与另一个<span>标记一起向前移动text方法。

OR

//span[@class='caret hidden-sm']/..//preceding-sibling::span[@class='hidden-sm dropdown-label'] 

的XPath的说明: -使用class<span>标签的属性,并使用preceding-sibling keywordclass属性沿另一<span>标签前进。