Java-如何使用Android自动化修复“ UnsupportedCommandException:操作”错误

我正在尝试运行命令以在模拟器上滚动屏幕.我尝试了Action类中的一组action命令,但是它们不一致.我最终偶然发现了下面的代码.

是否需要导入或包含某些内容才能使这些操作正常运行?我的另一个困惑是,此代码在使用Espresso驱动程序时有效,但在UiAutomator2驱动程序下运行时却产生此错误消息.我尝试导入Action类,但这不能解决问题.同样,UiAutomator2驱动程序上是否需要导入或专门用于这些命令的内容?

此代码在使用Espresso驱动程序时有效,但在UiAutomator2驱动程序下运行时会产生此错误消息.我尝试导入Action类,但这不能解决问题.

WebElement element1 = wait.until(ExpectedConditions.visibilityOfElementLocated(originLocator));
WebElement element2 = wait.until(ExpectedConditions.visibilityOfElementLocated(destinationLocator));

int startY = element1.getLocation().getY() + (element1.getSize().getHeight() / 2);
int startX = element1.getLocation().getX() + (element1.getSize().getWidth() / 2);

int endX = element2.getLocation().getX() + (element2.getSize().getWidth() / 2);
int endY = element2.getLocation().getY() + (element2.getSize().getHeight() / 2);

PointerInput input = new PointerInput(PointerInput.Kind.TOUCH, "input");
Sequence swipeTo = new Sequence(input, 0);
swipeTo.addAction(input.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), startX, startY)); 
swipeTo.addAction(input.createPointerDown(PointerInput.MouseButton.LEFT.asArg()));
swipeTo.addAction(input.createPointerMove(Duration.ofMillis(1000), PointerInput.Origin.viewport(), endX, endY));
swipeTo.addAction(input.createPointerUp(PointerInput.MouseButton.LEFT.asArg()));
driver.perform(Arrays.asList(swipeTo));

这应该在模拟器上滚动移动应用程序的可见页面,但是当前在使用UiAutomator2驱动程序运行时会导致以下错误(org.openqa.selenium.UnsupportedCommandException:操作).

编辑:从下面的注释中应用代码后,我得到以下代码,该代码始终与UiAutomator2驱动程序兼容,但与Espresso驱动程序不兼容(它在屏幕上定位了错误的空间,似乎点击了一个元素而不是触摸并按住) .

    WebElement element1 = wait.until(ExpectedConditions.visibilityOfElementLocated(originLocator));
    WebElement element2 = wait.until(ExpectedConditions.visibilityOfElementLocated(destinationLocator));

    int startY = element1.getLocation().getY() + (element1.getSize().getHeight() / 2);
    int startX = element1.getLocation().getX() + (element1.getSize().getWidth() / 2);

    int endX = element2.getLocation().getX() + (element2.getSize().getWidth() / 2);
    int endY = element2.getLocation().getY() + (element2.getSize().getHeight() / 2);

    Dimension dim=driver.manage().window().getSize();
    int height=(int) dim.getHeight();
    int width=(int) dim.getWidth();
    int x= width/2;
    new TouchAction(driver)
            .press(PointOption.point(x,startY))
            .waitAction(WaitOptions.waitOptions(Duration.ofMillis(2000)))
            .moveTo(PointOption.point(x,endY))
            .release()
            .perform();

所以我确实为每个驱动程序提供了一个工作版本.有谁知道为什么这些行为取决于所使用的驱动程序?

解决方法:

如果您想在android应用上滚动,则可以使用触摸动作类.下面的代码将向下滚动.如果要向上滚动,请相应地更改startY和startX.希望能帮助到你.

public void scrollDown() {
    Dimension dim=new Dimension();
    int height=(int) dim.getHeight();
    int width=(int) dim.getWidth();
    int x= width/2;
    int startY=(int) (height*0.80);
    int endY=(int) (height*0.20);
    new TouchAction(driver).press(x, startY).waitAction(Duration.ofMillis(2000)).moveTo(x, endY).release().perform();   
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