0

要素のあるページがあります:

<div class="block-title-inside">
     <a href="javascript:void(0);" class="block-title-link fright" style="display:block; overflow: hidden; width: 105px;">Upload video <span class="blue-arrow-right"></span>
     <input type="file" name="file" id="videoUpload" class="dpt-mediafile-input-button" style="z-index: 999"></a>
Videos</div>

「添付」ボタンがないため、上記の「ビデオのアップロード」ボタンをクリックすると、アップロードするファイルを選択できるネイティブ OS ウィンドウが表示されます。

Selenium WD を使用してファイルをアップロードできず、次のような単純なコードが機能しません。

driver.findElement(By.id("videoUpload")).sendKeys("D://Other//sample_videos//barsandtone.FLV");
driver.findElement(By.id("videoUpload")).click();

問題は、サイトが jQuery アップロード スクリプトを使用していることにあるようです。関連するJSコードの部分は次のとおりです。

  1. http://www.speedyshare.com/DEXEQ/main.js (スクリプト自体はゲスト ユーザーには表示されません)
  2. 2 つのリンクを分けてください: __http://www.dailypreptalk.com/components/com_dpt/assets/file-upload/js/jquery.fileupload.js">http://www.dailypreptalk.com/components/com_dpt/assets /file-upload/js/vendor/jquery.ui.widget.js_ _ _http://www.dailypreptalk.com/components/com_dpt/assets/file-upload/js/jquery.fileupload.js

私はjsコードを実行しようとしました:

js.executeScript("document.getElementById('videoUpload').value = 'D://Other//sample_videos//barsandtone.FLV'");
js.executeScript("document.getElementById('videoUpload').click()");

しかし、まだ結果はありません。jQueryコードを使用してウィンドウを初期化しようとしましたが、チャンスもありませんでした:

js.executeScript("dpt.jQuery('#videoUpload').value = 'D://Other//sample_videos//barsandtone.FLV'");
js.executeScript("dpt.jQuery('#videosModal').modal('show');");

事前に入力されたファイル パスを使用して jQuery アップロード ウィジェットを初期化する方法がわかりません。

助けてくれてありがとう!

4

1 に答える 1

0

解決策は、ロボット機能を使用して見つかりました:

import java.awt.*;
import java.awt.event.KeyEvent;

元のコード + D:/1.avi へのファイルパス:

driver.findElement(By.id("videoUpload")).click();
  driver.getWindowHandle();
  //type path to your file using robot VK language
  try {
      Robot r = new Robot();
      r.keyPress(KeyEvent.VK_D); //D char
      r.keyPress(KeyEvent.VK_SHIFT); // colon char
      r.keyPress(KeyEvent.VK_SEMICOLON); // colon char
      r.keyRelease(KeyEvent.VK_SEMICOLON); // colon char 
      r.keyRelease(KeyEvent.VK_SHIFT); // colon char
      r.keyPress(KeyEvent.VK_BACK_SLASH); // backslash char etc
      r.keyPress(KeyEvent.VK_1);
      r.keyPress(KeyEvent.VK_PERIOD);
      r.keyPress(KeyEvent.VK_A);
      r.keyPress(KeyEvent.VK_V);
      r.keyPress(KeyEvent.VK_I);
      r.keyPress(KeyEvent.VK_ENTER);
  } catch (AWTException e) {
      e.printStackTrace();
  }
于 2013-09-30T22:10:52.593 に答える