有一个div元素。屏幕大小的50%在屏幕上。其余50%超出屏幕高度,因此不可见。无法滚动。
我尝试使用Selenium自动化测试,然后单击该div元素,但有时它可以工作,有时却不能。
Selenium为什么不只单击该div的“屏幕区域”?
以及如何实现此功能?当我告诉Selenium单击一个巨大的div元素时,它是否单击了该div上的随机位置?
如果您基于xpath,id等定位器单击,是的,它会单击随机位置。但是,只要单击元素并执行该单击的结果操作就没有关系。
关于关于有时它是否起作用,如果您已选中要启用或单击的按钮,它将始终起作用。
根据WebDriver W3C规范,元素的in-view center point是矩形的原点位置,该矩形是元素的第一个DOM客户矩形与初始viewport之间的交点。
鉴于已知的元素,可以这样计算:
[如果某个元素是其自己的可与指针交互的油漆树的成员,那么它就处于视野中,并假设其指针事件未禁用。
根据文档,如果Element Click命令尚未与指针可交互,则滚动到该元素中,并单击其在视图中的中心点。
Note:如果元素的中心点被另一个元素遮挡,则返回元素点击拦截错误。如果元素在视口之外,则返回元素不可交互的错误。
在这种情况下,有两种可能的解决方案,如下所示:
您可以诱使WebDriverWait将expected_conditions设置为element_to_be_clickable()
。因此,您的代码行实际上将是:
element_to_be_clickable()
您可以分别使用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)
中找到相关的讨论