2

Fluentlenium と DropZone.js ( http://www.dropzonejs.com/ ) を使用してファイルをアップロードするテストを作成しようとしています。Dropzone.js はモーダルで動作し、通常の方法でドラッグ アンド ドロップまたはアップロードできます。

クリックしてテストをアップロードするとすぐに、ブラウザーに表示されなくなったため、テストがクラッシュします。

次のようなものを使用して、これを Selenium で動作させる多くの投稿を見つけました。

WebElement fileInput = driver.findElement(By.xpath("//input[@type='file']"));
fileInput.sendKeys("C:/path/to/file.jpg");

ただし、DropZone.js を使用している場合、input type="file" でさえないため、sendKeys を何にも送信できません。

私が見ている唯一の入力タイプはすべてタイプ非表示です。

<input type="hidden" name="key" value="temp/${filename}">
<input type="hidden" name="AWSAccessKeyId" value="secret">
<input type="hidden" name="acl" value="private">
<input type="hidden" name="success_action_redirect" value="">
<input type="hidden" name="policy" value="secret=">
<input type="hidden" name="signature" value="secret">
<input type="hidden" name="Content-Type" value="application">

また、Amazon Web Server を使用してドキュメントをアップロードしています。以下のスクリプトですべてが機能しているようです。

<script id="hiddenKeyPairs" type="text/javascript">
  var hiddenKeyPairs = {
    key:  'temp/${filename}',
    AWSAccessKeyId: 'secret',
    acl: 'private',
    "success_action_redirect": '',
    policy: 'secret',
    signature: 'secret/secret',
    "Content-Type": 'application'
  };

  var formAction = 'https://secret.com/';

</script>

これは私のページにあります。

これについては、 https://github.com/FluentLenium/FluentLenium#driverで役立つものは何もありません。

上記のスクリプトのキー ハッシュにファイルを送信する必要がありますか?

何かご意見は?

4

1 に答える 1

0

AWSの部分についてはよくわかりませんが、ファイルのアップロード(SeleniumなどのDropzoneを介してプログラムでファイルをアップロード/追加する)といくつかの潜在的な解決策について同様の質問があります。それらはあまり堅牢ではないと思いますが、基本的には次のとおりです。

アプローチ 1 : Java ロボットを使用して GUI アクションをシミュレートする -

    // this opens the file browser window
    driver.findElement(By.id("uploadDropzone")).click();

    // put the file path in clipboard, paste (C-V) to the window, enter.
    StringSelection ss = new StringSelection("some file path");
    Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null);
    Robot robot = new Robot();
    Thread.sleep(2000);
    robot.keyPress(KeyEvent.VK_CONTROL);
    robot.keyPress(KeyEvent.VK_V);
    robot.keyRelease(KeyEvent.VK_V);
    robot.keyRelease(KeyEvent.VK_CONTROL);
    Thread.sleep(5000);    // need some wait for GUI action to work...
    robot.keyPress(KeyEvent.VK_ENTER);
    robot.keyRelease(KeyEvent.VK_ENTER)

アプローチ 2 : コードですべて実行します (ハッキー...) - はい、ファイル入力要素がありますが、Dropzone.js 自体でのみ定義されており、 で選択できます$(".dz-hidden-input")。ただし、それを可視にする必要もあります (Selenium は可視要素にのみ作用するため)。その後、それを呼び出すことができますsendKeys。その後、再び Javascript で、Fileその要素からオブジェクトを取得addFile(file)し、Dropzone オブジェクトに渡します。

于 2016-09-14T02:55:14.540 に答える