ruby-on-rails - capybara 错误:Selenium::WebDriver::Error::ElementNotVisibleError:元素不可见

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

我正在使用 Trix WYSIWYG editor在我的应用程序中。对于我的 capybara 测试:我要填写编辑器。

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

Selenium::WebDriver::Error::ElementNotVisibleError: element not visible

所以看起来 Capybara 发现元素没问题,但它只是没有与之交互,因为 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 填写编辑器吗?对于它的值(value):我正在使用 rails 5.1.1chromedriver=2.29.461585

最佳答案

简短回答:你不能使用 Selenium

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

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

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

可能对你有用

关于ruby-on-rails - capybara 错误:Selenium::WebDriver::Error::ElementNotVisibleError:元素不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44443352/

相关文章:

javascript - 在 Ruby on Rails 中,如何自动更新并显示 View 中的变量?

ruby-on-rails - ruby 中尴尬的三元评估

jquery - 如何使用 Mouseenter 事件渲染 Rails Partial

ruby - 在 Ruby 代码块中获取值而不是最后一条语句

Python 请求仅提取一半的预期标签

ruby-on-rails - 在 Minitest 中测试更新操作

ruby-on-rails - 在Rails中,是什么导致显示来自app/views/application/的 'not_found.html' View ?

ruby-on-rails - 深层嵌套资源 rails

python - 构建函数以清除字段和 send_keys

c# - 如何编写等待 selenium webElement 的通用方法