Html Selenium如何点击屏幕上50%和屏幕上50%的元素?

Html Selenium如何点击屏幕上50%和屏幕上50%的元素?,html,selenium,selenium-webdriver,dom,webdriver-w3c-spec,Html,Selenium,Selenium Webdriver,Dom,Webdriver W3c Spec,有一个div元素。其大小的50%显示在屏幕上。另外50%超出屏幕高度,不可见。 不可能滚动 我尝试使用Selenium自动化测试,并单击该div元素,但有时它工作,有时不工作 为什么Selenium不点击该div的“屏幕区域” 这个功能是如何实现的?当我告诉Selenium单击一个巨大的div元素时,它是否会单击该div上的一个随机位置?如果您是基于xpath、id和其他定位器进行单击,那么它会单击随机位置。但只要单击元素并执行该单击的结果操作,这并不重要 关于有时它工作或不工作,若你们检查了按

有一个div元素。其大小的50%显示在屏幕上。另外50%超出屏幕高度,不可见。 不可能滚动

我尝试使用Selenium自动化测试,并单击该div元素,但有时它工作,有时不工作

为什么Selenium不点击该div的“屏幕区域”


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

如果您是基于xpath、id和其他定位器进行单击,那么它会单击随机位置。但只要单击元素并执行该单击的结果操作,这并不重要

关于有时它工作或不工作,若你们检查了按钮被启用或点击,它将始终工作

图元在视图中的中心点 根据WebDriver W3C规范,元素的是矩形的原点位置,该矩形是元素的第一个客户端矩形和初始矩形之间的交点

给定已知在视图中的元素,可以通过以下方式进行计算:

  • 让rectangle成为通过调用元素上的getClientRects返回的DOMRect序列的第一个元素
  • 设左侧为最大值(0,最小值(x坐标,x坐标+宽度尺寸))
  • 设右为最小值(内宽,最大值(x坐标,x坐标+宽度尺寸))
  • 设顶部为最大值(0,最小值(y坐标,y坐标+高度尺寸))
  • 让底部为最小值(内部高度,最大值(y坐标,y坐标+高度尺寸))
  • 设x为地板((左+右)÷2.0)
  • 设y为地板((顶部+底部)÷2.0)
  • 返回一对(x,y)
  • 如果某个元素是其自身指针可交互绘制树的成员,并且假定其指针事件未被禁用,则该元素处于视图中


    元素单击

    根据文档,如果元素还不可与指针交互,则该命令将滚动到该元素的视图中,并单击其视图中心点

    注意:如果元素的中心点被另一个元素遮挡,则返回一个元素点击截获错误。如果元素在视口之外,则返回“元素不可交互”错误


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

  • 您可以将设置为。因此,您的代码行实际上是:

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".reply-button"))).click()
    
    ActionChains(driver).move_to_element(element).click(element).perform()
    
  • 您可以分别使用和方法。因此,您的代码行实际上是:

    WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".reply-button"))).click()
    
    ActionChains(driver).move_to_element(element).click(element).perform()
    

  • 参考文献 您可以在

    Oh,
    button.click()和
    this.driver.actions()中找到相关的讨论。单击(按钮)。执行()似乎工作方式不同。click()似乎一直在工作,但通过驱动程序操作,它经常失败。