gpt4 book ai didi

java - Selenium /Java : can I separate a Drag and Drop action in two actions belonging to two separate classes?

转载 作者:行者123 更新时间:2023-11-30 06:18:56 29 4
gpt4 key购买 nike

我知道这是一件奇怪的事情,但现在我正在构建一个测试项目,并且我将正在测试的应用程序的几个区域/容器分开在不同的类中,如保持组织的措施。因此,如果我想将一个元素从区域 A 拖动到区域 B,我必须将 D&D 操作分成 2 个方法,每个方法属于不同的类。我尝试通过两种方式做到这一点:

方式一:

//Class A
public void dragThumbnail(int startPosition) {
Actions act = new Actions($(By.cssSelector("body")).getWrappedDriver());
act.clickAndHold(getThumbnailFromPosition(startPosition)).build().perform();
}
//Class B
public void dropInDivider(int endPosition) {
Actions act = new Actions($("body").getWrappedDriver());
act.moveToElement(getDividerFromPosition().get(endPosition)).release().perform();
}

方式2:

//Class A:
public void dragThumbnail(int startPosition) throws AWTException {
Robot robot = new Robot();
int x = (getThumbnailFromPosition(startPosition)).getLocation().getX();
int y = (getThumbnailFromPosition(startPosition)).getLocation().getY();
robot.mouseMove(x,y);
robot.mousePress(InputEvent.BUTTON1_MASK);
}
//Class B
public void dropInDivider(int endposition) throws AWTException {
Robot robot = new Robot();
int x = getDividerFromPosition().get(endposition-1).getLocation().getX();
int y = getDividerFromPosition().get(endposition-1).getLocation().getY();
robot.mouseMove(x, y);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
}

显然,它们都不起作用,否则我就不会在这里。我对 Selenium Java 还不太了解,我的代码有什么问题吗?或者这根本不可能/不可行,而我必须将所有内容都放在同一个类中?

我很感激我可能得到的每一个意见。

最佳答案

这可以使用 Mouse 类来实现,该类具有基于驱动程序的单例初始化。这意味着 WebDriver 的每个实例将返回相同的鼠标对象。

import java.util.HashMap;   
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.interactions.Actions;

public class Mouse {

private Actions actions;
private WebDriver driver;

protected Mouse(WebDriver driver) {
this.driver = driver;
actions = new Actions(driver);
}

private static HashMap<WebDriver, Mouse> mice = new HashMap<>();

public static Mouse getMouse(WebDriver driver) {
Mouse mouse = mice.get(driver);
if (mouse == null) {
mouse = new Mouse(driver);
mice.put(driver, mouse);
}
return mouse;
}

public void clearActions() {
actions = new Actions(driver);
}

public Actions addAction() {
return actions;
}

public void perform() {
actions.build().perform();
}
}

使用该鼠标对象在每个类中添加操作。请注意,我们不是在这里构建或执行操作。我们正在将操作添加到 Actions 类中。然后在执行流类中我们将按顺序执行操作。

public class A {
public void dragThumbnail(int startPosition) {
Mouse.getMouse(driver).addAction().clickAndHold(getThumbnailFromPosition(startPosition));
}
}

public class B {
public void dropInDivider(int endPosition) {
Mouse.getMouse(driver).addAction().moveToElement(getDividerFromPosition().get(endPosition));
}
}

然后调用下面的序列来让操作作为一个整体执行

public class Test {
public void executeTest() {
// Get the mouse
Mouse mouse = Mouse.getMouse(driver);
// Clear previous mouse operations saved (if any)
mouse.clearActions();
// Add the operation in class A
a.dragThumbnail(startPosition);
// Add the operation in class B
b.dropInDivider(endPosition);
// Perform the operation now
mouse.perform();
}
}

关于java - Selenium /Java : can I separate a Drag and Drop action in two actions belonging to two separate classes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48579409/

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