2016-01-13 145 views
0

在我试图测试的网页上,我们实现了拖放文件上传。我已经查看了selenium action chain API的拖放API。它看起来像只支持在页面上的2个元素之间拖放。如何模拟从文件管理器拖动?selenium webdriver:通过拖放上传文件

+0

[AutoIt的](https://www.autoitscript.com/site/autoit/)具有窗口GUI交互,尝试在那里。 – Guy

+0

@guy谢谢,但我正在寻找基于硒的编程解决方案。 – lang2

回答

0

使用AWT Robot类执行拖放:

Robot robot=new Robot(); 
// drag 
robot.mouseMove(x1, y1); 
robot.mousePress(InputEvent.BUTTON1_MASK); 
// drop 
robot.mouseMove(x2, y2); 
robot.mouseRelease(InputEvent.BUTTON1_MASK); 
0

的AutoIt有DLL包装。我直接从C#/ Selenium代码使用它。

2

要使用硒执行HTML5文件降:

static final String JS_DROP_FILE = 
    "var tgt=arguments[0],e=document.createElement('input');e.type='" + 
    "file';e.addEventListener('change',function(event){var dataTrans" + 
    "fer={dropEffect:'',effectAllowed:'all',files:e.files,items:{},t" + 
    "ypes:[],setData:function(format,data){},getData:function(format" + 
    "){}};var emit=function(event,target){var evt=document.createEve" + 
    "nt('Event');evt.initEvent(event,true,false);evt.dataTransfer=da" + 
    "taTransfer;target.dispatchEvent(evt);};emit('dragenter',tgt);em" + 
    "it('dragover',tgt);emit('drop',tgt);document.body.removeChild(e" + 
    ");},false);document.body.appendChild(e);return e;"; 

WebDriver driver = new FirefoxDriver(); 
driver.get("http://html5demos.com/file-api"); 

WebElement drop_area = driver.findElement(By.id("holder")); 

JavascriptExecutor js = (JavascriptExecutor)driver; 
js.executeScript(JS_DROP_FILE, new Object[]{drop_area}) 
    .sendKeys("C:\\image.png"); 
+0

请问,您能告诉我们您的解决方案的来源是什么? –

+0

@Andrea Borgogelli Avveduti,我写了解决方案。看看这里的api:https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API –