私はjavascript/Java開発者であり、Selenium Webdriverオートメーションフレームワークがファイルシステムからファイルをアップロードする方法を理解しようとしています。セキュリティ違反であるため、javascriptを介してファイル入力を設定することはできません。しかし、どういうわけかwebdriverは次のコマンドでこれを行うことができます:
driver.setFileDetector(new LocalFileDetector());
WebElement upload = driver.findElement(By.id("myfile"));
upload.sendKeys("/Users/sso/the/local/path/to/darkbulb.jpg");
driver.findElement(By.id("submit")).click();
それで、彼らはそれにキーを送ることによって値を設定していますか?わかりません。ここにあるソースコードを確認しました: http://code.google.com/p/Selenium/source/checkout まだできません彼らがこれを行う場所を見つけるために。
編集:私の質問は、Seleniumでこれを行う方法ではありませんが、Selenium開発者はどのようにしてこれを可能にしましたか? JavaScriptのセキュリティ制限をどのように回避しましたか?彼らはどのようにファイルをアップロードしていますか?
いい質問バディ...彼らはJavascriptのセキュリティ制限を解決するためにHTTPプロキシを書いた。このプロキシを使用すると、「同じホストオリジン」ポリシーの多くの制約を回避できます。このポリシーでは、現在のページが提供されているサーバー以外への呼び出しをブラウザがJavascriptに許可しません。
さらに、WebDriverはOSレベルでイベントを発生させる代替アプローチを使用します。これらの「ネイティブイベント」はブラウザによって生成されないため、このアプローチは合成イベントに設定されたセキュリティ制限を回避します。これらはOS固有であるため、特定のプラットフォームで1つのブラウザで動作すると、別のブラウザでコードを再利用するのは比較的です簡単です。
上記のコンテンツのほとんどは、以下から参照されています。Selenium内部の詳細については、以下の参照をお読みください。
Windownsファイルのアップロード関数のHTMLコードは次のとおりです。
<input id="fileField" type="file" onchange="document.getElementById('textfield').value=this.value" name="position">
<input type="submit" value="导入">
次のコードを使用して、Windowsファイルのアップロードを完了できます。正常に機能し、コードにはアップロードアクションのクリックは含まれません。
driver.FileDetector = new LocalFileDetector();
FindElement(By.Id("fileField")).SendKeys(@"C:\Users\admin\Desktop\ProfessionCodes.txt"); FindElement(By.CssSelector("input[type='submit']")).Click();
Selenium WebdriverとAutoItを使用してFacebookにアップロードした写真があります
手順は以下のとおりです
ステップ1
Eclipseコードでは、Upto(Upload a Photo)は以下のとおりです。
WebElement Upload = Firefox.findElement(By.cssSelector("input[id^='u_']"));
Upload.click();
ステップ2
AutoItをダウンロードしてインストールします。 http://www.autoitscript.com/site/autoit/downloads/ (Zipをダウンロード)
ステップ3
メモ帳で次のようにコードを記述し、PhotoUpload.au3
として保存します
WinWaitActive("File Upload")
Send("D:\Photo0116.jpg")
Send("{ENTER}")
ステップ4:この.au3ファイルを右クリックしてコンパイルします。
ステップ5:以下のようにスクリプトファイルにコードを追加します。
try {
String[] commands = new String[]{};
// Location of the autoit executable
commands = new String[] {"D:\\My softwares\\install software\\Selenium\\UploadPhoto3.exe"};
Runtime.getRuntime().exec(commands);
}
catch (IOException e) {}
ステップ6:スクリプトの実行(PhotoUpload.Java
)
ステップ7:写真が正常にアップロードされます。
//assuming driver is a healthy WebDriver instance
WebElement fileInput = driver.findElement(By.name("uploadfile"));
fileInput.sendKeys("C:/path/to/file.jpg");
または
driver.findElement(By.id("inputFile")).sendKeys("C:/path/to/file.jpg");
これを試して、私に知らせてください