如何使用 Capybara + Poltergeist 将文本设置到 Summernote 文本区域

2023-12-12

我有一个正在使用的文本区域夏日笔记我给它设置了 onChange 事件。我想用 RSpec + Capybara + Poltergeist 编写测试来确认 onChange 事件正常工作。

据我检查,浏览器中显示的文本区域实际上是带有“note-editable”css 类的 div 标签。如何为其设置文本并触发 onChange 事件?

我写了这样的代码,但出现错误Capybara::ElementNotFound: Unable to find field "Some label":

visit edit_foo_path
fill_in 'Some label', with: 'Foo bar'

EDIT

我为此问题创建了一个示例应用程序:

https://github.com/JunichiIto/summernote-rspec-sandbox

Raw HTML

<!DOCTYPE html>
<html>
<head>
  <title>SummernoteRspecSandbox</title>
  <link rel="stylesheet" media="all" href="/assets/application.self-f866ffa01bf26be2b8a8ac982e49d917be3b9a46604dfdc9fc8c139b62409465.css?body=1" data-turbolinks-track="true" />
  <script src="/assets/jquery.self-d03a5518f45df77341bdbe6201ba3bfa547ebba8ed64f0ea56bfa5f96ea7c074.js?body=1" data-turbolinks-track="true"></script>
<script src="/assets/jquery_ujs.self-ca5248a2fad13d6bd58ea121318d642f195f0b2dd818b30615f785ff365e8d1f.js?body=1" data-turbolinks-track="true"></script>
<script src="/assets/bootstrap.self-2bbd2c0465f01b1f8270958ddfc2e62a08915f295a35d22df2971eb936cf3c64.js?body=1" data-turbolinks-track="true"></script>
<script src="/assets/summernote.self-612431947ae9c3f1f0283dbbbc757153947f8e5de408f9bd8886b1232e8a54f7.js?body=1" data-turbolinks-track="true"></script>
<script src="/assets/blogs.self-b9a3bc0ee16e0bc44fb466bd5c7833ebec276447634d25729280397c65cff176.js?body=1" data-turbolinks-track="true"></script>
<script src="/assets/application.self-f8806224e027f3e3f0138ea9ce99319e298dfdb323304d1f1be6eae8e8c74724.js?body=1" data-turbolinks-track="true"></script>
  <meta name="csrf-param" content="authenticity_token" />
<meta name="csrf-token" content="4iu31ugTgvMERb1xQRjtcySSssjMthLWclgiHMe60aHGMeC3IMeNKZlkfFSKT33hNuvDqUUgUNTUaQEcoBl9mw==" />
</head>
<body>

<h1>New Blog</h1>

<form class="new_blog" id="new_blog" action="/blogs" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="&#x2713;" /><input type="hidden" name="authenticity_token" value="TBkcVk38/42Cx9coe717KKpb1H2cmDpv8kz7LREfkiloA0s3hSjwVx/mFg2w6uu6uCKlHBUOeG1Ufdgtdrw+Ew==" />

  <div class="field">
    <label for="blog_title">Title</label><br>
    <input type="text" name="blog[title]" id="blog_title" />
  </div>
  <div class="field">
    <label for="blog_content">Content</label><br>
    <textarea class="summernote" name="blog[content]" id="blog_content">
</textarea>
  </div>
  <div class="actions">
    <input type="submit" name="commit" value="Create Blog" />
  </div>
</form>

<a href="/blogs">Back</a>


</body>
</html>

咖啡脚本

$ ->
  $('.summernote').summernote()

RSpec

require 'rails_helper'

feature 'Blogs' do
  scenario 'Create blog' do
    visit new_blog_path
    fill_in 'Title', with: 'Hello, world!'
    fill_in 'Content', with: 'This is awesome blog.'
    click_button 'Create Blog'
    expect(page).to have_content 'Blog was successfully created.'
    expect(page).to have_content 'Hello, world!'
    expect(page).to have_content 'This is awesome blog.'
  end

  scenario 'Create blog with JS', js: true do
    visit new_blog_path
    fill_in 'Title', with: 'Hello, world!'
    pending 'Capybara::ElementNotFound: Unable to find field "Content"'
    fill_in 'Content', with: 'This is awesome blog.'
    click_button 'Create Blog'
    expect(page).to have_content 'Blog was successfully created.'
    expect(page).to have_content 'Hello, world!'
    expect(page).to have_content 'This is awesome blog.'
  end
