2016-09-28 4 views
0

ドラッグアンドドロップ操作をエラーなく実行しても、エレメントがAnjularJSアプリケーションでドラッグされているのを確認できませんでした。ドラッグ&ドロップアクションを実行できませんエラーなしでコードを実行しました

WebElement draggable = driver.findElement(By.xpath("//*[@id='page-content-wrapper']/div[2]/div[3]/div[4]/div/div[2]/div/div/div[2]/div/div[1]/ul/li/ul/li[2]/span/span[1]")); 
WebElement droppable = driver.findElement(By.xpath(".//*[@id='page-content-wrapper']/div[2]/div[3]/div[3]/div[2]/div[1]/div[1]/div/div[6]/div[2]/div[1]")); 
以下

エラーなしで実行され、実行の異なる方法です:

1) 
Actions builder = new Actions(driver); 
     builder.keyDown(Keys.CONTROL).click(draggable).click(droppable). keyUp(Keys.CONTROL).build().perform(); 

2)Method 2 
Actions builder = new Actions(driver); 
      builder.clickAndHold(draggable).moveToElement(droppable).build(); 
      builder.dragAndDrop(draggable, droppable).perform(); 

3)Method 3 
Actions action = new Actions(driver); 
      Thread.sleep(1000); 
      action.clickAndHold(draggable2).build().perform(); 
      action.moveToElement(droppable2).build().perform(); 
      action.release(droppable2).build().perform(); 

4) 
Method 4 
Actions actions = new Actions(driver); 
     browser.actions() 
     .mouseDown(draggable2) 
     .mouseMove(draggable2) 
     .mouseUp(droppable2) 
     .perform(); 

も行っJavaScriptメソッド:しかし、それはまた、エラーなしで実行していない運が、実行することができませんでし以下

コードですUIのドラッグ&ドロップアクション

A) public static void DragAndDropJS2(WebElement source, WebElement destination, WebDriver driver) throws Exception 
    { 
     // JavascriptExecutor js = (JavascriptExecutor) driver; 
     String xto=Integer.toString(source.getLocation().x); 
     String yto=Integer.toString(destination.getLocation().y); 
     ((JavascriptExecutor)driver).executeScript("function simulate(f,c,d,e){var b,a=null;for(b in eventMatchers)if(eventMatchers[b].test(c)){a=b;break}if(!a)return!1;document.createEvent?(b=document.createEvent(a),a==\"HTMLEvents\"?b.initEvent(c,!0,!0):b.initMouseEvent(c,!0,!0,document.defaultView,0,d,e,d,e,!1,!1,!1,!1,0,null),f.dispatchEvent(b)):(a=document.createEventObject(),a.detail=0,a.screenX=d,a.screenY=e,a.clientX=d,a.clientY=e,a.ctrlKey=!1,a.altKey=!1,a.shiftKey=!1,a.metaKey=!1,a.button=1,f.fireEvent(\"on\"+c,a));return!0} var eventMatchers={HTMLEvents:/^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/,MouseEvents:/^(?:click|dblclick|mouse(?:down|up|over|move|out))$/}; " + 
       "simulate(arguments[0],\"mousedown\",0,0); simulate(arguments[0],\"mousemove\",arguments[1],arguments[2]); simulate(arguments[0],\"mouseup\",arguments[1],arguments[2]); ", 
       source,xto,yto); 

    } 



    B) public static void DragAndDropJS(WebElement source, WebElement destination, WebDriver driver) throws Exception 
    { 
     JavascriptExecutor js = (JavascriptExecutor) driver; 
     js.executeScript("function createEvent(typeOfEvent) {\n" +"var event =document.createEvent(\"CustomEvent\");\n" +"event.initCustomEvent(typeOfEvent,true, true, null);\n" +"event.dataTransfer = {\n" +"data: {},\n" +"setData: function (key, value) {\n" +"this.data[key] = value;\n" +"},\n" +"getData: function (key) {\n" +"return this.data[key];\n" +"}\n" +"};\n" +"return event;\n" +"}\n" +"\n" +"function dispatchEvent(element, event,transferData) {\n" +"if (transferData !== undefined) {\n" +"event.dataTransfer = transferData;\n" +"}\n" +"if (element.dispatchEvent) {\n" + "element.dispatchEvent(event);\n" +"} else if (element.fireEvent) {\n" +"element.fireEvent(\"on\" + event.type, event);\n" +"}\n" +"}\n" +"\n" +"function simulateHTML5DragAndDrop(element, destination) {\n" +"var dragStartEvent =createEvent('dragstart');\n" +"dispatchEvent(element, dragStartEvent);\n" +"var dropEvent = createEvent('drop');\n" +"dispatchEvent(destination, dropEvent,dragStartEvent.dataTransfer);\n" +"var dragEndEvent = createEvent('dragend');\n" +"dispatchEvent(element, dragEndEvent,dropEvent.dataTransfer);\n" +"}\n" +"\n" +"var source = arguments[0];\n" +"var destination = arguments[1];\n" +"simulateHTML5DragAndDrop(source,destination);",source, destination); 
     Thread.sleep(1500); 

    } 



    c) public static void DragAndDropJS1(WebElement source, WebElement destination, WebDriver driver) throws Exception 
    { 
     JavascriptExecutor js = (JavascriptExecutor) driver; 
     js.executeScript("function createEvent(typeOfEvent) {\n" +"var event =document.createEvent(\"CustomEvent\");\n" +"event.initCustomEvent(typeOfEvent,true, true, null);\n" +"event.dataTransfer = {\n" +"data: {},\n" +"setData: function (key, value) {\n" +"this.data[key] = value;\n" +"},\n" +"getData: function (key) {\n" +"return this.data[key];\n" +"}\n" +"};\n" +"return event;\n" +"}\n" +"\n" +"function dispatchEvent(element, event,transferData) {\n" +"if (transferData !== undefined) {\n" +"event.dataTransfer = transferData;\n" +"}\n" +"if (element.dispatchEvent) {\n" + "element.dispatchEvent(event);\n" +"} else if (element.fireEvent) {\n" +"element.fireEvent(\"on\" + event.type, event);\n" +"}\n" +"}\n" +"\n" +"function simulateHTML5DragAndDrop(element, destination) {\n" +"var dragStartEvent =createEvent('dragstart');\n" +"dispatchEvent(element, dragStartEvent);\n" +"var dropEvent = createEvent('drop');\n" +"dispatchEvent(destination, dropEvent,dragStartEvent.dataTransfer);\n" +"}\n" +"\n" +"var source = arguments[0];\n" +"var destination = arguments[1];\n" +"simulateHTML5DragAndDrop(source,destination);",source, destination); 
     Thread.sleep(1500); 
    } 

