我正在尝试使用Java中的Selenium Web Driver在IE11中自动执行拖放功能。我在某种程度上能够在Chrome上实现它,但它不会发生在IE中。
在进一步解释之前,我是如何拖放的:
Actions builder = new Actions(driver);
builder.clickAndHold(sourceElement)
.moveToElement(targetElement)
.release(targetElement)
.build().perform();
在IE中:它不是拖放而是选择从源到目标元素的所有文本。我认为这可能是因为它拾取了错误的元素并尝试了一些相关的父元素和子元素,但是没有用。
在Chrome中:作品该死的。
在Firefox中:只需执行点击保留并拖动投掷element no longer attached to DOM exception
。这可能是因为,我正在从网格中拖动一行(kendo网格),因为从网格中拖动一行是不可能的,我们的开发人员已经实现了它,当你拖动一行时,会创建一个新的动态元素。继续前进。
只是添加更多细节:
dragAndDrop()
和其他Javacript选项。Robot
类了,但它太不可靠而且表现得很奇怪,我宁愿放弃而不是使用它。任何帮助将不胜感激!
答案 0 :(得分:1)
一个解决方案,如果HTML5拖放是使用一些javascript来模拟它。 这是一个将项目放到bin中的工作示例:
final String JS_DnD =
"var src=arguments[0],tgt=arguments[1];var dataTransfer={dropEffe" +
"ct:'',effectAllowed:'all',files:[],items:{},types:[],setData:fun" +
"ction(format,data){this.items[format]=data;this.types.append(for" +
"mat);},getData:function(format){return this.items[format];},clea" +
"rData:function(format){}};var emit=function(event,target){var ev" +
"t=document.createEvent('Event');evt.initEvent(event,true,false);" +
"evt.dataTransfer=dataTransfer;target.dispatchEvent(evt);};emit('" +
"dragstart',src);emit('dragenter',tgt);emit('dragover',tgt);emit(" +
"'drop',tgt);emit('dragend',src);";
WebDriver driver = new InternetExplorerDriver();
driver.get("http://html5demos.com/drag");
WebElement ele_source = driver.findElement(By.id("two"));
WebElement ele_target = driver.findElement(By.id("bin"));
// drag and drop item two into the bin
((JavascriptExecutor)driver).executeScript(JS_DnD, ele_source, ele_target);