获得第一个ul和第一个li的第一个输入

时间:2012-03-09 21:57:55

标签: c# xpath selenium

这是标记:

<h3>Customers</h3>
   <ul>
      <li>
          <label for="customer115">Some Customer Name</label>
          <input id="customer115"  type="checkbox" value="115" name="customer115">
      </li>
      .. there are more <li> here...and so on
   </ul>
<h3>Dealers</h3>
   <ul>
      <li>
          <label for="dealer100">Some DealerName</label>
          <input id="dealer100"  type="checkbox" value="115" name="dealer115">
      </li>
      .. there are more <li> here...and so on
   </ul>

我正在尝试引用客户复选框,例如我可以通过XPath对其执行click()。我在Selenium这样做,所以:

 string sXPath = string.Format(string.Format("//h3[text()='{0}']/ul/li/input[1]", "Customers"));

IWebElement firstCompanyCheckbox = GetElementByXPath(sXPath);
firstCompanyCheckbox.Click();

到目前为止,我无法弄清楚如何获得此引用,上面的xPath找不到它。我想点击那个复选框。

2 个答案:

答案 0 :(得分:4)

ul不是h3的孩子。这是一个兄弟姐妹。调整XPath以使用following-sibling:: axis

//h3[text()='{0}']/following-sibling::ul/li/input[1]

如果您想确保选择第一个ul和第一个li,请添加其他谓词过滤器:

//h3[text()='{0}']/following-sibling::ul[1]/li[1]/input[1]

答案 1 :(得分:0)

在我看来,您还可以通过使用更易于阅读的CSS Selector来简化XPath:

ul:first li:first input[type='checkbox']

我敢肯定会有很多争论,哪个更好:CSS vs XPath。但通常当我看到我的QA走向复杂的XPath查询的路径时。我试图找到在元素上实现“id”属性的方法,或者简化用于选择的DOM元素。