使用Selenium 2执行复制和粘贴

aar*_*oon 18 selenium selenium-webdriver

有没有办法使用Selenium 2和Python绑定执行复制和粘贴?

我突出显示了要复制的元素,然后执行以下操作

copyActionChain.key_down(Keys.COMMAND).send_keys('C').key_up(Keys.COMMAND)
Run Code Online (Sandbox Code Playgroud)

但是,不会复制突出显示的文本.

Gre*_*reg 19

实际上很简单:

from selenium.webdriver.common.keys import Keys

elem = find_element_by_name("our_element")
elem.send_keys("bar")
elem.send_keys(Keys.CONTROL, 'a') #highlight all in box
elem.send_keys(Keys.CONTROL, 'c') #copy
elem.send_keys(Keys.CONTROL, 'v') #paste
Run Code Online (Sandbox Code Playgroud)

我想这可能也可以扩展到其他命令

  • 谢谢格雷格,这比我想象的要简单明了.但是,我正在使用Mac OSX,我试图在一个可信的div内的ap上调用send_keys(),它似乎不起作用.谁能证实这一点?似乎Mac OSX不支持本机事件. (4认同)
  • 有没有人尝试过使用Chrome和OSX(Keys.COMMAND或Keys.META)并使其工作?我一直在尝试这个通过wd(https://github.com/admc/wd/)并且它什么也没做,但我可以发送其他特殊的键,如退格键到一个contenteditable,这些工作就好了. (4认同)
  • @LeRouxBodenstein 您有没有发现如何使用 COMMAND 键执行此操作? (2认同)
  • 另一个[此页面上的答案](/sf/answers/2873239351/) 介绍了如何在 Mac 上执行此操作 (2认同)

Bra*_*rks 18

要在Mac和PC上执行此操作,您可以使用这些备用键盘快捷键进行剪切,复制和粘贴.请注意,其中一些在物理Mac键盘上不可用,但由于传统的键盘快捷键而起作用.

用于在Mac上剪切,复制和粘贴的备用键盘快捷键

  • Cut => control + delete,或control + K.
  • 复制=>控制+插入
  • 粘贴=> shift + insert或control + Y.

所以在Selenium(Ruby)中,选择元素中的文本然后将其复制到剪贴板大致类似于此.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains

browser = webdriver.Safari(executable_path = '/usr/bin/safaridriver')
browser.get("http://www.python.org")
elem = browser.find_element_by_name("q")
elem.clear()
actions = ActionChains(browser)
actions.move_to_element(elem)
actions.click(elem) #select the element where to paste text
actions.key_down(Keys.META)
actions.send_keys('v')
actions.key_up(Keys.META)
actions.perform() 
Run Code Online (Sandbox Code Playgroud)

  • 我可以确认这个解决方案适用于带有chromedriver的Mac,其中COMMAND + v技巧不起作用. (2认同)

小智 7

elem.send_keys(Keys.SHIFT, Keys.INSERT)
Run Code Online (Sandbox Code Playgroud)

当您尝试粘贴某些内容时,它在 macOS Catalina 上运行良好。


Ant*_*hon 5

我目前无法在 OSX 上尝试这个,但它绝对适用于 FF 和 Ubuntu:

import os
import time

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

with open('test.html', 'w') as fp:
    fp.write("""\
<html>
<body>
  <form>
    <input type="text" name="intext" value="ABC">
    <br>
    <input type="text" name="outtext">
  </form>
</body>
</html>
""")

driver = webdriver.Firefox()
driver.get('file:///{}/test.html'.format(os.getcwd()))
element1 = driver.find_element_by_name('intext')
element2 = driver.find_element_by_name('outtext')
time.sleep(1)
element1.send_keys(Keys.CONTROL, 'a')
time.sleep(1)
element1.send_keys(Keys.CONTROL, 'c')
time.sleep(1)
element2.send_keys(Keys.CONTROL, 'v')
Run Code Online (Sandbox Code Playgroud)

这些sleep()语句只是为了能够看到步骤,它们当然不是程序运行所必需的。

ActionChainsend_key只是切换到所选元素并对其执行 a send_keys


use*_*855 5

与其使用实际的键盘快捷键,不如让网络驱动程序获取文本。您可以通过查找元素的内部文本来完成此操作。

WebElement element1 = wd.findElement(By.locatorType(locator));
String text = element1.getText();
Run Code Online (Sandbox Code Playgroud)

这样,您的测试项目就可以实际访问文本。这对于日志记录很有用,或者可能只是确保文本说明了您想要说的内容。

从这里开始,您可以将元素的文本作为一个字符串进行操作,因此可以完全控制要粘贴到元素中的内容。现在就

 element2.clear();
 element2.sendKeys(text);
Run Code Online (Sandbox Code Playgroud)

其中element2是将文本粘贴到其中的元素