gpt4 book ai didi

java - 有没有办法将元素从一个框架拖放到另一个框架?

转载 作者:行者123 更新时间:2023-11-30 06:42:09 25 4
gpt4 key购买 nike

希望你一切顺利,

我正在尝试将一个元素从 FrameOne 拖放到 FrameTwo 但无法这样做。请帮助我理解这个概念以及我在这里做错了什么,并且需要仅使用 Actions 类来完成任务。

这是网址:

  1. https://www.w3schools.com/html/html5_draganddrop.asp

这里的元素位于一个 div block 中,我能够获取所有定位器并使用 Actions 类执行所有其他操作,但无法拖放该元素。

2。 https://codepen.io/rjsmer/full/vvewWp

在这里,我试图将元素从第一帧移动到第二帧,但我无法这样做。

我试过 drangAndDrop(),ClickAndHold() 方法,搜索了很多解决方案,同样看视频都没有成功。

package DragAndDropPracticeFrame;

import io.github.bonigarcia.wdm.WebDriverManager;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Action;
import org.openqa.selenium.interactions.Actions;

import static io.github.bonigarcia.wdm.DriverManagerType.CHROME;

public class DragDropFrame {
public static void main(String[] args) throws InterruptedException {
WebDriverManager.getInstance(CHROME).setup();
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get("https://codepen.io/rjsmer/full/vvewWp");
driver.switchTo().frame("result");
System.out.println("Inside First Frame.");
WebElement frameOne =
driver.findElement(By.cssSelector("iframe.dragFrame.dragDrop"));
driver.switchTo().frame(frameOne);
System.out.println("Inside Frame 3");
WebElement elementOne = driver.findElement(By.id("dragFrame-0"));
System.out.println("First element found: " + elementOne.getText());
Actions builder = new Actions(driver);
driver.switchTo().defaultContent();
System.out.println("Inside main page");
driver.switchTo().frame("result");
//System.out.println("Switched to Frame First");
WebElement frameThree =
driver.findElement(By.xpath("//iframe[@class='dropFrame dragDrop']"));
Action action =
builder.clickAndHold(elementOne)
.moveToElement(frameThree)
.release(frameThree).build();

//driver.switchTo().frame(frameTwo);
//System.out.println("Switched to frame 3");
action.perform();

//driver.switchTo().defaultContent();
//builder.perform();

}
}

另一个尝试:

    WebDriverManager.getInstance(CHROME).setup();
WebDriver driver = new ChromeDriver();
driver.get("https://codepen.io/rjsmer/full/vvewWp");
driver.switchTo().frame(0);
WebElement frameOne = driver.findElement(By.xpath("//iframe[@class='dragFrame dragDrop']"));
WebElement frameTwo = driver.findElement(By.xpath("//iframe[@class='dropFrame dragDrop']"));
driver.switchTo().frame(frameOne);
// identify element in first frame
WebElement elementOne = driver.findElement(By.id("dragFrame-0"));

// Use Actions class for tap and hold
Actions actions = new Actions(driver);
Actions action = actions.clickAndHold(elementOne);
actions.build();
action.perform();

// switch to the second frame
driver.switchTo().frame(frameTwo);

// move element to another frame
WebElement elementTwo = driver.findElement(By.xpath("//body[@class='frameBody dropFrameBody']"));
Actions actions2 = new Actions(driver);
Actions action2 = actions2.moveToElement(elementTwo);
actions2.release(elementOne);
actions2.build();
action2.perform();

预期:元素应该移动到第 3 帧实际:什么都没发生。

最佳答案

在多次使用 Actions 类之后,我了解到 Actions 类不能用于跨帧拖放元素。所以,我转而使用 Robot Class它奏效了!

//Setting up chrome driver
WebDriverManager.getInstance(CHROME).setup();
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();

//Redirecting to the website
driver.get("https://codepen.io/rjsmer/full/vvewWp");

Robot robot = new Robot();
robot.mouseMove(120, 300);
robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);

Thread.sleep(2000);
robot.mouseMove(500, 320);

Thread.sleep(2000);
robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);

这里的 hibernate 很重要,因为命令的执行速度很快,它有助于 Robot 类准确地执行命令。

根据你要拖动的dragFrame,可以使用各自的坐标。

关于java - 有没有办法将元素从一个框架拖放到另一个框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53981055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com