Java 无法为IE11:Selenium WebDriver自动拖放

Java 无法为IE11:Selenium WebDriver自动拖放,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,我正在尝试使用Java中的SeleniumWeb驱动程序自动化IE11中的拖放功能。我能在Chrome上实现这一点,但在IE上却无法实现 在进一步解释之前,这里是我如何拖放的: Actions builder = new Actions(driver); builder.clickAndHold(sourceElement) .moveToElement(targetElement) .release(targetElement) .build().perform(); 在IE中:它选择

我正在尝试使用Java中的SeleniumWeb驱动程序自动化IE11中的拖放功能。我能在Chrome上实现这一点,但在IE上却无法实现

在进一步解释之前,这里是我如何拖放的:

Actions builder = new Actions(driver);
builder.clickAndHold(sourceElement)
 .moveToElement(targetElement)
 .release(targetElement)
 .build().perform();
在IE中:它选择从源元素到目标元素的所有文本,而不是拖放。我认为这可能是因为它拾取了错误的元素,并尝试了一些相关的父元素和子元素的操作,但没有成功

镀铬:非常光滑

在Firefox中:只需执行点击保持,并在拖动抛出时,
元素不再附加到DOM异常
。这可能是因为,我正在从网格(剑道网格)拖动一行,并且由于从网格拖动一行是不可能的,我们的开发人员已经实现了这样一种方式,即当您拖动一行时,将创建一个新的动态元素,该元素将继续移动

只需补充更多细节:

  • 我已经尝试了
    dragAndDrop()
    和其他JavaScript选项
  • 我正在使用最新版本的selenium和更新的IE
  • 我们的网格使用HTML5组件,我发现已经存在一些问题(不确定所有问题是什么),但由于我的场景在一个浏览器中工作,我希望这不是这些问题之一
  • 我用
    Robot
    类让它成为可能,但它太不可靠,行为怪异,我宁愿放弃也不愿使用它

  • 任何帮助都将不胜感激

    如果是HTML5拖放,一个解决方案是用一些javascript来模拟它。 下面是一个将项目放入垃圾箱的工作示例:

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

    如果是HTML5拖放,一个解决方案是用一些javascript来模拟它。 下面是一个将项目放入垃圾箱的工作示例:

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

    嗨,弗洛伦特,谢谢你的回答。如前所述,我已经尝试过javascript选项。同样的问题,适用于我的应用程序的chrome,但不适用于IE。这个例子适用于IE11,所以您的DnD实现可能不符合HTML5。在这里找到解决方案的最好方法是分析页面。我没有说你的例子不起作用。该示例适用于您所指的站点,但不适用于我的应用程序。问题是别的。这里的区别在于,拖动时会创建一个新元素(如问题中所述)。我在问题中添加的细节不是基于假设,我在发布问题之前已经确认了相关细节。没关系,谢谢你花时间来帮助我,如果你认为我可能遗漏了什么,请告诉我。你是否尝试在新元素创建后发送删除事件?如果没有可复制的示例,则无法执行。你能用小提琴创作一首吗?嗨,弗洛伦特,谢谢你的回答。如前所述,我已经尝试过javascript选项。同样的问题,适用于我的应用程序的chrome,但不适用于IE。这个例子适用于IE11,所以您的DnD实现可能不符合HTML5。在这里找到解决方案的最好方法是分析页面。我没有说你的例子不起作用。该示例适用于您所指的站点,但不适用于我的应用程序。问题是别的。这里的区别在于,拖动时会创建一个新元素(如问题中所述)。我在问题中添加的细节不是基于假设,我在发布问题之前已经确认了相关细节。没关系,谢谢你花时间来帮助我,如果你认为我可能遗漏了什么,请告诉我。你是否尝试在新元素创建后发送删除事件?如果没有可复制的示例,则无法执行。你能在小提琴上创造一个吗?我面临着同样的问题。你找到解决这个问题的办法了吗?你能告诉我你是如何使用机器人课程的吗?我面临着同样的问题。你找到解决这个问题的办法了吗?你能告诉我你是如何使用机器人课程的吗?