加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 19:36:59 所属栏目:百科 来源:网络整理
导读:我已经使用以下html堆栈创建了自定义上传表单: form label/label input type="file"/form 文件字段通过CSS显示:none属性隐藏.所以当用户点击标签(这是自定义样式)时,文件附加对话框被用户调用. 在我的功能测试中,由于输入字段被隐藏,我无法附加文件.我已经
我已经使用以下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-webkit或poltergeist,这是我现在使用的较低依赖性的替代方案.

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

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

希望这可以帮助!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读