滑动方法在android自动化测试中不起作用

Posted

技术标签:

【中文标题】滑动方法在android自动化测试中不起作用【英文标题】:Swipe method not working in android automation testing 【发布时间】:2014-05-01 15:14:02 【问题描述】:

我正在尝试实现 swipe 方法。请问我知道实现目标的正确方法是什么?

public void swipeWithCordinateLocation(WebDriver driver,double startX,
                                       double  startY,double endX,double endY,
                                       double Duration)

javascriptExecutor js = (JavascriptExecutor) driver;
HashMap<String, Double> swipeObject = new HashMap<String, Double>();
swipeObject.put("x", startX);
swipeObject.put("y", startY);
swipeObject.put("x", endX);
swipeObject.put("y",endY );
swipeObject.put("duration", Duration);
// HashMap[] param = swipeObject;
js.executeScript("mobile: swipe", swipeObject);



common.swipeWithCordinateLocation(driver, 100.00, 500.00, 500.00, 500.00, 1.00);

但是 appium 是执行刷卡,但它需要不同的凭据

[x=360][y=592]
 to [x=360][y=592]

。该怎么办? 谁能帮帮我。

【问题讨论】:

【参考方案1】:

在自动化中分析滑动的最佳方法是在您的开发者选项中启用“显示触摸”和“指针位置”选项。

滑动参数的正确代码是这样的-

swipeObject.put("startX", 198.00);
swipeObject.put("startY", 685.00);
swipeObject.put("endX", 198.00);
swipeObject.put("endY", 550.00);
swipeObject.put("duration", 1.0);

希望这会有所帮助。

或者甚至更好的方法是使用诸如使用分数之类的东西-

swipeObject.put("startX", 0.50);
swipeObject.put("startY", 0.50);
swipeObject.put("endX", 0.50);
swipeObject.put("endY", 0.35);
swipeObject.put("duration", 1.0);

【讨论】:

是否需要导入任意JAR文件才能支持swipeObject? 此答案适用于旧版本的 appium。新版本使用 AppiumClient Jar 好的..我会下载并使用那个jar。【参考方案2】:

您也可以将 uiautomator 用于相同的 . 它将帮助您非常有效和更快地自动化测试用例。

您可以在http://developer.android.com/tools/help/uiautomator/index.html 阅读更多相关信息

【讨论】:

【参考方案3】:

最好的解决方案是使用 AppiumDriver 的 swipe() 如下所示:

向左滑动:

 public void swipeLeft()
  
      AppiumDriver appiumDriver = (AppiumDriver) driver;
      appiumDriver.context("NATIVE_APP"); 
      Dimension size = appiumDriver.manage().window().getSize(); 
      int startx = (int) (size.width * 0.8); 
      int endx = (int) (size.width * 0.20); 
      int starty = size.height / 2; 
      appiumDriver.swipe(startx, starty, endx, starty, 1000);

  

向右滑动:

 public void swipeRight()
  
      AppiumDriver appiumDriver = (AppiumDriver) driver;
      appiumDriver.context("NATIVE_APP"); 
      Dimension size = appiumDriver.manage().window().getSize(); 
      int endx= (int) (size.width * 0.8); 
      int startx = (int) (size.width * 0.20); 
      int starty = size.height / 2; 
      appiumDriver.swipe(startx, starty, endx, starty, 1000);

  

【讨论】:

您的 swipeLeft() 和 swipeRight() 方法坐标相同。这些方法如何区分左右?【参考方案4】:

使用 TouchAction 也可以达到同样的滑动效果

    TouchAction action = new TouchAction(androidDriver);
    action.press(0, 500)
            .waitAction(200)
            .moveTo(0, 200)
            .release()
            .perform();

只需使用坐标即可获得所需的滑动。

【讨论】:

请不要发帖duplicate answers。相反,请考虑其他可以帮助未来用户找到所需答案的操作,如链接帖子中所述。

以上是关于滑动方法在android自动化测试中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Android 自动填充服务在 Chrome 中不起作用

溢出自动在android浏览器中不起作用

登录表单自动填充,在 iframe 中,在 android 浏览器中不起作用

滑动以返回在 ios 中的颤振 webview 中不起作用

Spring @Value 注入转换在 @SpringJUnitConfig 测试中不起作用

Javascript autotab keyup/keydown 在 Cordova Android 浏览器中不起作用