C# 获取第一个ul及其第一个li中的第一个输入

C# 获取第一个ul及其第一个li中的第一个输入,c#,xpath,selenium,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>

以下是标记:

<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没有找到它。我想点击那个复选框。

这个
ul
不是
h3
的孩子。它是一个兄弟姐妹。调整XPath以使用

如果要确保选择第一个
ul
和第一个
li
,请添加其他谓词筛选器:

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

ul
不是
h3
的孩子。它是一个兄弟姐妹。调整XPath以使用

如果要确保选择第一个
ul
和第一个
li
,请添加其他谓词筛选器:

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

在我看来,您还可以通过使用更易于阅读的


我相信,对于CSS和XPath哪个更可取,会有很多争论。但通常当我看到我的QA执行复杂的XPath查询时。我试图找到在元素上实现“id”属性或简化DOM元素以供选择的方法。

我认为,您还可以通过使用更易于阅读的:


我相信,对于CSS和XPath哪个更可取,会有很多争论。但通常当我看到我的QA执行复杂的XPath查询时。我试图找到在元素上实现“id”属性或简化DOM元素以供选择的方法。

XPath不是在h3中查找ul吗?是的,我在发布这篇文章后发现了这一点……XPath不是在h3中查找ul吗?是的,我在发布这篇文章后发现了这一点……我不想选择第一个ul,只有第一个李在ul。。。但是我有一个问题,如果你有一系列的
    ,你想迭代每一个,并选中每个ul中的第一个复选框,你能解释一下::和下面的兄弟吗?我不熟悉XPath.found,应该是{}so text()='{0}',我有[]
    后面的兄弟姐妹
    是一个轴,
    是轴分隔符。如果未在位置步长处指定轴,则默认值为
    子对象
    。因此,
    /ul/li
    相当于
    /child::ul/child::li
    。我不想选择第一个ul,只有ul中的第一个li。。。但是我有一个问题,如果你有一系列的
      ,你想迭代每一个,并选中每个ul中的第一个复选框,你能解释一下::和下面的兄弟吗?我不熟悉XPath.found,应该是{}so text()='{0}',我有[]
      后面的兄弟姐妹
      是一个轴,
      是轴分隔符。如果未在位置步长处指定轴,则默认值为
      子对象
      。因此,
      /ul/li
      相当于
      /child::ul/child::li
      //h3[text()='{0}']/following-sibling::ul[1]/li[1]/input[1]
      
      ul:first li:first input[type='checkbox']