2017-08-30 106 views
0

我使用Trix Editor在我的表单中使用WISIWIG。我想用RSpec和Capybara进行测试,但trix编辑器会隐藏该字段。Rails - 水豚,从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") 

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

回答

-1

我犯了一个错误,这个工作对我来说。

find(:xpath, "//*[@id='annonce_ad_body_trix_input_annonce_ad']", visible: false).set("some value here") 
+0

水豚填充在演示TRIX编辑这只不过是使用CSS ID选择(这是更清晰对于大多数人阅读)不同' find('#announce_ad_body_trix_input_announce_ad',visible:false).set(“这里有一些值)”。然而,由于它与一个不可见的元素交互,这意味着你的测试并没有真正测试任何东西,因为它正在做一些用户永远无法做到的事情。 –

+0

那么,他可以测试系统如果用户摆弄浏览器检查器时的行为,但使用控制器规格进行测试会更容易。我同意https://stackoverflow.com/a/45965124/299774 - 这是一个很好的答案。 – meta

2

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

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

能不点击可能工作,但它不会伤害到更多的完全复制的用户。既然你已经说过类似的东西不适合你(但没有提供实际的错误),我不得不假设你实际上没有使用JS驱动。由于trix是JS驱动的编辑器,因此在测试时需要使用支持JS的驱动程序 - https://github.com/teamcapybara/capybara#drivers

以下基本红宝石片段展示了在trix-editor.org

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') 
相关问题