Capybara错误:Selenium :: WebDriver :: Error :: ElementNotVisibleError:元素不可见

时间:2017-06-08 18:43:01

标签: ruby-on-rails ruby selenium selenium-webdriver capybara

我在我的应用中使用Trix WYSIWYG editor。对于我的水豚测试:我想填写编辑器。

我发现文章:How to test basecamp's trip editor...似乎很有希望。不幸的是,它一直给我这个错误:

  

Selenium :: WebDriver :: Error :: ElementNotVisibleError:元素不可见

所以看来Capybara找到了元素ok,但它只是没有与它交互,因为Capybara必须有一些默认设置才能与隐藏/不可见元素交互。

环顾四周之后,我遇到了这个Stackoverflow问题:Is it possible to interact with hidden elements with capybara

从那篇文章:我已经尝试过这个:

def fill_in_trix_editor(id, value)
  Capybara.ignore_hidden_elements = false
  find(:xpath, "//*[@id='#{id}']").set(value)
  Capybara.ignore_hidden_elements = true
end

以及:

def fill_in_trix_editor(id, value)
  find(:xpath, "//*[@id='#{id}']", visible: false).set(value)
end

关于如何让Capybara填写编辑器的任何想法?值得一提的是:我使用rails 5.1.1chromedriver=2.29.461585

1 个答案:

答案 0 :(得分:7)

简短回答:你不能使用selenium

更长的答案:该错误是selenium阻止您与不可见元素交互,因为用户无法单击或向非可见元素发送密钥。

如果您真的想要更改隐藏元素的值,唯一的方法是通过execute_script使用JS,但很可能不会生成trix期待/使用的事件。一个更好的解决方案是弄清楚用户将与哪些可见元素进行交互并直接与它们进行交互。带有selenium的Capybara支持在可见的contenteditable元素上调用set,这是trix似乎正在使用的(以及自定义元素),所以像

find(:css, 'trix-editor').set("New text") 

可能适合你