在 appium 中使用触摸操作向下滚动移动应用程序时显示异常
Showing exception when scroll down mobile app using touch action in appium
我试图向下滚动移动应用程序以单击 screen.I 下方的按钮 已使用下方触摸操作进行滚动,但它给出了 exception.Is 还有其他方法可用吗?任何人都请帮助我向下滚动移动应用程序。
显示异常
线程中出现异常 "main" org.openqa.selenium.InvalidElementStateException:滑动未成功完成
DesiredCapabilities androidCapabilities = new DesiredCapabilities();
AppiumDriver<MobileElement> appiumDriver;
androidCapabilities.setCapability("automationName",PropertyUtility.getProperty("AndroidAutomationName")); androidCapabilities.setCapability("platformName",PropertyUtility.getProperty("AndroidPlatformName"));
androidCapabilities.setCapability("platformVersion", PropertyUtility.getProperty("AndroidPlatformVersion"));
androidCapabilities.setCapability("deviceName", PropertyUtility.getProperty("AndroidDeviceName"));
androidCapabilities.setCapability("app",PropertyUtility.getProperty("AndroidAppPath"));
androidCapabilities.setCapability("noReset", true);
androidCapabilities.setCapability("newCommandTimeout", "60");
appiumDriver = new AndroidDriver<>(new URL("http://0.0.0.0:4723/wd/hub"), androidCapabilities);
Dimension dim=appiumDriver.manage().window().getSize();
System.out.println(dim);
int x=dim.getWidth()/2;
int startY=(int) (dim.getHeight()*(.8));
int endY=(int) (dim.getHeight()*(.2));
TouchAction action=new TouchAction(appiumDriver);
action.press(PointOption.point(x,startY)).waitAction(WaitOptions.waitOptions(Duration.ofMillis(1000))).moveTo(PointOption.point(x, endY)).release().perform();
配置
appium 1.15
java 客户端:7.3.0
您可以执行滚动以查找特定元素,如下所示:
public void scrollToElementByText(String text) {
try {
((AndroidDriver)driver).findElementByAndroidUIAutomator("newUiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(\"" + text + "\").instance(0))");
} catch (Exception e) {
...
}
}
显然,您可以使用任何属性来查找元素(id、可访问性 id 等),然后在该元素上 click()
。或者您可以简单地向下滚动并检查要显示的元素,如果没有,请继续向下滚动:
private void swipe(int xStart, int yStart, int xStop, int yStop) {
try {
new TouchAction(driver)
.press(point(xStart, yStart))
.moveTo(point(xStop, yStop)).release().perform();
} catch (Exception e) {
...
}
}
public void scrollDown() {
swipe(5,
(getWindowSize().getHeight()) - 200,
5,
100);
}
public void scrollToElement(MobileElement el) {
while (true) {
if (!el.isDisplayed()) {
//element is not displayed, keep scrolling
scrollDown();
} else {
//element found
break;
}
}
}
但是要小心,因为你可以用最后一个方法得到无限循环(实现你自己的逻辑来打破那个循环)。
我试图向下滚动移动应用程序以单击 screen.I 下方的按钮 已使用下方触摸操作进行滚动,但它给出了 exception.Is 还有其他方法可用吗?任何人都请帮助我向下滚动移动应用程序。
显示异常
线程中出现异常 "main" org.openqa.selenium.InvalidElementStateException:滑动未成功完成
DesiredCapabilities androidCapabilities = new DesiredCapabilities();
AppiumDriver<MobileElement> appiumDriver;
androidCapabilities.setCapability("automationName",PropertyUtility.getProperty("AndroidAutomationName")); androidCapabilities.setCapability("platformName",PropertyUtility.getProperty("AndroidPlatformName"));
androidCapabilities.setCapability("platformVersion", PropertyUtility.getProperty("AndroidPlatformVersion"));
androidCapabilities.setCapability("deviceName", PropertyUtility.getProperty("AndroidDeviceName"));
androidCapabilities.setCapability("app",PropertyUtility.getProperty("AndroidAppPath"));
androidCapabilities.setCapability("noReset", true);
androidCapabilities.setCapability("newCommandTimeout", "60");
appiumDriver = new AndroidDriver<>(new URL("http://0.0.0.0:4723/wd/hub"), androidCapabilities);
Dimension dim=appiumDriver.manage().window().getSize();
System.out.println(dim);
int x=dim.getWidth()/2;
int startY=(int) (dim.getHeight()*(.8));
int endY=(int) (dim.getHeight()*(.2));
TouchAction action=new TouchAction(appiumDriver);
action.press(PointOption.point(x,startY)).waitAction(WaitOptions.waitOptions(Duration.ofMillis(1000))).moveTo(PointOption.point(x, endY)).release().perform();
配置
appium 1.15 java 客户端:7.3.0
您可以执行滚动以查找特定元素,如下所示:
public void scrollToElementByText(String text) {
try {
((AndroidDriver)driver).findElementByAndroidUIAutomator("newUiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(\"" + text + "\").instance(0))");
} catch (Exception e) {
...
}
}
显然,您可以使用任何属性来查找元素(id、可访问性 id 等),然后在该元素上 click()
。或者您可以简单地向下滚动并检查要显示的元素,如果没有,请继续向下滚动:
private void swipe(int xStart, int yStart, int xStop, int yStop) {
try {
new TouchAction(driver)
.press(point(xStart, yStart))
.moveTo(point(xStop, yStop)).release().perform();
} catch (Exception e) {
...
}
}
public void scrollDown() {
swipe(5,
(getWindowSize().getHeight()) - 200,
5,
100);
}
public void scrollToElement(MobileElement el) {
while (true) {
if (!el.isDisplayed()) {
//element is not displayed, keep scrolling
scrollDown();
} else {
//element found
break;
}
}
}
但是要小心,因为你可以用最后一个方法得到无限循环(实现你自己的逻辑来打破那个循环)。