【问题标题】:Selenium - Check if an element is under another oneSelenium - 检查一个元素是否在另一个元素之下
【发布时间】:2016-06-29 15:39:35
【问题描述】:

我正在使用 Selenium 进行 Java 测试。 我知道我可以检查一个元素是否启用或显示:

 isDisplayed
 isEnabled

是否可以检查一个元素是否不可见,以防该元素位于另一个元素之下?例如,如果一个 div 在另一个下。 有了它,我想检查 GUI 元素。例如,如果一个按钮在元素下移动,等等......

有什么想法吗?

感谢您的帮助_

【问题讨论】:

  • 您的意思是在视觉上位于另一个元素下,还是您的意思是另一个元素的子/后代?听起来你的意思是在视觉下......例如,元素 X 在弹出窗口下。
  • 在我的情况下,它是在视觉下方的时候。它可以是弹出窗口下的 div,但我正在考虑可以隐藏元素的 Css 修改。例如隐藏按钮的大 div

标签: java selenium selenium-webdriver webdriver visibility


【解决方案1】:

假设您要单击一个元素,但该元素在“后面”/“下面”(又名被另一个元素“阻挡”),Selenium 实际上会抛出一个 ElementClickIntercepted 异常。作为异常消息的一部分,它还返回您尝试单击的点以及哪个其他元素(标记、类)拦截了单击。通过简单地尝试单击一个元素并专门捕获这种类型的异常,您可以获得您正在寻找的信息,如果您捕获这种异常 => 元素不可点击(在给定坐标处 - 在大多数情况下默认点击点(或者如果您使用操作:您定义的偏移量)),如果没有异常 => 元素是可点击的。

【讨论】:

    【解决方案2】:

    我认为像这样构建你的定位器可能会做到这一点。

    By TOP = By.xpath(".//div");
    By UNDER = By.xpath("..//..//div");
    By elementUNDERtheTOP = new ByChained(TOP, UNDER);
    

    这是以下的等价物:

    driver.findElement(TOP).findElement(UNDER);
    

    这可以用 XPath 来做,但我认为你不能用 CSS 定位器来做这件事,因为 CSS 定位器无法遍历 DOM 树到父元素。

    【讨论】:

    • 这正是他所需要的,但希望它不会让他更加困惑。 +1 示例代码。
    • 就是这样!这个 ByChained 返回什么?我该如何整合它?感谢您的帮助
    • 好的,我澄清了一点,以减少混乱。
    • 其实这个答案离题了。问题是关于如何检测是否无法单击或访问某些内容,因为它被另一个元素覆盖。 (不嵌套在其中,但被它遮挡。)
    【解决方案3】:

    selenium.isElementPresent() 或 selenium.isVisible()

    这些可能会对你有所帮助。

    isElementPresent() - 这个方法主要测试我们正在寻找的元素是否存在于页面的某个地方。

    isVisible() - 寻找 display: none 样式标签 - 如果我们不小心,这可能会抛出一个空指针......因此首先要查看元素是否可见,首先使用 isElementPresent() 方法检查元素是否存在.然后尝试检查元素是否可见!

    【讨论】:

    • 我的问题是,就我而言,该元素已经在页面上,但被其他元素隐藏了。 isElementPresent() 无法检查?
    • 如果元素在页面上,硒可以到达。只需尝试像 driver.findElement(By.id("id")); 一样到达它;
    • 好的,如果它被另一个元素隐藏了它就无法检测到它?
    • 是的,就是这样,但我正在寻找一种自动化的方法:p
    • 其实这个答案离题了。问题是关于如何检测是否无法点击或访问某些内容,因为它被另一个元素覆盖。
    猜你喜欢
    • 1970-01-01
    • 2016-12-31
    • 2019-02-12
    • 2017-01-25
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多