5

我使用Trix Editor在我的表单中添加 WISIWIG。我想用 RSpec 和 Capybara 进行测试,但 trix-editor 将字段隐藏了。

<div class="form-group">
  <trix-editor class="formatted_content form-control" placeholder="Description" input="annonce_ad_body_trix_input_annonce_ad"></trix-editor><input type="hidden" name="annonce_ad[body]" id="annonce_ad_body_trix_input_annonce_ad" />
</div>

我需要知道如何用 Capybara 填充这个隐藏字段以使我的测试通过。我尝试了这些尝试:

fill_in "annonce_ad[body]", with: "my value"
find(:css, 'trix-editor').set("New text")
find("trix-editor", visible: false).set("my value")
find(:xpath, "//input[@id='annonce_ad_body_trix_input_annonce_ad']", visible: false).set "my value"
find(:xpath, "//*[@id='annonce_ad_body_trix_input_annonce_ad']", visible: false).set("value")
first('input#annonce_ad_body_trix_input_annonce_ad.class', visible: false).set("your value")

这些都不适合我。有人知道在这种情况下我如何填充我的身体(用 trix)吗?

4

2 回答 2

15

使用 Capybara 处理非标准控件时的规则是模仿用户会做什么。在这种情况下,将单击可见字段(trix-editor 元素),然后键入所需的内容。您永远不应该尝试填充不可见的元素,事实上,visible在测试应用程序时应该很少(如果有的话)使用该选项(如果使用 Capybara 进行抓取,这很有意义)。所以在你的情况下应该是

find('trix-editor').click.set('New text')

没有点击它可能会工作,但更完全地复制用户并没有什么坏处。由于您已经说过与此非常相似的东西对您不起作用(但没有提供实际错误),我不得不假设您实际上并没有使用支持 JS 的驱动程序。由于trix是 JS 驱动的编辑器,因此您需要在测试时使用支持 JS 的驱动程序 - https://github.com/teamcapybara/capybara#drivers

以下基本 ruby​​ 片段显示 Capybara 在 trix-editor.org 上填充演示 trix 编辑器

require 'capybara/dsl'
require 'selenium-webdriver'

sess = Capybara::Session.new(:selenium_chrome, nil)
sess.visit('https://trix-editor.org/')
editor = sess.find('trix-editor')
editor.click.set('My test text')
editor.assert_text('My test text')
于 2017-08-30T16:07:23.680 回答
-1

我犯了一个错误,这对我有用。

find(:xpath, "//*[@id='annonce_ad_body_trix_input_annonce_ad']", visible: false).set("some value here")
于 2017-08-30T16:00:19.140 回答