使用Capybara复制粘贴?

时间:2016-01-15 17:21:31

标签: selenium capybara copy-paste

我很乐意做这样的事情:

div = find '#some-div'
copy_to_clipboard(div)

input = find '#my-input'
paste_from_clipboard(input)

我不想使用send_keys并使用Ctrl + C和Ctrl + V来模拟此项;我希望这可以跨浏览器工作(特别是在移动设备上)。

此API是否存在?

4 个答案:

答案 0 :(得分:1)

我发现的最简单的方法:

element.send_keys [:control, 'c']
element.send_keys [:control, 'v']

答案 1 :(得分:0)

没有Capybara复制/粘贴API - 如果您只想将可见文本复制到输入中,那么您可以

div_text = find('#some-div').text()
find('#my-input').set(div_text)

如果这不符合您的要求,那么您可以使用#execute_script创建一个选择范围,如

var range = document.createRange();
range.setStart( <start node>, <start node character offset> );
range.setEnd( <end node>, <end node character offset> ); 

window.getSelection().removeAllRanges();
window.getSelection().addRange(range);

然后找到你的目标元素并将其值设置为window.getSelection()。toString()。请注意,这并不是真正模仿用户会做什么,所以如果您实际上使用它来测试应用程序,我仍然建议在为支持它的浏览器设置选择范围后使用ctrl / cmd-c / v,因为它模拟了用户行为更好。

答案 2 :(得分:0)

这是一个古老的版本,但是您不需要使用capybara,但是解决方法是使用这个非常简单的gem:

https://github.com/janlelis/clipboard

答案 3 :(得分:-1)

没有API可以做到。

您可以从一个浏览器获取元素

div = page.find('#some-div')

然后您可以将其传递给其他浏览器

fill_in '#some-other-div' with => div

您可以在此处详细了解水豚:https://github.com/jnicklas/capybara