使用Capybara / Selenium Webdriver测试HTML5文件上传 – Ruby
我有一个简单的模态,其中显示用户显示浏览按钮以添加要上载的文件。 由于一个未知的问题,因此它是一个HTML5文件输入因此浏览器添加自己的function,这已成为一个痛苦的测试。
在我的页面上,我有:
Capybara提供开箱即用的解决方案:
attach_file <>, <>
在幕后执行send_keys命令将file_path推送到此输入的路径容器中,但是这对我的设置无效。 我在Windows 8上运行Firefox 25.0.1。我尝试了相对路径和该文件的完整路径,包括前向和反斜杠组合。
当我的意思是它不起作用时,我的意思是当我的ajax脚本通过点击旁边的“上传”按钮执行时,它不会在参数中发送任何文件对象。
我甚至尝试使用capybara直接发送文件路径:
find_field(<>).native.send_keys(<>)
接下来,是尝试使用selenium将其推入使用:
element = driver.find_element(:id, <>) element.send_keys <>
然后我尝试执行脚本以确保元素可见,然后设置它:
element = page.execute_script( "document.getElementById('#{<>}').style.visibility = 'visible'; document.getElementById('#{<>}').style.height = '20px'; document.getElementById('#{<>}').style.width = '60px'; document.getElementById('#{<>}').style.opacity = 1; return document.getElementById('#{<>}')") find_field(field_locator).native.send_keys(<>)
这也不起作用。 现在我完全卡住了。 所有这里的帮助和谷歌指向使用上述,但它只是不适用于我的设置。
我可以看到我的选择是使用Windows自动化脚本并跳出水豚,运行脚本,然后继续,或者直接从capybara使用post调用上传URL或调用当前的js ajax可以。
所以我已经解决了它,它并不太难看。 我通过AutoIT使用了自动化路线。 你用AutoIT下载的软件包包括一个脚本到exe转换器并使用下面的脚本(我不能相信脚本)我创建了一个exe:
Local Const $dialogTitle = $CmdLine[2] Local Const $timeout = 5 Local $windowFound = WinWait($dialogTitle, "", $timeout) $windowFound = WinWait($dialogTitle, "", $timeout) Local $windowHandle If $windowFound Then $windowHandle = WinGetHandle("[LAST]") WinActivate($windowHandle) ControlSetText($windowHandle, "", "[CLASS:Edit; INSTANCE:1]", $CmdLine[1]) ControlClick($windowHandle, "", "[CLASS:Button; TEXT:&Open]") Else MsgBox(0, "", "Could not find window.") Exit 1 EndIf
在我的水豚脚本中,我只是运行:
find_field(<>).click system("<>\\file_upload.exe \"#{<>}\" \"File Upload\"")
它完美无缺! 事实上,我认为我更喜欢它完全模仿用户将要做的事情。
- 使用Capybara / Rspec使用will_paginate Gem测试视图
- Capybara-webkit引发了Capybara :: Driver :: Webkit :: WebkitInvalidResponseError
- 是否可以在Heroku Cedar上运行capybara-webkit(即forked webkit_server)?
- Capybara NoMethodError:未定义的方法`visit’for
- 在何处/如何包含用于水豚集成测试的辅助方法
- 为什么我不能从Rspec测试中访问Rails的URL助手?
- 如何在Rails 5.1中运行无头浏览器系统测试?
- NoMethodError:在rails控制台中运行capybara测试时未定义的方法`color_enabled =’
- 不区分大小写的Rspec匹配