38

私はjavascript/java開発者であり、SeleniumWebdriver自動化フレームワークがファイルシステムからファイルをアップロードする方法を理解しようとしています。セキュリティ違反のため、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 まだどこでこれを行っているのかわかりません。

編集:私の質問は、セレンでこれを行う方法ではありませんが、セレン開発者はどのようにしてこれを可能にしましたか?彼らはどのようにしてjavascriptのセキュリティ制限を回避しましたか?彼らはどのようにファイルをアップロードしていますか?

4

6 に答える 6

20

いい質問仲間...彼らはJavascriptのセキュリティ制限を解決するためにHTTPプロキシを作成しました。このプロキシを使用することで、「同一生成元」ポリシーの制約の多くを回避することが可能になりました。この場合、ブラウザは、現在のページが提供されているサーバー以外への呼び出しをJavascriptに許可しません。

さらに、WebDriverは、OSレベルでイベントを発生させる代替アプローチを使用します。これらの「ネイティブイベント」はブラウザによって生成されないため、このアプローチは合成イベントに課せられたセキュリティ制限を回避します。また、OS固有であるため、特定のプラットフォームで1つのブラウザで動作すると、別のブラウザでコードを再利用するのは比較的簡単です。簡単。

上記のコンテンツのほとんどは、以下から参照されています。Seleniumの内部の詳細については、次のリファレンスをお読みください。

http://www.aosabook.org/en/selenium.html

于 2012-12-20T06:57:02.357 に答える
3

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();
于 2013-07-31T08:17:14.930 に答える
3

SeleniumWebdriverとAutoItを使用してFacebookに写真をアップロードしまし

手順は以下のとおりです

ステップ1

EclipseコードのUpto(写真のアップロード)は次のとおりです。

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:写真が正常にアップロードされます。

于 2013-09-03T12:05:35.903 に答える
0
  //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");

これを試して、私に知らせてください

于 2012-12-20T04:04:32.957 に答える
-1

場合によっては、特にJavaの場合、次のようにFileオブジェクトを作成し、absolutePath()をドライバーに渡す必要があります。

File file = new File(sampleFile);
driver.findElement(By.id("<Your input tag with type of File>")).sendKeys(file.getAbsolutePath());

サンプルファイルは、アップロードする必要のあるファイルを指す文字列です。これはFirefoxとChromeで機能します。

于 2013-03-04T18:52:50.727 に答える
-1

これは私がファイルのアップロードをするのを助けました、

コード:

 public class FileUpload {
        @Test
        public void test() {
            WebDriver driver = new FirefoxDriver();
            driver.get("http://www.freepdfconvert.com/pdf-word");
            driver.findElement(By.id("clientUpload")).click();
            driver.switchTo()
                    .activeElement()
                    .sendKeys(
                            "/home/likewise-open/GLOBAL/123/Documents/filename.txt");
            driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
            driver.findElement(By.id("convertButton"));
            /*
             * driver.switchTo().activeElement()
             * .sendKeys("selenium_2_testing_tools.pdf"); ;
             */
         {
                driver.wait(30000);
            } catch (Exception er) {
                System.out.println(er);
            }

        }
    }
于 2014-04-15T06:37:44.607 に答える