有没有办法使用Selenium 2和Python绑定执行复制和粘贴?
我突出显示了要复制的元素,然后执行以下操作
copyActionChain.key_down(Keys.COMMAND).send_keys('C').key_up(Keys.COMMAND)
但是,不会复制突出显示的文本。
实际上很简单:
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
我想这可能也可以扩展到其他命令
要在Mac和PC上执行此操作,您可以使用这些备用键盘快捷键进行剪切,复制和粘贴。请注意,其中一些在物理Mac键盘上不可用,但由于传统的键盘快捷键而起作用。
所以在Selenium(Ruby)中,选择元素中的文本然后将其复制到剪贴板大致类似于此。
# double click the element to select all it's text
element.double_click
# copy the selected text to the clipboard using CTRL+INSERT
element.send_keys(:control, :insert)
而不是使用实际的键盘快捷方式,我会让webdriver获取文本。您可以通过查找元素的内部文本来完成此操作。
WebElement element1 = wd.findElement(By.locatorType(locator));
String text = element1.getText();
这样您的测试项目就可以实际访问文本。这对于记录目的是有益的,或者可能只是为了确保文本说明您想要它说什么。
从这里你可以将元素的文本操作为一个字符串,这样你就可以完全控制你输入到你要粘贴的元素中的内容。现在就是
element2.clear();
element2.sendKeys(text);
其中element2是要将文本粘贴到的元素
我目前无法在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')
sleep()
语句只是为了能够看到步骤,它们当然不是程序运行所必需的。
ActionChain send_key
只是切换到所选元素并在其上执行send_keys
。