1

WATIR を使用してファイルのアップロードを自動化しようとしています。私はウェブサイトのコードを管理しておらず、javascript が難読化されているため、理解するのにイライラしていました。

file_field を設定しようとしましたが、サイトは JavaScript を使用して投稿を行っており、送信をトリガーできません。私の最善の最善は、ユーザーを模倣することです。

ドラッグ アンド ドロップ インターフェイスがあり、クリックすると標準の OSX ファイル選択ダイアログが開きます。このファイル選択ダイアログを WATIR から制御する方法がわかりません。IE には、これを可能にする window_helper というライブラリがあるようです。

watir と IE でファイルをアップロードするには?

Chromeではわかりません。

4

5 に答える 5

3

OSX でファイル アップロード フィールドを操作するために私が見つけた最も信頼できる方法は、次を使用することです。

$browser.file_field(:id, //).set("filepath\/...\/file.png")

残念ながら、ファイルを選択するだけで、ダイアログは閉じません。

ただし、Željko が言うように、ページがどのように見えるか、またはコードが何を行っているかについての参照ポイントがなければ、助けることは困難です。

于 2013-03-01T23:13:19.683 に答える
2

これは古い質問であることは知っていますが、最近、職場で自動化されたスイートの OSX で FileUpload シートを処理する必要があったので、これを人々のリソースとして投稿すると思いました。前述のような特定の目的で実際に Sikuli を使用していますが、視覚的な認識が必要なため、最後の手段として使用するようにしています。(ただし、かなりうまく機能することに同意します)

代わりに、いくつかの Applescript ハンドラを使用しました。私たちのニーズはポスターのニーズとは異なるため、通常、これらは以下のような同じスクリプトには含まれていません。コードを取得したい人の便宜のために、それらをスクリプトに入れただけです。ファイル アップロード シートを呼び出すツールを使用して、ターミナルから次のようにコードを実行します。

osascript /Path/To/The/Saved/Script.scpt /Path/To/MyUploadFile.txt Firefox を開く

ご覧のとおり、3 つのパラメーターが必要です。アップロードするファイルへのパス、ブラウザの名前、およびファイル アップロード シートでクリックするボタン。もちろん、必要に応じてこれらの値をハードコーディングすることもできます。実際、ときどき [キャンセル] をクリックする必要があったため、そのようになりました。

on run argv
if count of argv is not equal to 3 then
    log "You must pass 3 arguments to this script. The path to the file to upload, the browser name and finally the button to click."
    quit
end if

set theFileToUploadPath to item 1 of argv
set theBrowserName to item 2 of argv
set theButtonToClick to item 3 of argv 

goToFolder(theFileToUploadPath)
delay 1
clickFileUploadButton(theBrowserName, theButtonToClick)
end run

on goToFolder(folderPath)
tell application "System Events"
    keystroke "g" using {command down, shift down}
    delay 1
    keystroke folderPath
    delay 1
    key code 76
end tell
end goToFolder

on clickFileUploadButton(browserName, buttonToClick)
tell application "System Events"

    try
        tell process browserName
            activate
            if buttonToClick is equal to "Cancel" then
                click button "Cancel" of window "File Upload"
            else if buttonToClick is equal to "Open" then
                click button "Open" of window "File Upload"
            else
                log "Incorrect button passed to handler"
            end if
        end tell
    on error
        log "Unable to close File Upload window for browser: " & browserName
    end try

end tell
end clickFileUploadButton 

これがいつか誰かに役立つことを願っています。

于 2013-12-18T18:47:48.833 に答える
0

潜在的にフィールドにデータが入力された後、onChange のようなイベントが発生するのを待っているクライアント側のコードが存在する可能性があります。ファイル名の設定を変更した後、コントロールでイベントを発生させてみなければならない場合があります。

于 2013-03-08T06:10:21.707 に答える
0

RAutomation を使用してそれを行うことができます。これにより、デフォルトのファイル選択ダイアログにアクセスできます。

例:

window = RAutomation::Window.new :title => windowTitle
window.text_field(:class =>"Edit").set(file_name)
window.button(:value => "&Open").click
于 2013-03-04T13:22:15.460 に答える