有没有办法用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();
有解决方法吗?
答案 0 :(得分:1)
HtmlUnit是一个 GUI-Less浏览器,适用于Java程序,它可以为我们做很多事情,但不是一切。并且,正如您所注意到的,它不支持拖放等操作
new UnsupportedOperationException("Moving to arbitrary X,Y coordinates not supported.");
与其他Selenium驱动程序相反,例如selenium-chromedriver,其中一个示例应该正常工作。
但是,如果您仍然需要使用无头网络测试,则可以使用PhantomJS选项。是的,它专注于JS测试,但是有一个很棒的项目叫Ghost Driver(简单的JS for PhantomJS中的Webdriver Wire协议的实现),它支持Java绑定和Selenium API。
使用它的步骤非常简单:
PATH
env变量中。将Maven依赖项添加到您的pom.xml(以及Selenium libs:selenium-java
和selenium-support
):
<dependency>
<groupId>com.github.detro</groupId>
<artifactId>phantomjsdriver</artifactId>
<version>1.2.0</version>
</dependency>
并调整您的代码以使用它:
// 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