4

目の前に次のシナリオがあります。

私は Selenium を使用してブラウザを駆動し、いくつかのフォームに入力していますが、これは非常にうまく機能しています。

今、私は指定されたWebフォームを介してファイルをアップロードしたいところです(処理方法を変更することはできず、Javascript/HTML/DOMのみを操作できます)。私が発見したように、セキュリティ上の理由から、フィールドをクリックすると、ファイル アップロード ウィンドウがすぐにポップアップします。また、通常の Javascript による操作もできません。こちらも一理ある…

しかし、Firefox アドオンがこれを実行できるはずであることがわかりました。私が答えに最も近いのは、このトピックに関する別のスタック オーバーフロー スレッドです。これが機能するようになったら、それは素晴らしいことです!:-) 残念ながら、私はまだ行っていません...

最小限の例:

<form method="post" url="http://www.example.com">
<input type="file" id="fileInput"/>
</form>

呼び出し時 (Firebug のコンソールから)

document.getElementById('fileInput').value = "C:\\image.png";

in get "エラー: 操作は安全ではありません。" これは私が期待するものです。

FirefoxアドオンのcontentScriptFileで同じものを呼び出すと(アドオンビルダーを使用して作成しています)、スクリプトはエラーなしで単に壊れます。そのための私の指標は、その行の前にアラートが表示されるが、その行の後には表示されないことです

問題は、なぜエラーが発生しないかということではなく、次のことです
。 1. 正しい方向に進んでいますか? これは機能するはずですか?
2. これを機能させるにはどうすればよいですか? 上記のリンクの「クロム権限」の言及が私に関連しているかどうかはわかりません。何らかの方法でスクリプトの権限を拡張する必要がありますか? もしそうなら、どのように?

ありがとうございました!
サンドロ

PS jQuery 経由で値を設定しようとすると、Firefox が完全にクラッシュしました。
PPS 現時点では、これは私の個人的なマシンでのみ動作するはずであり、クロスブラウザの問題または同様のものは関係ありません

4

1 に答える 1

2

私は今、うまくいく解決策を見つけました。問題の一部は、私が Selenium VBA ラッパーを使用していたことにあるようです。次に、簡単な Powershell スクリプトを使用して C# 実装で試してみたところ、見事に機能しました。

概要: 当初の目標: Selenium を使用して特定のフォームでファイルをアップロードする 解決策: タイプ 'file' の入力要素で SendKeys メソッドを使用して、ファイルへのフル パスを指定する Powershell のサンプル スクリプト:

add-type -path C:\path\To\the\dll\on\your\harddrive\webdriver.dll
$driver = New-Object OpenQA.Selenium.Firefox.FirefoxDriver
#the following page contains an element <input type='file' id='fileInput'/>
$driver.Url = "http://pathToTheSite.com/fileUploadFormPage.html"

$element = $driver.FindElementById("fileInput")

$element.SendKeys("C:\Image.png")

終わり!!!ファイルが添付され、フォームが一度に送信されます

于 2012-12-05T10:31:28.647 に答える