[英]Selenium Drag-and-drop in IE11 using java script workaround in java
[英]Unable to Automate Drag and Drop for IE11 : 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
。 這可能是因為,我要從網格(劍道網格)中拖出一行,並且由於不可能從網格中拖出一行,因此我們的開發人員已經實現了這種方式,當您拖動行時,會創建一個新的動態元素,前進。
只是添加更多細節:
dragAndDrop()
和其他Javacript選項。 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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.