硒如何单击屏幕上50%而不是50%的元素?

问题描述 投票:0回答:2

有一个div元素。屏幕大小的50%在屏幕上。其余50%超出屏幕高度,因此不可见。无法滚动。

我尝试使用Selenium自动化测试,然后单击该div元素,但有时它可以工作,有时却不能。

Selenium为什么不只单击该div的“屏幕区域”?

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

html selenium selenium-webdriver dom webdriver-w3c-spec
2个回答
0
投票

如果您基于xpath,id等定位器单击,是的,它会单击随机位置。但是,只要单击元素并执行该单击的结果操作就没有关系。

关于关于有时它是否起作用,如果您已选中要启用或单击的按钮,它将始终起作用。


0
投票

元素的视线中心点

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

鉴于已知的元素,可以这样计算:

  1. 让矩形成为通过对元素调用getClientRects返回的DOMRect序列的第一个元素。
  2. 左为max(0,min(x坐标,x坐标+宽度尺寸))。
  3. 右为最小值(innerWidth,max(x坐标,x坐标+宽度尺寸))。
  4. 让顶部成为max(0,min(y坐标,y坐标+高度尺寸))。
  5. 让底部成为最小值(innerHeight,max(y坐标,y坐标+高度尺寸))。
  6. 让x设为楼板((左+右)÷2.0)。
  7. 让我们成为地板((顶部+底部)÷2.0)。
  8. 返回(x,y)对。

[如果某个元素是其自己的可与指针交互的油漆树的成员,那么它就处于视野中,并假设其指针事件未禁用。


元素单击

“

根据文档,如果Element Click命令尚未与指针可交互,则滚动到该元素中,并单击其在视图中的中心点。

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


解决方案

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

  1. 您可以诱使WebDriverWaitexpected_conditions设置为element_to_be_clickable()。因此,您的代码行实际上将是:

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

    move_to_element(to_element)

参考

您可以在click(on_element=None)中找到相关的讨论

© www.soinside.com 2019 - 2024. All rights reserved.