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

Nei*_*eil 6 ruby selenium ruby-on-rails capybara selenium-webdriver

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

我找到了这篇文章:如何测试basecamp的旅行编辑器......这似乎很有希望.不幸的是它一直给我这个错误:

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

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

环顾四周之后,我遇到了这个Stackoverflow问题:是否可以与隐藏元素进行交互.

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

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

除此之外:

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

关于如何让Capybara填写编辑器的任何想法?对于它的价值:我正在使用rails 5.1.1chromedriver=2.29.461585

Tho*_*ole 7

简答:你不能使用硒

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

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

find(:css, 'trix-editor').set("New text") 
Run Code Online (Sandbox Code Playgroud)

可能会为你工作