end

将Summernote更新到0.8.2后,find('div[contenteditable]').set('This is awesome blog.')不起作用。

我必须通过调用 Summernote APIexecute_script like:

script = <<-JS
$('.some-field').summernote('editor.insertText', 'This is awesome blog.');
JS
execute_script(script)

EDIT

将Summernote更新到0.8.2后,find('div[contenteditable]').set('This is awesome blog.')不起作用。

抱歉,这不是我想说的。我应该这样说:

将Summernote更新到0.8.2后,find('div[contenteditable]').set('This is awesome blog.')不会触发 Summernotes 的 onChange 回调。所以我不得不打电话execute_script.

我必须在我的规范中测试 onChange 行为。

EDIT 2

正如托马斯·沃波尔所写,send_keys可以使用方法代替execute_script。谢谢托马斯·沃波尔!

find('div[contenteditable]').send_keys('This is awesome blog.')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Capybara + Poltergeist 将文本设置到 Summernote 文本区域 的相关文章

  • Selenium 找不到“spec”文件夹

    因此 我正在尝试建立本地系统来帮助完成仅使用 Rails 的雇主的现有项目 他们希望我主要关注 rspec 测试 因为该项目几乎可以正常运行 我需要充实他们错过的东西 但是 我无法获取 rake spec 来构建我的测试文件夹 事实上 测试
  • 如何阻止与 RSpec 和 Capybara 的外部连接?

    在我的 Rails 项目中 我想编写非理想条件的测试 例如缺乏互联网连接或超时 例如 我正在使用 gem 来联系 API 并且希望确保在我的应用程序和外部 API 之间存在连接问题时能够正确处理错误 我已经可以通过用录像机制作固定装置并从
  • 使用 VCR 过滤敏感数据

    我正在使用 VCR gem 记录 http 交互并在将来重播它们 我想过滤掉 uri 请求中的实际密码值 以下是 uri 的示例 http services somesite com Services asmx Cabins Usernam
  • ruby rspec 不能与 simplecov 一起使用

    我安装了 simplecov gem 并添加了 require simplecov SimpleCov start 到spec helper rb文件 现在如果我在some file spec rb文件中包含spec helper rb并尝
  • 水豚可以与隐藏元素互动吗?

    我有一个文件字段opacity 0并且与一个假按钮重叠 这是一种常见的 CSS 技术 用于伪造一种在不同浏览器中一致显示的 上传按钮 水豚不允许我打电话attach file在该输入上 错误是Selenium WebDriver Error
  • rake cucumber 和 rake spec 始终使用“开发”环境

    我运行 Cucumber 和 RSpec 测试的 rake 任务始终使用我的development环境 以下是相关的配置文件 RAILS ROOT config environments cucumber rb Edit at your o
  • 使用 ActiveRecord::Relation 时的 RSpec 匹配器

    所以这是我要测试的方法 def self by letter letter where lastname LIKE letter order lastname end 简单问一下 letter 后面的百分号到底有什么作用 跟格式化有关系吗
  • 如何使用 RSpec 测试 javascript 重定向?

    我正在使用 xhr post 与控制器交互 并且我期待重定向 在 js erb 中 我有 window location href address 手动测试 浏览器会正确重定向 我如何使用 RSpec 测试它 response should
  • factory_girl + rspec 似乎并没有在每个示例后回滚更改

    类似于这里描述的问题 http rpheath com posts 411 how to use factory girl with rspec http rpheath com posts 411 how to use factory g
  • 从 RSpec 迁移到 Minitest::Spec?

    是否有可遵循的策略或一组步骤来从 RSpec 2 迁移到MiniTest Spec 我想考虑为一个大型项目执行此操作 但我不知道从哪里开始 我已经很久没有使用 MiniTest Spec 了 我正在自己移植一些测试 但以下是我从 RSpec
  • 使用 simple_form Rails 时测试 HTML 5 表单验证

    我正在为我的待办事项列表应用程序使用 devise 和 simple form 现在 我的 users edit html erb 有以下代码 h2 Edit profile h2 我的 user rb 看起来像这样 class User
  • Rspec 控制器测试,传递 JSON 参数

    我试图实现以下目标 在 RSpec 控制器测试中创建 POST json 请求 并向其传递参数 这是我的代码 it returns access token do post login email bla password bla1 for
  • 使用 RSpec 进行 Rails 片段缓存测试

    我觉得这是一个没有太多记录的主题 至少我在这里找到最佳实践时遇到了很多麻烦 我使用 cache key 在视图中进行片段缓存 tbody employees each do employee cache employee do tr emp
  • Capybara 无法从 Stripe 中找到表单字段?

    我正在学习 Ruby on Rails 并且正在开发一个使用 stripe 创建高级帐户的应用程序 另外 我正在使用 Rspec 和 Capybara 进行集成测试 require spec helper feature user upgr
  • Rspec:测试救援

    尝试测试我的函数是否能够正确地从异常中解救 更改参数 文件名 然后重试一次 我可以让函数接收第一次尝试 但无法让它接收第二次尝试 控制器 begin video get video video id rescue matches video
  • 在 Rspec 中测试 STDOUT 输出

    我正在尝试为这个声明建立一个规范 使用 看跌期权 很容易 print file doesn t exist Create Empty File y n RSpec 3 0 RSpec 3 0添加了一个新的output matcher htt
  • 使用 RSpec 测试 rake 任务后清除数据库

    我正在尝试使用 rspec 测试我的 rake 任务 它运行良好 但问题是记录随后不会被删除 我已经把config use transactional fixtures true在配置文件中没有影响 在其他测试中它运行良好 这是我的代码 r
  • Capybara 无法填充 Stripe Checkout.js 字段

    我在使用 Capybara 测试 Stripe 的 Checkout js 产品时遇到了困难 问题是 Stripe 有一些棘手的客户端验证 欺骗了 Capybara 的 javascript 驱动程序 所以当我告诉 Capybara 填写一
  • Node.js 有水豚吗?

    有谁知道 Node js 是否有类似 capybara 的东西 怎么样Zombie http zombie labnotes org 僵尸 js 使用 Node js 进行极其快速的无头全栈测试 The Bite 如果你要编写一个速度极快的
  • 如何在服务调用后检查 rspec 中的数组更改?

    目标很简单 例如我们有一个数组 name ghost state rejected name donkey state rejected 运行服务调用后UpdateAllUsers 这会将所有用户更改为 accepted name ghos

