2015-01-02 23 views
6

przeciągnij i upuść selenem webdriver na Javaprzeciągnij i upuść selenem webdriver na Java

SRC -

<div class="dd"><img alt="World" src="test.png" style="margin-top: -5px;width:auto;height:16px;padding-right:5px;"><span>sample</span></div> 

docelowa: -

<div id="hierarchy"> 
<div class="dd" id="tree_nodes"> 
<ol class="dd-list" id="ancestor"> 

<li class="dd-item" ><div class="dd-handle"><img alt="testing" src="test2.png" ><a name="tree" style="margin:5px;">first page</a></div></li> 

<li class="dd-item" ><div class="dd-handle"><img alt="testing" src="test2.png" s><a name="tree" style="margin:5px;">second page</a></div></li> 

<li class="dd-item" ><div class="dd-handle"><img alt="testing" src="test2.png" ><a name="tree" style="margin:5px;">third page</a></div></li> 

<li class="dd-item" ><div class="dd-handle"><img alt="testing" src="test2.png" s><a name="tree" style="margin:5px;">fourth page</a></div></li> 

</ol> 
</div> 


</div> 

Am pomocą tego kodu, przeciągnij i drop: -

Actions builder = new Actions(driver); 

Action dragAndDrop = builder.clickAndHold(src).moveToElement(trgt).release(trgt).build(); 

dragAndDrop.perform(); 

Chcę przeciągnąć element src do elementu docelowego (wstaw jako znacznik li wewnątrz znacznika div div). W jaki sposób mogę wstawić jako pierwszy lub ostatni lub pośredni znacznik li wewnątrz ol div (target element).

Chcę utworzyć znacznik li (jak w li w elemencie docelowym), a następnie przeciągnąć element src do nowo utworzonego znacznika li wewnątrz ol (obecne w elemencie docelowym).

Jak utworzyć znacznik li w selen?

+0

Proszę obejrzeć poniższy film, aby uzyskać szczegółowe objaśnienie operacji Przeciągnij i upuść. https://www.youtube.com/watch?v=egdUfivmm-k – Uday

+0

@Uday zaktualizowałem moje pytanie. Prosimy odpowiedzieć. – karan

+0

@karan Przepraszam Właśnie znalazłem twoje pytanie. Jest już za późno, ale opublikowałem działający kod do przeciągania i upuszczania, gdzie domyślny mentod 'Actions -DragandDrop()' zawodzi. –

Odpowiedz

0

Zastosowanie

Actions builder = new Actions(driver); 

builder.dragAndDrop(src,trgt).build().perform(); 

Przed tym src należy sprawdzić i trgt są właściwie w stanie zidentyfikować obiekty.

Dzięki. Arun

0

Nie można tworzyć elementów przy użyciu selenu. Selen jest przeznaczony do testowania aplikacji internetowych, aby nie modyfikować kodu źródłowego.

Chociaż w drodze wyjątku można użyć javascript do zmodyfikowania źródła.

0

Oprogramowanie Webdriver jest przeznaczone do automatyzacji przeglądarki, a nie do zmiany kodu po stronie serwera lub HTML zwracanego przez serwer. Jeśli jednak chcesz tymczasowo zmienić kod HTML po stronie klienta, musisz zrobić to, co robią inni, i uruchomić JavaScript w przeglądarce.

można wykonać JavaScript z instancji WebDriver oddając go do JavascriptExecutor:

WebDriver driver; // Assigned elsewhere 
JavascriptExecutor js = (JavascriptExecutor) driver; 
js.executeScript("return document.title"); 

Następnie można użyć JavaScript do manipulowania DOM wewnątrz strony pokazywane w przeglądarce, czy instancja WebDriver obecnie jazdy .

I referrred poniżej linku: How to create a li tag dynamically using selenium webdriver on java

0

możesz użytkownik pętli do elementu drap z jednej pozycji do wielokrotnego pozycji.

public static void dragdrop(){ 
    WebElement slider = driver.findElement(By.id("dragdrop")); 
    int width=slider.getSize().getWidth(); // Width of SLider 
    Actions move = new Actions(driver); 
    move.moveToElement(slider, ((width*10)/100), 0).click(); // move to a specific point on the dragpoint 
    move.build().perform(); 
     System.out.println("Slider moved"); 
     } 

lub

// Przenoszenie elementu z jednej pozycji do drugiej pozycji.

public void dragdrop(){ 
    WebElement element = driver.findElement(By.name("source")); 

    WebElement target = driver.findElement(By.name("target")); 

    (new Actions(driver)).dragAndDrop(element, target).perform(); 

} 
0

To działa dla mnie ..

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

} 

I w obliczu problemów z selenem Operacje przeciągnij i upuść. Powyższy kod był rozwiązaniem dla mnie.