上記のすべてのメソッドとコマンドは、エラーなくコンパイルされて実行されますが、UIでドラッグアンドドロップ操作を実行することはできません(PLEASE HELP)。

私が知っている可能性のあるすべての組み合わせを試してみてください。 今はChrome 53とFirefox 42を使用していますか? 私の要件を満たす他のツールはありますか?

答えて

0

ウェブページに表示される要素がHTML5 Web要素でないことを確認してください。セレンにはHTML5要素に対するアクションの実行がサポートされていないためです。

javacriptを使用してHTML5要素のドラッグアンドドロップ操作を実行する方法を知りたい場合は、http://elementalselenium.com/tips/39-drag-and-dropをご覧ください。

このスレッドはまた、あなたを助けるかもしれない - Error when trying to execute drag and drop using javascript for Selenium WebDriver test

+0

こんにちはSudharsan、それだけでセレンのどれもHTML5のWeb要素であると考えられるとした場合jQueryのメソッドを持つJavaスクリプトが応答し、情報のためのelements.Thanksには影響を受けませんNot Selenium Angular JSアプリケーション(特にドラッグアンドドロップアクション)で動作する他のツールはありますか? 誰でも私の要件に適したツールを教えてください。 –

+0

ドラッグアンドドロップ操作を実行できるSIKULIツール(イメージベースのIDを使用)を使用して問題を解決しました。 –

+0

スクリーンスクリーン=新しいスクリーン(); \t \tパターンClickDrag =新しいパターン( "C:¥¥Users¥¥sridharp¥¥Desktop¥¥Sridhar¥¥ExpStudio¥¥ClickDrag.JPG"); \t \tパターンClickDrop1 =新しいパターン( "C:¥¥Users¥¥sridharp¥¥Desktop¥¥Sridhar¥¥ExpStudio¥¥ClickDrop1.JPG"); screen.dragDrop(ClickDrag、ClickDrop1); –

関連する問題