gpt4 book ai didi

java - htmlunit-driver - 如何模拟拖放?

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

有没有办法用htmlunit-driver模拟拖放?

当使用Actions时它抛出一个UnsupportedException

类内HtmlUnitMouse :

  @Override
public void mouseMove(Coordinates where, long xOffset, long yOffset) {
throw new UnsupportedOperationException("Moving to arbitrary X,Y coordinates not supported.");
}

我尝试这样做的尝试:

第一次尝试

(new Actions(driver)).dragAndDropBy(sliderHandle, 50, 0)
.build()
.perform();

第二次尝试

(new Actions(driver)).moveToElement(sliderHandle)
.clickAndHold()
.moveToElement(sliderHandle, 50, 0)
.release()
.build()
.perform();

有解决办法吗?

最佳答案

HtmlUnit是一个用于 Java 程序的无 GUI 浏览器,它可以为我们做很多事情,但不是所有事情。而且,正如您所注意到的,它不支持拖放等操作

new UnsupportedOperationException("Moving to arbitrary X,Y coordinates not supported.");

与其他 Selenium 驱动程序相反,例如 ,您的示例在其中应该可以正常工作。

但是,如果您仍然需要它来进行 headless Web 测试,可以使用 PhantomJS 选项。 。是的,它专注于 JS 测试,但是有一个很棒的项目叫做 Ghost Driver (PhantomJS 的简单 JS 中的 Webdriver Wire 协议(protocol)的实现)支持 Java 绑定(bind)和 Selenium API。

使用步骤非常简单:

  1. Install PhantomJS in your OS并将可执行文件正确添加到您的 PATH 环境变量中。
  2. 将 Maven 依赖项添加到您的 pom.xml(以及 Selenium 库:selenium-javaselenium-support):

    <dependency>
    <groupId>com.github.detro</groupId>
    <artifactId>phantomjsdriver</artifactId>
    <version>1.2.0</version>
    </dependency>
  3. 并调整您的代码以利用它:

    // Set this property, in order to specify path that PhantomJS executable will use
    System.setProperty("phantomjs.binary.path", System.getenv("PHANTOM_JS") + "/bin/phantomjs.exe");

    // New PhantomJS driver from ghostdriver
    WebDriver driver = new PhantomJSDriver();
    driver.get("https://jqueryui.com/resources/demos/draggable/default.html");

    // Find draggable element
    WebElement draggable = driver.findElement(By.id("draggable"));

    System.out.println("x: " + draggable.getLocation().x
    + ", y: " + draggable.getLocation().y);

    // Perform drag and drop
    (new Actions(driver)).dragAndDropBy(draggable, 50, 0)
    .build()
    .perform();

    System.out.println("x: " + draggable.getLocation().x
    + ", y: " + draggable.getLocation().y);
<小时/>

最终输出:

x: 8, y: 8
x: 58, y: 8

关于java - htmlunit-driver - 如何模拟拖放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41685388/

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