JavaでSelenium WebDriver
を使用してドラッグアンドドロップ機能を自動化する方法は?
高度なユーザーインタラクションを文書化したページがあります。一連のアクションを生成する方法に関する多くの素晴らしい例があります ここで見つけることができます
// 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();
または
Actions builder = new Actions(driver);
Action dragAndDrop = builder.clickAndHold(someElement)
.moveToElement(otherElement)
.release(otherElement)
.build();
dragAndDrop.perform();
Seleniumには非常に優れたドキュメントがあります。 ここ は、探しているAPIの特定の部分へのリンクです。
WebElement element = driver.findElement(By.name("source"));
WebElement target = driver.findElement(By.name("target"));
(new Actions(driver)).dragAndDrop(element, target).perform();
Seleniumには、ドラッグアンドドロップを実行するための非常に多くのオプションがあります。
Actionクラスには、同じタスクを実行するメソッドがいくつかあります。
可能な解決策をリストしましたので、ご覧ください。
http://learn-automation.com/drag-and-drop-in-Selenium-webdriver-using-actions-class/
ドラッグアンドドロップは次のように実装できます...
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;
}
お役に立てば幸いです!
これを試してください:
Actions builder = new Actions(fDriver);
builder.keyDown(Keys.CONTROL)
.click(element)
.dragAndDrop(element, elementDropped)
.keyUp(Keys.CONTROL);
Action selected = builder.build();
selected.perform();
もう1つの方法は、draganddrop()
をこのように使用することです
WebElement element = driver.findElement(By.name("source"));
WebElement target = driver.findElement(By.name("target"));
(new Actions(driver)).dragAndDrop(element, target).perform();
Selenium :: Remote :: Driverを使用して、Perlでこのようにします。
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();
これでうまくいくはずです!
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();
以下のコードを実装してみてください
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();
}
}
Seleniumには非常に優れたドキュメントがあります。探しているAPIの特定の部分へのリンクは次のとおりです。
WebElement element = driver.findElement(By.name("source"));
WebElement target = driver.findElement(By.name("target"));
(new Actions(driver)).dragAndDrop(element, target).perform();
これは、単一のファイルをドラッグアンドドロップすること、複数のファイルをドラッグアンドドロップする方法です。
xpath
の場合、上記のコマンドを次のように使用できます。
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();
以下のコードを使用しました。ここでdragAndDrop(x、y)はActionクラスのメソッドです。それぞれ2つのパラメーター(x、y)、ソースの場所、およびターゲットの場所を取ります
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