【问题标题】:Better way to get a parent element using Selenium使用 Selenium 获取父元素的更好方法
【发布时间】:2020-06-10 07:42:33
【问题描述】:

当我尝试点击这个按钮时,他有点移动并打开一个子菜单。解决方案很简单,只需点击他上方几级的 div(仍然是按钮)。但他总是在改变班级名称。

我设法使用这种异常//div[@style]/span[@aria-label]/../../../../../.. 来做到这一点。

我也试过用//div[@style]/span[@aria-label]/parent::div[@role="option"],但是没用,不知道为什么。

有没有人有任何建议让它更体面?我确信“../”并不是要在这么多层次上使用...

另外,我试图在我的整个项目中使用 CSS 选择器,但是在花了几个小时查看 StackOverflow 答案之后,解决方案似乎是使用 XPATH。如果有办法使用 CSS 选择器进行此操作,我会非常感兴趣。

【问题讨论】:

  • 看来你需要“祖先”轴。像//div[@style]/span[@aria-label]/ancestor::div[@role="option"] 这样的东西。但是,可以肯定的是,请发布您的数据样本。
  • 谢谢。不幸的是,我不能使用您的解决方案,因为所需的元素有一个没有价值的类,所以 XPath 变得不可点击(不知道为什么)......无论如何,我很欣赏你的回答,但我想我需要坚持疯狂的点...
  • 如果您提供部分 html 代码,我们可以检查是否有更好的方法来执行此操作。另外,您可以使用//div[@style]/span[@aria-label]/ancestor::*[5] 来缩短您的原始表达式。
  • @E.Wiest 是的,这比我所做的要好得多。您要回答这个问题以便我将其标记为已解决吗?再次,谢谢。这很有帮助。

标签: selenium xpath css-selectors


【解决方案1】:

您可以缩短 XPath 表达式并使您的 XPath 表达式更具可读性:

//div[@style]/span[@aria-label]/ancestor::*[5]

ancestor::*[5] 替换 /../../../../../..

【讨论】:

    猜你喜欢
    • 2022-01-03
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 2019-07-21
    • 1970-01-01
    • 2013-12-28
    相关资源
    最近更新 更多