ruby-on-rails – Capybara,capybara-webkit和自定义文件上传表单

我已经使用以下html堆栈创建了自定义上传表单:
<form>
  <label></label>
  <input type="file">
</form>

文件字段通过CSS显示:none属性隐藏.所以当用户点击标签(这是自定义样式)时,文件附加对话框被用户调用.

在我的功能测试中,由于输入字段被隐藏,我无法附加文件.我已经尝试了几种可能的解决方案,但是他们都没有工作:

find(:xpath,'//input',visible: false).set(some_file_path)

要么

within('form') do                                                                                                                                                                       
  attach_file(:input,some_file_path,visible: false)                                                                                                                                          
end

还有很多人.所有的时候,我最终都以失败点击元素在未知位置错误.一旦我删除与输入字段重叠的标签,使其可见,并运行我的规格一切通行证.所以这里的问题是:

>输入文件字段显示:无属性(因此无法找到)
>有一个标签与隐藏的文件字段重叠(可能)

有没有办法使Capybara与Capybara-webkit驱动程序以一种理智的方式处理这种微妙的情况?

解决方法

使用capybara-webkit,您可以告诉驱动程序在页面的上下文中运行任何您想要的JavaScript,因此您可以编写一些自定义内容来隐藏可见性问题:
script = "$('thelabel').toggle(); " # hide the label
script << "$('myfield').toggle();"  # show your field

page.driver.browser.execute_script(script)

这是伪代码,但您应该可以做一些类似的操作,使该字段可见,然后再调用attach_file.

也就是说,每次(至少我至少)在我的测试中做了一些这样的事情,这是一个好主意,快点,问是否是测试或需要修复的界面.如果您对界面感到满意,您应该可以使用像上述那样的小型js代码段来获取元素,以便您的测试可见.

更新:

对这种行为的支持已经变得越来越广泛,现在已经在capybara标准化了,所以你可以:

page.execute_script(script)

这个较短的版本应该适用于capybara 2.x和最近版本的capybara-webkitpoltergeist,这是我现在使用的较低依赖性的替代方案.

还有一个合作伙伴的方法,evaluate_script:

result = page.evaluate_script('4 + 4');

希望这可以帮助!

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...