这是标记:
<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找不到它。我想点击那个复选框。
答案 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元素。