我正在尝试运行命令以在模拟器上滚动屏幕.我尝试了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] 举报,一经查实,本站将立刻删除。