随机推荐

  • VS Code:jupyter笔记本逐行运行

    最近 VSCode 进行了更新 之后我的 jupyter 笔记本界面发生了变化 这给我带来了很多问题 现在我不知道如何逐行运行单元格代码等 还有其他方法可以做到这一点吗 或者我怎样才能恢复到旧版本的笔记本电脑 打开命令面板 Windows
  • 从conftest.py访问测试文件名

    我正在尝试做什么 我正在使用 pytest 在 python 中编写一个小框架 作为拆卸的一部分 我正在截取屏幕截图 现在 我希望根据正在运行的测试来命名该屏幕截图 而不是 conftest py 例如 我现在的代码是 driver sav
  • 如何根据另一个字段中的值设置 SharePoint 列表字段中的默认值?

    我在 SharePoint 中有一个自定义列表 特别是 MOSS 2007 其中一个字段是标题为 有缺陷吗 的是 否复选框 另一个字段是 关闭者 指定关闭票证的人 如果没有缺陷 那么我希望票证自动关闭 如果有 则应稍后填写 关闭者 字段 我
  • Typescript :: 相关通用约束

    In React 我有一个像这样的通用界面 interface BaseProps
  • 解析 HTML 文本时的正则表达式与 XPath

    我想解析 HTML 文本并找到特殊部分 例如第 3 行中的文本div of 1st row和第二个column of a table 我有 2 个解析选项 正则表达式和 XPath 每一种的优点和缺点是什么 thanks 这在某种程度上取决
  • 获取运行脚本的父目录

    在 PHP 中 最简洁的方法是什么 parent当前运行脚本相对于 www 根目录的目录 假设我有 SERVER SCRIPT NAME relative path to script index php Or just something
  • 绝对位置是否使该元素成为包含块?

    在css2 1规范中 w3 org 有一个例子解释了包含块是如何形成的 p This is text em in the strong second strong paragraph em p 当位置em作为静态 strong的包含块是通过
  • 窗口大小更改时调整标题大小

    我目前正在开发一个网站 我需要在其中放置一些图像以及一些标题和描述 如果浏览器是全屏 则标题显示在一行上 但是 如果浏览器宽度减小 标题会自动显示为两行 这是浏览器全屏时的样子 这是当浏览器宽度减小时的样子 我想让它在浏览器宽度减小时减小标
  • 如何用C++模拟鼠标点击? [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我需要模拟单击应用程序窗口的鼠标单击 我正在使用 Windows 如何将鼠标左键单击发送到屏幕x y窗口所在的坐标 Use the 发送输入 功能 INPUT Inputs 3 0 I
  • 带 IdHTTP 的 POST 请求

    您好 我正在尝试使用组件 IdHTTP POST 方法填写表单 我的代码是这样的 var par2 TIdMultiPartFormDataStream rta string begin par2 TIdMultiPartFormDataS
  • GAE:此应用程序不允许 API 服务

    我正在尝试按照以下教程进行操作 http www youtube com watch v v9TG7OzsZqQ 我的 Cloud Endpoint REST API 在本地开发计算机上运行良好 但当我部署到 App Engine 时 我的
  • 调用另一个合约中的函数 - Solidity

    我需要使用 Truffle 调用另一个合约中的函数 这是我的合同样本 类别 sol contract Category notice Check if category exists function isCategoryExists ui
  • C# 按列按字母顺序对列表进行排序

    我定义了一个类 并将该类的记录写入列表中 在编写错误报告之前无法对列表进行排序 我试图在写入错误报告之前按 finderror 类型按字母顺序对列表进行排序 以便在错误报告中对列表进行排序并更有条理 这是课程 public class ty
  • 如何要求套接字等待更多数据到来

    我正在玩保留CLI项目 它是一个与统计环境 R 通信的 net 客户端 基本思想是通过 TCP 协议在此 NET 客户端和 R 会话之间发送数据 命令 我和其他人发现的一个错误是大数据主干 比如超过 10k 字节 无法成功传输 我在下面的代
  • C++11 中的可变长度结构非标准? [复制]

    这个问题在这里已经有答案了 可能的重复 struct hack 在技术上是未定义的行为吗 我检查了 C 11 中是否允许零长度数组 看来他们不是 从8 3 4 Arrays dcl array 如果存在常量表达式 5 19 则它应是整型常量
  • Android 5 ADB通知转储错误数据

    我构建了一个电脑程序 可以在您的桌面上运行 通知您有关通知 电量级别的信息 并让您与智能手机进行交互 整个 ADB 因此不需要手机上的应用程序 所有这一切都以一种时尚的方式进行 但这已经足够了 直到 Android 5 出现为止 通知转储
  • Bash 正则表达式在句子中查找特定单词

    我有一句话是这样的 The dog jumped over the moon because he likes jumping 我想找到所有匹配的单词jump i e jumped and jumping 我怎样才能做到这一点 目前我有一个
  • 从 Internet 读取 Inno Setup 加密密钥而不是密码框

    我希望设置从 HTTP 读取密码GET请求而不是直接来自用户 有什么方法可以绕过密码框并执行此操作吗 使用读取密钥WinHttpRequest对象 将其插入密码框并提交密码页面 Setup Password 123 Encryption y
  • 获取列值不为 NULL 的每个列计数

    我有一个表 表中有 5 列 我想要列值不为空的每一列的行数 column1 column2 column3 column4 column5 1 2 2 2 2 2 2 2 NULL 2 3 NULL 2 2 NULL NULL NULL 2
  • 如何使用 Capybara + Poltergeist 将文本设置到 Summernote 文本区域

    我有一个正在使用的文本区域夏日笔记我给它设置了 onChange 事件 我想用 RSpec Capybara Poltergeist 编写测试来确认 onChange 事件正常工作 据我检查 浏览器中显示的文本区域实际上是带有 note e