簡體   English   中英

IE11無法自動拖放:Selenium WebDriver

[英]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 這可能是因為,我要從網格(劍道網格)中拖出一行,並且由於不可能從網格中拖出一行,因此我們的開發人員已經實現了這種方式,當您拖動行時,會創建一個新的動態元素,前進。

只是添加更多細節:

  1. 我已經嘗試過dragAndDrop()和其他Javacript選項。
  2. 我正在使用最新版本的Selenium和更新的IE。
  3. 我們的網格使用HTML5組件,我發現那里已經有幾個問題了(盡管不確定所有問題是什么),但是由於我的場景是在一個瀏覽器中工作的,所以我希望這不是這些問題之一。
  4. 我已經通過某種方式使使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM