无法自动拖放IE11:Selenium WebDriver

时间:2016-03-29 08:59:52

标签: java selenium selenium-webdriver

我正在尝试使用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网格),因为从网格中拖动一行是不可能的,我们的开发人员已经实现了它,当你拖动一行时,会创建一个新的动态元素。继续前进。

只是添加更多细节:

  1. 我已经尝试了dragAndDrop()和其他Javacript选项。
  2. 我正在使用最新版本的selenium并更新了IE。
  3. 我们的网格使用HTML5组件,我发现已经存在一些问题(虽然不确定所有问题),但是由于我的场景在一个浏览器中工作,我希望这不是其中一个问题。
  4. 我已经以某种方式使用Robot类了,但它太不可靠而且表现得很奇怪,我宁愿放弃而不是使用它。
  5. 任何帮助将不胜感激!

1 个答案:

答案 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);