提问人:John Doe 提问时间:11/3/2018 最后编辑:undetected SeleniumJohn Doe 更新时间:10/17/2019 访问量:1657
为什么 selenium 的move_by_offset功能在执行前会等待一段时间 (Python/Chrome)
Why does selenium's move_by_offset function sometime waits before executing (Python/Chrome)
问:
我在 Chrome 中使用 Selenium 和 Python 来自动执行一些测试,其中一部分是移动鼠标,因为我正在创建大量测试,我在线程上并行运行它们。唯一真正给我带来问题的代码是以下几点:
action = selenium.webdriver.common.action_chains.ActionChains(driver)
action.move_by_offset(x,y)
action.perform()
由于某种原因,有时上述操作至少需要 5 秒,例如 5.03123 秒才能执行。当有延迟时,它总是只略高于 5,但从不低于 5,这让我相信某个地方有时间.sleep(5)。我已经检查了 selenium actionchains 文件并注释掉了:
self.w3c_actions.key_action.pause()
如果这是罪魁祸首,但没有重大变化。
一个重要的注意事项是,当我的窗口最小化并且我有多个线程运行时,这似乎是一个更大的问题/更频繁地发生。
我非常茫然为什么会发生这种情况,并且尝试了一堆不同的东西/测试,但基本上无济于事。非常感谢任何和所有的帮助。
如果您需要任何其他信息,或者我应该运行其他特定测试,请告诉我,我会的。
答:
0赞
undetected Selenium
11/4/2018
#1
你做错了,注释掉了这一行:
self.w3c_actions.key_action.pause()
在方法中,对 key_action.pause()
的调用是出于超出此问题范围的目的而实现的。通过所有可能的方式,您不会更改源代码客户端代码。move_by_offset()
窗口最小化
在执行 Selenium 测试时,您需要保持窗口最大化。
您会在 Way to open Selenium browser not ovelapping my current browser 中找到相关讨论
评论
1赞
Jinhua Wang
5/19/2021
为什么这个问题超出了范围?
1赞
binboum
10/17/2019
#2
您可以重写该方法:
class ActionChainsChild(ActionChains):
def move_by_offset(self, xoffset, yoffset):
"""
Moving the mouse to an offset from current mouse position.
:Args:
- xoffset: X offset to move to, as a positive or negative integer.
- yoffset: Y offset to move to, as a positive or negative integer.
"""
if self._driver.w3c:
self.w3c_actions.pointer_action.move_by(xoffset, yoffset)
#self.w3c_actions.key_action.pause()
else:
self._actions.append(lambda: self._driver.execute(
Command.MOVE_TO, {
'xoffset': int(xoffset),
'yoffset': int(yoffset)}))
return self
实用链接:
https://www.thedigitalcatonline.com/blog/2014/05/19/method-overriding-in-python/
评论