问题
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键松开然后在复制粘贴就可以了