【问题标题】:in selenium find the following sibling of an element with a specific child css selector在 selenium 中找到具有特定子 css 选择器的元素的以下同级
【发布时间】:2021-10-11 21:40:51
【问题描述】:

我有一棵这样的树:

<table>
<tbody>
<tr>
 <td>
  <span>MySpan1</span>
 </td>
<tr>
<tr>
 <td>
 </td>
 <td>
  <div>
   <a title="my_title1"></a>
  </div>
 <td>
</tr>

<tr>
 <td>
  <span>MySpan2</span>
 </td>
<tr>
<tr>
 <td>
 </td>
 <td>
  <div>
   <a title="my_title2"></a>
  </div>
 <td>
</tr>
</tbody>
</table>

我需要选择&lt;a title="my_title2"&gt;&lt;/a&gt; 知道它的tr 父级必须有一个兄弟tr/td/span[contains(text(),'MySpan2')]
如果用css selector不能实现,那么用xpath能实现吗?

【问题讨论】:

    标签: selenium xpath css-selectors


    【解决方案1】:

    请使用这个 xpath

    //span[contains(text(),'MySpan2')]/ancestor::tr/following-sibling::tr[2]/descendant::a[@title='my_title2']
    

    我们的目标是MySpan2 span 然后转到ancestor 这是tr 然后我们必须转到它的第二个following-sibling 然后定位一个标题为my_title2 的标签

    您不能为此使用css selectorxpath 是唯一的选择。

    我们正在HTMLDOM 向上遍历,因此必须排除css

    请参考xpath axes

    更新:

    不管tr 兄弟编号:

    //span[contains(text(),'MySpan2')]/ancestor::tr/following-sibling::tr/descendant::a[@title='my_title2']
    

    【讨论】:

    • 好的,谢谢!我只需要更改 following-sibling::tr[1] 就可以了。谢谢!
    • SO 中的约定是通过单击答案旁边的勾号/复选标记将答案标记为已接受。
    • 实际上,我发现这不是最好的解决方案,因为我不确定 MySpan2 下有多少个 。 E.g.:&lt;tr&gt; &lt;td&gt; &lt;span&gt;MySpan2&lt;/span&gt; &lt;/td&gt; &lt;tr&gt; &lt;tr&gt; &lt;td&gt; &lt;/td&gt; &lt;td&gt; &lt;div&gt; &lt;a title="my_title2"&gt;&lt;/a&gt; &lt;/div&gt; &lt;td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;tr&gt; &lt;td&gt; &lt;/td&gt; &lt;td&gt; &lt;div&gt; &lt;a title="my_title3"&gt;&lt;/a&gt; &lt;/div&gt; &lt;td&gt; &lt;/tr&gt; 但是标题名是确定的。是否可以找到已知标题名称的兄弟?
    • 检查上面的更新。
    【解决方案2】:

    这对我有用:
    //span[contains(text(),'MySpan2')]/ancestor::tr/following-sibling::tr/td/div/a[@title='my_title2']

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签