ActionChains用法案例:两个输入框,从输入框1进行全选,复制,粘贴到输入框2中,我在网上找了相关的key方法,实现出来的结果与预期结果不一致

ActionChains用法案例:两个输入框,从输入框1进行全选,复制,粘贴到输入框2中,我在网上找了相关的key方法,实现出来的结果与预期结果不一致

源码如下:

实际结果如下:

预期结果:

Hello, 试一下这种方式,要先把键盘按钮按下加上快捷键,然后再把按钮提起,来实现一个动作,这样应该可以实现。代码示例如下:

action.key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL)
action.key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL)
input2.click()
action.key_down(Keys.CONTROL).send_keys('v').key_up(Keys.CONTROL).perform()
  • 首先要说的是,鼠标操作ActionChains的动作是在perform这一句语句执行的时候才会把之前设置(或者你可以看成之前的动作其实是在往一个动作列表里添加)的动作按照列表里的添加顺序进行连续的执行,所以在你在中途放了一个元素的click操作实际上并不是在语句的位置执行的 而是在第一个perform之后执行的
    image
  • 再来说一个ActionChains的情况,它在perform执行之后是不会清空之前的动作列表的,导致你如果不主动去清空或者新建一个对象,那么之前的动作还会存在,下一次perform的时候还是会执行一遍,这就是为什么你第二个输入框里也有username tes 这些字母的原因,因为这些动作是第一次的时候记录进去的
  • 最后说一下为什么组合键没生效,这个是因为chromedriver75版本之后默认使用w3c协议而不是JSONWP,这种协议的情况下,使用send_keys的时候,按键是顺序执行而不是同时执行,导致组合键变成了连续键,就无法达到组合键的效果了,可以在启动的时候添加参数关闭w3c协议,回到旧版本的效果。
    image

谢谢你的详细回复,我知道了问题所在,不过尝试几次之后,得到的结果还是有些问题,我再按照你的方法研究下。