Xpath改进

时间:2016-07-15 13:45:59

标签: xml selenium xpath

<document>
<html class=" js " lang="en" style="" xmlns="http://www.w3.org/1999/xhtml">
<head id="head">
<body class="modern operational">
<div class="row btm16">
<div class="col-xs-30">
<label>Adjust To </label>
</div>
<span id="pb33352:eastFieldForm:j_idt2056:adjInputTextPanel">
<input id="pb33352:eastFieldForm:j_idt2056:newValueNumber" class="form-control" type="text"  maxlength="11" name="pb33352:eastFieldForm:j_idt2056:newValueNumber"/>
<span>
<span id="pb33352:eastFieldForm:j_idt2056:adjustToUnit"/>
</span>
</span>
<div class="col-md-40"/>
<span id="pb33352:eastFieldForm:j_idt2056:errorMessages"/>
</div>
</body>
</html>
</document>

我上面这个简单的页面有一个标签和一个文本框。我想在文本框中输入文字。

对我有帮助的XPATH//*[contains(text(),normalize-space('Adjust To'))]//..//..//*[self::input]

通过上述解决方案,我不满意在中间使用多个//..。 有没有更好的方法来获得此XPATH

请注意我需要找到xpath找到文字&#34;调整到&#34;

3 个答案:

答案 0 :(得分:2)

我会使用following axis

//label[normalize-space(.) = 'Adjust To']/following::input

或者,我认为使用id的“adjInputTextPanel”部分也是一个很好的定位器:

//span[contains(@id, 'adjInputTextPanel')]/input

答案 1 :(得分:2)

您可以尝试使用preceding轴,如下所示: -

//input[preceding::label[normalize-space(.) = 'Adjust To']]

答案 2 :(得分:0)

感谢大家对上述解决方案的帮助。

我也在尝试从我的方式开始,并在下面找到一个有用的方法。

//label[contains(.,'Adjust To')]/following::input[1]