selenium高级控件交互-键盘事件-复制粘贴,用火狐浏览器执行用例,模拟的复制不生效,粘贴内容非预期。用谷歌跑ok。

问题

selenium高级控件交互-键盘事件-复制粘贴,用火狐浏览器执行用例,模拟的复制不生效,粘贴内容非预期。用谷歌跑ok。

报错信息

代码

import sys
import time

from selenium import webdriver
from selenium.webdriver import ActionChains, Keys
from selenium.webdriver.common.by import By


class TestKeyboard:
    def setup_class(self):
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(3)

    def teardown_class(self):
        self.driver.quit()

    def test_copy_and_paste(self):
        self.driver.get("https://ceshiren.com/")
        self.driver.find_element(By.ID, "search-button").click()
        # 目标元素即为输入框
        ele = self.driver.find_element(By.ID, "search-term")
        # 判断操作系统是否为mac如果是mac 则返回 command 键位, 如果是windows 返回 control键位
        command_control = Keys.COMMAND if sys.platform == "darwin" else Keys.CONTROL
        ActionChains(self.driver) \
            .key_down(Keys.SHIFT, ele) \
            .send_keys("selenium!").\
            key_down(Keys.ARROW_LEFT).\
            key_down(command_control).send_keys("xvvvvvvvvvvvv").key_up(command_control).\
            perform()
        time.sleep(3)

执行用例之前先手动复制粘贴某段内容 “如”,然后执行用例,发现用例代码中复制没有生效,粘贴的是自己手动复制的内容,粘贴了12个 “如”

环境

windows


我这样操作是OK的呢

import sys
import time

from selenium import webdriver
from selenium.webdriver import ActionChains, Keys
from selenium.webdriver.common.by import By


class TestKeyboard:
    def setup_class(self):
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(3)

    def teardown_class(self):
        self.driver.quit()

    def test_copy_and_paste(self):
        self.driver.get("https://ceshiren.com/")
        self.driver.find_element(By.ID, "search-button").click()
        # 目标元素即为输入框
        ele = self.driver.find_element(By.ID, "search-term")
        # 判断操作系统是否为mac如果是mac 则返回 command 键位, 如果是windows 返回 control键位
        command_control = Keys.COMMAND if sys.platform == "darwin" else Keys.CONTROL
        ActionChains(self.driver).send_keys("selenium!").perform()
        ActionChains(self.driver).key_down(command_control).send_keys("a").key_up(command_control).perform()
        time.sleep(3)
        ActionChains(self.driver).key_down(command_control).send_keys("x").key_up(command_control).perform()
        time.sleep(3)
        ActionChains(self.driver).key_down(command_control).send_keys("v").key_up(command_control).perform()
        time.sleep(3)

这个我这边执行也ok
能明显看到全选,剪切,然后粘贴

这个问题可能是浏览器的问题。同样的代码,我用谷歌跑就ok

修改

class TestKeyBoard:

    def setup_class(self):
        self.driver = webdriver.Chrome()
        self.driver.implicitly_wait(3)

然后再跑就ok啦

浏览器的问题 火狐直接使用老师的代码是不行的 我再火狐调试出老师的效果代码如下
ActionChains(self.driver).key_down(Keys.SHIFT,ele).send_keys(“seleuim!@”).key_down(Keys.ARROW_LEFT).key_up(Keys.SHIFT).key_down(command_control).send_keys(“xvv”).key_up(command_control).perform()
在复制粘贴前把shift键松开然后在复制粘贴就可以了