我使用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)?
答案 0 :(得分:9)
使用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')
答案 1 :(得分:-1)
我犯了一个错误,这对我有用。
find(:xpath, "//*[@id='annonce_ad_body_trix_input_annonce_ad']", visible: false).set("some value here")