gpt4 book ai didi

html - Selenium 如何点击 50% 在屏幕上和 50% 不在屏幕上的元素?

转载 作者:行者123 更新时间:2023-12-05 03:56:39 28 4
gpt4 key购买 nike

有一个 div 元素。其大小的 50% 在屏幕上。其他 50% 超过屏幕高度并且不可见。无法滚动。

我尝试使用 Selenium 自动执行测试并单击该 div 元素,但有时有效,有时无效。

为什么 Selenium 不只是点击那个 div 的“屏幕区域”?

这个功能是如何实现的?当我告诉 Selenium 点击一个巨大的 div 元素时,它会点击那个 div 上的随机位置吗?

最佳答案

元素的 View 中心点

根据 WebDriver W3C 规范,元素的 in-view center point是矩形的原点位置,它是元素的第一个 DOM 之间的交点客户端矩形和初始 viewport .

给定一个已知在 View 中的元素,它可以这样计算:

  1. 令矩形成为通过对元素调用 getClientRects 返回的 DOMRect 序列的第一个元素。
  2. 设左边为 max(0, min(x 坐标,x 坐标 + 宽度尺寸))。
  3. 设右边为 min(innerWidth, max(x 坐标, x 坐标 + 宽度维度))。
  4. 设 top 为 max(0, min(y 坐标, y 坐标 + 高度尺寸))。
  5. 设 bottom 为 min(innerHeight, max(y 坐标, y 坐标 + 高度尺寸))。
  6. 令 x 为 floor((left + right) ÷ 2.0)。
  7. 设 y 为 floor((top + bottom) ÷ 2.0)。
  8. 返回 (x, y) 对。

如果一个元素是它自己的指针交互绘制树的成员,那么它就在 View 中,假装它的指针事件没有被禁用。


元素点击

element_click

根据文档 Element Click如果元素尚未可进行指针交互,命令将滚动到元素 View 中,并单击其 View 中心点。

注意:如果元素的中心点被其他元素遮挡,则返回元素点击拦截错误。如果元素在视口(viewport)之外,则返回元素不可交互错误。


解决方案

在这种情况下,有两种可能的解决方案如下:

  1. 你可以诱导WebDriverWait设置 expected_conditions作为element_to_be_clickable() .如此有效,您的代码行将是:

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".reply-button"))).click()
  2. 您可以使用 move_to_element(to_element)click(on_element=None)方法分别。如此有效,您的代码行将是:

    ActionChains(driver).move_to_element(element).click(element).perform()

引用

您可以在 selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element is not clickable with Selenium and Python 中找到相关讨论

关于html - Selenium 如何点击 50% 在屏幕上和 50% 不在屏幕上的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59126078/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com