上传文件selenium wd + jQuery

时间:2013-09-30 13:13:01

标签: javascript jquery-ui file-upload selenium

有包含元素的页面:

<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>

没有“附加”按钮,所以当点击上面显示的“上传视频”按钮时,用户可以看到本机操作系统窗口,可以选择要上传的文件。

我无法使用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. 两个链接,请分开:__ http://www.dailypreptalk.com/components/com_dpt/assets/file-upload/js/jquery.fileupload.js“&gt; 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
  3. 我试图运行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上传小部件。

    感谢您的帮助!

1 个答案:

答案 0 :(得分: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();
  }