【问题标题】:Exclude non visible elements with XPath when display: none; is set in CSS class?显示时使用 XPath 排除不可见元素:无;在 CSS 类中设置?
【发布时间】:2022-01-16 03:32:21
【问题描述】:

我需要从 XPath 中排除元素,其中 display: none; 在 CSS 类中设置。当给定元素的 CSS 类中 display: none; 设置为 as pointed out in this comment 时,solution suggested here 将不起作用。

在我的具体示例中,该元素有一个名为 error-result 的类,其 CSS 设置为:

.error-result {
    display: none;
}

这是我尝试过的 XPath:

.//*[contains(text(),'XXXXXX')][not(ancestor::div[contains(@style,'display: none')])][not(descendant::div[contains(@style,'display: none')])]

问题是,Selenium 仍然识别出不需要的元素,因为 display: none;仅在 CSS 类中设置。

如何排除此类元素?

我在 Java 中使用 Selenium WebDriver

谢谢

【问题讨论】:

  • 这听起来像X-Y problem。与其寻求解决问题的帮助,不如编辑您的问题并询问实际问题。你想做什么?
  • @DebanjanB 我需要识别某个元素,但前提是 CSS 类中没有设置 display: none
  • @BradfordGriggs 我建议你接受并支持你的答案。这可能会增加您获得答案的机会..
  • @Prophet 我几乎对我的问题给出的每个答案都投了赞成票(几乎每个答案至少有 1 个赞成票)。我也接受了所有人,除了一个。一个答案实际上并没有回答这个问题,但提供了丰富的信息,所以我投了赞成票,但我没有接受作为答案。
  • 你这样做不是为了我,我的朋友。我真的不在乎。它可能会帮助你。

标签: java css selenium selenium-webdriver webdriver


【解决方案1】:

Xpath 针对页面源范围执行。 仅当您能够在页面源文本中的元素的样式属性中找到显示属性(driver.getPageSource() 的结果值)时,它才会起作用

不幸的是,在许多情况下页面源没有反映 css 样式,因此您应该执行额外的驱动程序命令,例如 element.getCssValue('displayed')。 (但为了检查可见性,我建议使用isDisplayed())。

这意味着,您应该通过元素列表进行迭代并通过某些条件获取子列表,这会增加驱动程序的请求量,但这是解决此问题的唯一方法。

【讨论】:

    猜你喜欢
    • 2017-01-03
    • 2012-07-11
    • 2017-05-04
    • 1970-01-01
    • 2016-10-21
    • 2021-11-13
    • 2021-07-13
    • 2012-05-01
    • 2010-12-01
    相关资源
    最近更新 更多