14

画像を CQ5 コンポーネントにドラッグ アンド ドロップする必要があります。画像とコンポーネントは別のフレームにあります。

destinationターゲットのフレームがアクティブなときにwebelement が見つからなかったために機能しなかったコードを次に示します。

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

私はまた、次のようにアクション間でフレームを切り替えようとしました:

    Actions builder = new Actions(driver);
    Actions action = builder.clickAndHold(target);
    driver.switchTo().frame("newFrame"); //switching frames
    builder.moveToElement(destination);
    builder.release(destination);
    builder.build();
    action.perform();

これもうまくいきませんでした。次に、画像をオフセットで動かしてみました

new Actions(driver).dragAndDropBy(target,  x, y).perform(); // x and y 

これにより画像が移動しましたが、おそらくアクションが速すぎたため、コンポーネントはそれをキャプチャしませんでした。そのようなドラッグドロップを行う方法はありますか?

前もって感謝します。

4

11 に答える 11

6

2 つの部分に分割する必要があります。

// grab your element
Actions builder = new Actions(driver);
Actions action = builder.clickAndHold(target);
builder.build();
action.perform();

// switch to the frame (you havent told webdriver to un-grab
driver.switchTo().frame("newFrame"); //switching frames

// move and drop
Actions builder = new Actions(driver);
Actions action = builder.moveToElement(destination);
builder.release(destination);
builder.build();
action.perform();
于 2012-08-13T11:26:50.073 に答える
1

Adobe CQ 5.5 の解決策を見つけた人はいますか?

私はadobe CQ 5.5で同じ問題に直面しています.複数の異なる方法を試していました.画像をドロップゾーンに入れることができます. マウスポインターが画像で動いていないため、ドロップが意味をなさないことがわかりました。マウスをドロップ ゾーンに移動するコードを追加しましたが、コマンドが別々に動作しているように見えるため、まだドロップできません。何か提案をお願いします。

これが私のコードです(CQ 5.5では機能しません)

String handle = driver.getWindowHandle(); // for main window

// 画像を選択できるようにウィンドウに切り替えます

driver.switchTo().window(handle);
WebElement dragble = driver.findElement(By.xpath("//xpath"));

Actions builder = new Actions(driver);
builder.clickAndHold(dragble);
Action action2 = builder.build();
action2.perform();

// その後、iframe に切り替えます

driver.switchTo().frame("cq-cf-frame");
WebElement droppable = driver.findElement(By.cssSelector("#cssSelector of droppable"));

// マウスをドロップ可能ゾーンに向けるロボット

Point coordinates = driver.findElement(By.cssSelector("#cssSelector of droppable")).getLocation();
Robot robot = new Robot();

// ドロップ可能な要素の場所を見つける

int x = driver.findElement(By.cssSelector("#ext-comp-1271")).getLocation().getX();
int y = driver.findElement(By.cssSelector("#ext-comp-1271")).getLocation().getY();

// ドラッグブルをドロップ可能に移動

builder = new Actions(driver);
builder.moveByOffset(x,y).perform().
builder.build();
builder.release();
robot.mouseMove(coordinates.getX(),coordinates.getY()+120);
builder.release(droppable).perform();
于 2013-06-28T18:44:32.090 に答える
1

Selenium / webdriver のドラッグ アンド ドロップに問題があるようです。セレンの人々に欠陥を提出しましたhttp://code.google.com/p/selenium/issues/detail?id=4420

うまくいけば、ポジティブな反応が得られるでしょう。

于 2012-08-15T00:05:23.130 に答える
0
String source = "xpath_of_source";
String destination = "xpath_of_destination";

// grab your element
Actions builder = new Actions(driver);
Actions action = builder.clickAndHold(driver.findElement(By.xpath(source)));
builder.build();
action.perform();

// switch to the frame
driver.switchTo().frame("newFrame"); //switching frames

// move and drop
builder = new Actions(driver);
action = builder.moveToElement(driver.findElement(By.xpath(destination)));
builder.release(driver.findElement(By.xpath(destination)));
builder.build();
action.perform();
于 2012-11-27T08:09:40.527 に答える
0

iframe から別の iframe にドラッグ アンド ドロップするには、ソース Web 要素の iframe ですべてのアクションを参照する必要があります。これを行うには、ターゲット iframe の親を取得し、それを使用して操作する必要があります。つまり、ターゲット iframe を持つ div である CqFrameParent です。

ソースとターゲットは単一の iframe に属しているため、これを行うために iframe を切り替える必要はありません。 

builder.moveElement(CqFrameParent(), targetX, targetY).build().perform();
builder.release().build().perform();
于 2015-08-03T04:29:42.617 に答える
0

このコードは CQ 5.5 で動作します

driver.switchTo().defaultContent();

Actions builder = new Actions(driver);
builder.clickAndHold(target);
Action action = builder.build();
action.perform();

driver.switchTo().frame("cq-cf-frame");
builder.moveToElement(destination);
builder.release(destination);     
action = builder.build();
action.perform();
于 2012-12-18T09:22:55.167 に答える
-1

Selenium webdriver は、ドラッグ アンド ドロップ機能を提供しています。これを試して

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

(new Actions(driver)).dragAndDrop(element, target).perform(); 
于 2012-11-30T12:57:34.383 に答える