簡體   English   中英

使用Capybara / Selenium Webdriver測試HTML5文件上傳-Ruby

[英]Testing HTML5 File Upload with Capybara/Selenium Webdriver - Ruby

我有一個簡單的模態,其中向用戶顯示瀏覽按鈕以添加要上傳的文件。 由於一個未知的問題,實際上是它的HTML5文件輸入,因此瀏覽器為其添加了自己的功能,這已經成為測試的難題。

在我的頁面上,我有:

       <input type="file" id="photo_upload">

Capybara提供了一個開箱即用的解決方案:

       attach_file <<upload_file_id>>, <<file_path>>

這在后台執行send_keys命令以將file_path推送到用於此輸入的路徑容器中,但是這對於我的設置根本不起作用。 我在Windows 8上運行Firefox 25.0.1。我嘗試了此文件的相對路徑和完整路徑,並使用正斜杠和反斜杠組合。

當我說它不起作用時,我的意思是當我的ajax腳本通過單擊旁邊的“上傳”按鈕執行時,它不會在params中發送任何文件對象。

我什至嘗試使用capybara直接發送文件路徑:

       find_field(<<upload_file_id>>).native.send_keys(<<file_path>>)

接下來,嘗試使用硒將硒推入使用:

       element = driver.find_element(:id, <<upload_file_id>>)
       element.send_keys <<file_path>>

然后,我嘗試執行腳本以確保該元素可見,然后進行設置:

      element = page.execute_script(
          "document.getElementById('#{<<upload_file_id>>}').style.visibility = 'visible';                  
           document.getElementById('#{<<upload_file_id>>}').style.height = '20px'; 
           document.getElementById('#{<<upload_file_id>>}').style.width = '60px';  
           document.getElementById('#{<<upload_file_id>>}').style.opacity = 1; return 
           document.getElementById('#{<<upload_file_id>>}')")
     find_field(field_locator).native.send_keys(<<file_path>>)

這也不起作用。 現在我完全被困住了。 這里和google上的所有幫助都指向使用上面的方法,但這對我的設置完全不起作用。

據我所知,我的選擇是使用Windows自動化腳本並跳出capybara,運行該腳本,然后繼續,或者直接使用信息從capybara調用上傳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(<<upload_file_id>>).click
system("<<full_path>>\\file_upload.exe \"#{<<file_path>>}\" \"File Upload\"")

而且效果很好! 實際上,我認為我更喜歡這樣的事實,即它完全模仿用戶的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM