Rails项目,使用水豚测试隐藏字段:Selenium :: WebDriver :: Error :: ElementNotVisibleError:元素不可见

时间:2018-08-13 07:30:39

标签: capybara

(其他stackoverflow答案均未回答我的问题)

我有一个带有hidden_​​field_tag的表单:

<form action="/score" method="post">
  <%= hidden_field_tag :authenticity_token, form_authenticity_token %>
  <%= hidden_field_tag :letters, @letters, id: "idgrid" %>
  <input type="text" name="word" placeholder="type world">
  <input type="submit" value="send">
</form>

我想对水豚进行测试(最小)

需要“ application_system_test_case”

class GamesTest < ApplicationSystemTestCase
  test "word in the grid but not english" do
    visit new_url
    fill_in "word", with: "car"
    find('#idgrid', visible: false).set("N e w t e x t")
    click_on "send"

    assert_text "Sorry, can't build from grid"
  end
end

我收到以下错误消息

Error:
GamesTest#test_word_in_the_grid_but_not_english:
Selenium::WebDriver::Error::ElementNotVisibleError: element not visible
  (Session info: headless chrome=68.0.3440.106)
  (Driver info: chromedriver=2.41.578706 (5f725d1b4f0a4acbf5259df887244095596231db),platform=Mac OS X 10.13.6 x86_64)
    test/system/games_test.rb:22:in `block in <class:GamesTest>'

我已经阅读了与该主题相关的其他stackoverflow问题,但找不到正确的答案。还有github问题。我知道该元素不可见,但是我已经阅读到如果我使用visible,则水豚可以设置该值:false。

有人可以帮我吗?

谢谢

1 个答案:

答案 0 :(得分:0)

使用Capybara,您可以查找和检查不可见的元素,但是由于普通用户不能直接设置它们的值,因此不能直接设置它们的值,因此直接在feature /中更改它们实际上没有多大意义。系统测试。如果您确实需要更改隐藏字段的值,则需要通过JS使用

find('#idgrid', visible: false).execute_script("this.value = "N e w t e x t")

由于这不会复制用户通常会执行的行为,因此在功能/系统测试中通常认为这是不好的做法,您确实应该考虑是否有更好的方法来设置那些实际复制用户的字段值(或者是否作为另一种类型的测试更有意义。