需要xpath高级表达式

时间:2016-01-05 04:37:16

标签: html xpath

我有以下代码,我试图将单选按钮隔离成两个xpath表达式,这样我就可以在nightwatch中点击它们进行QA。

请记住此页面特别有许多其他单选按钮,因此表达式需要特定于此。此外,反应也是动态的,因此无法改变。非常感谢

<div class="form-group" data-reactid=".0.1.0.1.0.0">
<label class="control-label" data-reactid=".0.1.0.1.0.0.$label">
<span data-reactid=".0.1.0.1.0.0.$label.1" style="">Able to change e-mail</span>
</label>
<div class="wrapper" data-reactid=".0.1.0.1.0.0.$wrapper" style="">
    <input type="radio" name="allow_change_email" checked="" data-reactid=".0.1.0.1.0.0.$wrapper.0:0" style="">
    <span data-reactid=".0.1.0.1.0.0.$wrapper.0:1" style=""> Allow</span>
    <br data-reactid=".0.1.0.1.0.0.$wrapper.0:2">
    <input type="radio" name="allow_change_email" data-reactid=".0.1.0.1.0.0.$wrapper.0:3" style="">
    <span data-reactid=".0.1.0.1.0.0.$wrapper.0:4" style=""> Disable</span>
</div>

4 个答案:

答案 0 :(得分:1)

这是一个可能的XPath:(为便于阅读而格式化)

//label[span='Able to change e-mail']
 /following-sibling::div[1]
 /input[@type='radio' and following-sibling::span[1][normalize-space()='Allow']]

解释:

  • //label[span='Able to change e-mail'] :查找label个元素,其中span个内容等于"Able to change e-mail"
  • /following-sibling::div[1] :从此类label中找到最近的兄弟div元素
  • /input[@type='radio' and following-sibling::span[1][normalize-space()='Allow']] :来自此div,返回input元素type属性等于"radio"和最近的兄弟span {1}}等于"Allow"

<强> xpathtester demo

输出

<input checked="" data-reactid=".0.1.0.1.0.0.$wrapper.0:0" name="allow_change_email" style="" type="radio"/>

答案 1 :(得分:0)

首先,您没有有效的XML。

如果你设法纠正它,你可以使用它:

//input[@type='radio']

&#39;更正&#39; XML:

<?xml version="1.0" encoding="utf-16"?>
<div class="form-group" data-reactid=".0.1.0.1.0.0">
 <label class="control-label" data-reactid=".0.1.0.1.0.0.$label">
   <span data-reactid=".0.1.0.1.0.0.$label.1" style="">Able to change e-mail</span>
 </label>
 <div class="wrapper" data-reactid=".0.1.0.1.0.0.$wrapper" style="">
   <input type="radio" name="allow_change_email" checked="" data-reactid=".0.1.0.1.0.0.$wrapper.0:0" style="" />
   <span data-reactid=".0.1.0.1.0.0.$wrapper.0:1" style=""> Allow</span>
   <br data-reactid=".0.1.0.1.0.0.$wrapper.0:2" />
   <input type="radio" name="allow_change_email" data-reactid=".0.1.0.1.0.0.$wrapper.0:3" style="" />
   <span data-reactid=".0.1.0.1.0.0.$wrapper.0:4" style=""> Disable</span>
 </div>
</div>

答案 2 :(得分:0)

允许: -

//div[@class='wrapper']/input[1][@type='radio']

禁用: -

//div[@class='wrapper']/input[2][@type='radio']

答案 3 :(得分:0)

我找到了可能处于相同情况的其他任何人的解决方案。

//*[text()="Able to change email"]/following::span[text()= " Allow"][1]/preceding-sibling::input[1]