是否可以与水豚的隐藏元素进行交互?

mig*_*mba 42 attachment capybara

我有一个文件字段,它有opacity: 0一个假的按钮.它是一种常见的css技术,用于伪造一种在不同浏览器中一致显示的"上传按钮".

Capybara不允许我打电话attach_file给那个输入.错误是Selenium::WebDriver::Error::ElementNotVisibleError: Element is not currently visible and so may not be interacted with.

有谁知道强迫水豚与隐形元素互动的方法吗?

答案仍然没有答案,但我找到了解决方法.没有什么是智能的,只需用简单的脚本使元素可见即可

  page.execute_script %Q{
    $('#photos').css({opacity: 1, transform: 'none'});
  }
Run Code Online (Sandbox Code Playgroud)

我发布它作为记录.

Vij*_*han 72

您可以使用visible: falseCapybara中的属性与隐藏元素进行交互.

如果要单击隐藏元素使用:

find("#photos", visible: false).click
Run Code Online (Sandbox Code Playgroud)

不要click_button('#photo')直接使用

  • 不工作,带消息不能点击隐藏元素 (3认同)
  • 仍然给这里 (2认同)

use*_*833 19

Capybara的作者建议Capybara.ignore_hidden_elements在需要查看隐形元素之前立即进行设置,然后重置它:

Capybara.ignore_hidden_elements = false
click_button 'my invisible button'
Capybara.ignore_hidden_elements = true
Run Code Online (Sandbox Code Playgroud)

  • 当您阅读它时,他只建议将其作为特定问题的解决方法.一般来说,这不是一个好的解决方案,因为特定的测试不应该像这样改变全局选项.见http://makandracards.com/makandra/7617-change-how-capybara-sees-or-ignores-hidden-elements (3认同)

Tho*_*ole 6

通常,在使用Capybara时,与不可见元素进行交互是不可能的(您可以使用visible: false/hidden大多数查找器中的选项找到它们,但实际上并未对其执行任何操作)。但是,文件输入是一种特殊情况,因为隐藏元素非常普遍,并且由于安全限制,没有其他方法可以通过与页面可见元素进行交互来实际添加文件。因此,attach_file有一个make_visible选项可用于使Capybara使该元素可见,附加该文件,然后将CSS重置为原始设置。

attach_file('photos', file_path, make_visible: true)
Run Code Online (Sandbox Code Playgroud)