Wie automatisieren Sie die Drag & Drop-Funktionalität mit Selenium WebDriver
in Java?
Es gibt eine Seite, die erweiterte Benutzerinteraktionen dokumentiert. Das hat viele gute Beispiele, wie Sie eine Folge von Aktionen erzeugen können, Sie finden sie hier
// Configure the action
Actions builder = new Actions(driver);
builder.keyDown(Keys.CONTROL)
.click(someElement)
.click(someOtherElement)
.keyUp(Keys.CONTROL);
// Then get the action:
Action selectMultiple = builder.build();
// And execute it:
selectMultiple.perform();
oder
Actions builder = new Actions(driver);
Action dragAndDrop = builder.clickAndHold(someElement)
.moveToElement(otherElement)
.release(otherElement)
.build();
dragAndDrop.perform();
Selen hat eine ziemlich gute Dokumentation. Hier ist ein Link zu dem spezifischen Teil der API, nach dem Sie suchen.
WebElement element = driver.findElement(By.name("source"));
WebElement target = driver.findElement(By.name("target"));
(new Actions(driver)).dragAndDrop(element, target).perform();
Selen hat so viele Möglichkeiten, Drag & Drop durchzuführen.
In der Action-Klasse haben wir einige Methoden, die dieselbe Aufgabe ausführen.
Ich habe die mögliche Lösung aufgelistet, bitte schauen Sie.
http://learn-automation.com/drag-and-drop-in-Selenium-webdriver-using-actions-class/
Probier diese:
Actions builder = new Actions(fDriver);
builder.keyDown(Keys.CONTROL)
.click(element)
.dragAndDrop(element, elementDropped)
.keyUp(Keys.CONTROL);
Action selected = builder.build();
selected.perform();
Drag & Drop kann so implementiert werden ...
public ObjectPage filter(int lowerThreshold, int highThreshold) {
Actions action = new Actions(getWebDriver());
action.dragAndDropBy(findElement(".className .thumbMin"), lowerThreshold, 0).perform();
waitFor(elementIsNotDisplayed("#waiting_dialog"));
action.dragAndDropBy(findElement(".className .thumbMax"), highThreshold, 0).perform();
waitFor(elementIsNotDisplayed("#waiting_dialog"));
return this;
}
Hoffentlich hilft das!
eine weitere Möglichkeit ist, draganddrop()
so zu verwenden
WebElement element = driver.findElement(By.name("source"));
WebElement target = driver.findElement(By.name("target"));
(new Actions(driver)).dragAndDrop(element, target).perform();
Ich würde es in Perl mit Selenium :: Remote :: Driver so machen.
my $sel = <>; #Selenium handle
my $from_loc = <fromloc>;
my $to_loc = <toloc>;
my $from_element = $sel->find_element($from_loc);
my $to_element = $sel->find_element($to_loc);
# Move mouse to from element, drag and drop
$sel->mouse_move_to_location(element=>$from_element);
$sel->button_down(); # Holds the mouse button on the element
$sel->mouse_move_to_location(element=>$to); # Move mouse to the destination
$sel->button_up();
Das sollte es tun!
WebElement fromElement= driver.findElement(By.xpath("SourceElement"));
WebElement toElement=driver.findElement(By.xpath("TragetElement"));
Actions action = new Actions(WebDriver);
Action dragDrop = action.dragAndDrop(fromElement, toElement).build();
dragDrop.perform();
Versuchen Sie, den unten angegebenen Code zu implementieren
package com.kagrana;
import org.junit.Test;
import org.openqa.Selenium.By;
import org.openqa.Selenium.WebDriver;
import org.openqa.Selenium.WebElement;
import org.openqa.Selenium.firefox.FirefoxDriver;
import org.openqa.Selenium.interactions.Action;
import org.openqa.Selenium.interactions.Actions;
public class DragAndDrop {
@Test
public void test() throws InterruptedException{
WebDriver driver = new FirefoxDriver();
driver.get("http://dhtmlx.com/docs/products/dhtmlxTree/");
Thread.sleep(5000);
driver.findElement(By.cssSelector("#treebox1 > div > table > tbody > tr:nth-child(2) > td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(2) > table > tbody > tr:nth-child(3) > td:nth-child(2) > table > tbody > tr > td.standartTreeRow > span")).click();
WebElement elementToMove = driver.findElement(By.cssSelector("#treebox1 > div > table > tbody > tr:nth-child(2) > td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(2) > table > tbody > tr:nth-child(3) > td:nth-child(2) > table > tbody > tr > td.standartTreeRow > span"));
WebElement moveToElement = driver.findElement(By.cssSelector("#treebox1 > div > table > tbody > tr:nth-child(2) > td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(2) > table > tbody > tr:nth-child(1) > td.standartTreeRow > span"));
Actions dragAndDrop = new Actions(driver);
Action action = dragAndDrop.dragAndDrop(elementToMove, moveToElement).build();
action.perform();
}
}
Selen hat eine ziemlich gute Dokumentation. Hier ist ein Link zu dem bestimmten Teil der API, den Sie suchen:
WebElement element = driver.findElement(By.name("source"));
WebElement target = driver.findElement(By.name("target"));
(new Actions(driver)).dragAndDrop(element, target).perform();
Dies ist das Ziehen und Ablegen einer einzelnen Datei. So ziehen Sie mehrere Dateien und legen sie ab.
Für xpath
können Sie die obigen Befehle wie folgt verwenden:
WebElement element = driver.findElement(By.xpath("enter xpath of source element here"));
WebElement target = driver.findElement(By.xpath("enter xpath of target here"));
(new Actions(driver)).dragAndDrop(element, target).perform();
Ich habe den folgenden Code benutzt . Hier dragAndDrop (x, y) ist eine Methode der Action-Klasse. Dafür werden zwei Parameter (x, y), Quellposition und Zielposition benötigt
try {
System.out.println("Drag and Drom started :");
Thread.sleep(12000);
Actions actions = new Actions(webdriver);
WebElement srcElement = webdriver.findElement(By.xpath("source Xpath"));
WebElement targetElement = webdriver.findElement(By.xpath("Target Xpath"));
actions.dragAndDrop(srcElement, targetElement);
actions.build().perform();
System.out.println("Drag and Drom complated :");
} catch (Exception e) {
System.out.println(e.getMessage());
resultDetails.setFlag(true);
}
import com.thoughtworks.Selenium.Selenium;
import org.openqa.Selenium.firefox.FirefoxProfile;
import org.openqa.Selenium.firefox.FirefoxDriver;
import org.openqa.Selenium.WebDriver;
import org.openqa.Selenium.By;
//-------------------------------------------------------------------------
import org.openqa.Selenium.WebElement;
import org.openqa.Selenium.interactions.Actions;
import org.openqa.Selenium.interactions.Action; /*
Move only
@param o WebElement to move
@param d WebElement destination element
*/
m.drag={o,d->
def lo=o.location;
def ld=d.location;
int di=ld.y - lo.y;
int inc,lim
if (di<0)
{ inc=-1
lim=ld.y+d.size.height
}
else
{ inc=1
lim=ld.y
}
def fes={
int act=o.location.y;
println "act=${act} ${lim}";
if (inc > 0)
return !(act>lim)
else
return !(act<lim)
}
def b =new Actions(driver);
b.clickAndHold(o).perform();
while ( fes() ){
b.moveByOffset(0,inc);b.perform();sleep(20);
}
//
b.release(m.ori).perform();
}//drag