我使用Trix Editor在表单中包含WISIWIG。我想用RSpec和Capybara进行测试,但是trix编辑器将该字段隐藏了。

<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>

我需要知道如何用水豚填充此隐藏字段以使我的测试通过。我尝试了这些尝试:
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")

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

最佳答案

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

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

无需单击即可运行,但更充分地复制用户也无害。既然您已经说过与之非常相似的选项对您不起作用(但未提供实际错误),所以我不得不假设您实际上并未在使用具有JS功能的驱动程序。由于trix是JS驱动的编辑器,因此在测试https://github.com/teamcapybara/capybara#drivers时需要使用具有JS功能的驱动程序。

以下基本的红宝石代码段显示了水豚在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')

10-07 17:20