【发布时间】:2019-02-02 01:01:07
【问题描述】:
我正在尝试运行命令以在模拟器上滚动屏幕。我曾尝试过来自 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: actions)。
编辑:应用下面评论中的代码后,我得到了以下代码,它始终适用于 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();
所以我确实为每个驱动程序提供了一个工作版本。有谁知道为什么这些根据使用的驱动程序有不同的行为?
【问题讨论】:
标签: java android automation appium