当标签包含多个文本时,无法按文本选择标签

时间:2014-03-04 17:01:09

标签: selenium xpath

我正在为此疯狂地开车。

我在表单中有三个表单字段:

  1. 客户:必填的下拉字段
  2. 重量:必填文字字段
  3. 状态:可选文本字段
  4. 每个元素都有该标签。必填字段的标签包含带星号的范围。

    我在Chrome中使用Xpather。当我搜索这个时,我得到2个结果,当我得到3:

    //*[contains(text(),'t')]
    

    这对我来说毫无意义。

    正在运作的客户:

    <label for='customer-field'>
      <span class='required-marker'>*</span>
      Customer
      <input id='customer-field' type='text' />
    </label>
    

    重量,工作:

    <label class='control-label'>
      <span id='ctl01_requiredMarker' class='required-marker'>*</span>
      Weight
    </label>
    

    状态,正在运作:

    <label class='control-label'>
      Status
    </label>
    

    对我有用的唯一解决方法是从Weight标签容器中删除所需的标记。但是,这并不能解释“客户”是如何匹配的。

    值得注意的是:我正在尝试自动测试此页面,因此我无法真正删除该span标记。

    发生了什么事?和/或我该怎么做?

4 个答案:

答案 0 :(得分:6)

尝试将XPath更改为以下内容:

//*[text()[contains(.,'t')]]

此修复程序的source将其分解得比我完成的要好得多,所以请参阅详细解释!我已经使用Firefox的XPath Checker扩展程序自己测试了它,它匹配你的三个项目。

答案 1 :(得分:1)

尝试使用以下方法

driver.findElement(By.xpath(&#34; //跨度[@class =&#39;需要标记物&#39;] /..&# 34;))。。的getText()包含(& #34;重量&#34)

请让我知道上面的方法是否有效。

答案 2 :(得分:0)

我认为你的HTML是问题所在。

这可能是你的html应该是这样的:

<span class='required-marker'>*
    <label for='customer-field'>Customer</label>
    <input id='customer-field' type='text' />
</span>
<span id='ctl01_requiredMarker' class='required-marker'>*
    <label class='control-label'>Weight</label>
</span>
<label class='control-label'>Status</label>

答案 3 :(得分:0)

您使用的是Selenium还是WebDriverWebDriver作为回复返回什么?还要确保添加“。”在xpath之前,如.//*[contains(text(),'t')]

这是什么印刷品?

List<WebElement> elements = driver.findElement(By.xpath(".//*[contains(text(),'t')]"));
s.o.p(elements.size());