当前位置: 首页 > 知识库问答 >
问题:

用Selinum+Capybara模拟剪贴板复制/粘贴

唐高卓
2023-03-14
const copyTextarea = document.querySelector("#copy-link-button");
copyTextarea.focus();
copyTextarea.select();
document.execCommand('copy');
  1. 使用“复制链接”按钮复制链接
  2. 导航到其他输入/文本字段
  3. 用Ctrl+V粘贴到字段中,并读取该字段的内容以验证

我的测试:

# Copy the link
page.find("#copy-link-button").click
wait_for_ajax

# Visit some other page that I know has an input/text field
visit account_settings_path

input = page.find("#user_email")

# Clear the field
fill_in("user[email]", with: "")

# Paste in the contents of the clipboard
input.base.send_keys([:control, "v"])

# Validate
expect(input.value).to eq("some value");

但是,没有任何内容粘贴到该输入(input.valueinput.textreturn“”)。

谢了!

共有1个答案

能修谨
2023-03-14

注意:由于Chrome的最初发布已经改变了可用的权限类型。对于headless解决方案,请访问https://chromedevtools.github.io/devtools-protocol/tot/browser/#type-permissiontype,查看当前可用的权限类型

关于剪贴板内容的访问有很多安全规则,所以试图从Capybara获得粘贴工作真的是一项令人沮丧的练习。此外,当Ctrl/Command v作为击键发送时,大多数浏览器实际上不会执行任何操作,因为这是系统触发的操作,而不是浏览器触发的操作。

但是,由于您只想验证复制是否有效,实际上并不需要触发粘贴,您只需要绕过使用剪贴板API的权限要求。如果您正在使用Chrome(在非headless配置中--当前不使用headless),可以通过在驱动程序注册中设置profile.content_settings.exceptions.clipboard首选项来实现

Capybara.register_driver :chrome do |app|
  options = Selenium::WebDriver::Chrome::Options.new
  options.add_preference('profile.content_settings.exceptions.clipboard', {
    '*': {'setting': 1}
  })
  Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
end

如果您在headless模式下运行,并使用最新的Capybara和selenium和Chrome,另一个选择是使用CDP来授予权限

page.driver.browser.execute_cdp('Browser.grantPermissions', origin: page.server_url, permissions: ['clipboardRead', 'clipboardWrite'])

一旦确定了权限,就可以使用evaluate_async_script访问剪贴板数据

clip_text = page.evaluate_async_script('navigator.clipboard.readText().then(arguments[0])')

备注:

    null
 类似资料:
  • 问题内容: 当我尝试使用粘贴到单元格时,我要粘贴的单元格保持空白,但setValueAt()似乎可以正常工作。另外,当我尝试从一个单元格剪切或复制JPopupMenu时,如果要粘贴到另一个单元格,则我的“粘贴”选项将保持禁用状态。我不知道为什么。我的代码如下。 Here’s my code for 问题答案: 根据您的示例代码,并且必须填写空白,它对 我有用… Now, maybe you’d l

  • 在Linux上不接触鼠标,在命令模式下的VIM和系统剪贴板之间复制粘贴的最快方法是什么?

  • 问题是,从vim到剪贴板的复制/粘贴停止工作。我不知道为什么。。。 在中,我也没有看到和缓冲区... 这是我的。vimrc,如果需要的话。 有什么建议吗? 谢谢

  • 问题内容: 我正在寻找一个如何将文本复制到iOS剪贴板的干净示例,然后可以在其他应用程序中使用/粘贴该文本。 此功能的优点是可以快速复制文本,而无需传统文本复制的标准文本突出显示功能。 我假设键类在其中,但是在它们提供的代码示例中找不到相关的区域。 问题答案: 如果您只需要纯文本,则可以使用属性。它既可读又可写: (从剪贴板中 读取数据时 ,UIPasteboard文档还建议您首先检查一下,“以避

  • 我可以假设Mac OS X剪贴板图像数据是png吗? 当我尝试MIME检测剪贴板数据时,它返回。 这会导致每个浏览器下载图像而不是显示图像。 如果我强制将内容类型设置为image/png,一切看起来都很好,但我想知道是否有一种方法可以让我不必做出这样的假设? 我用https://github.com/broofa/node-mime检测MIME类型。

  • 我可以使vim粘贴从和到系统的剪贴板?