有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Appium iOS滑动正在单击

试图在应用程序中滑动对话(删除对话),但Appium充当单击。我在两台设备上试过,它们的起始位置和结束位置以及持续时间都有不同的变量。代码如下:

driver.swipe(250,240,0,240,300);

有没有人看到同样的问题,如果有,你的解决方案是什么

我用press-wait-moveTo-releaselongPress-moveTo-release操作尝试了TouchActions,但结果相同。 更详细地说,我可以告诉你,我可以上下滚动没有问题,但从左到右和反之亦然似乎不起作用

一些补充资料:

  • Appium 1.6.5 GUI或终端
  • java客户端5.0.0-BETA9
  • selenium java 3.3.0
  • 带Maven的IntelliJ as IDE

共 (3) 个答案

  1. # 1 楼答案

    试试这个:

    Thread.sleep(3000);
    new TouchAction(driver)
        .press(PointOption.point(500, 596))
        .waitAction(WaitOptions.waitOptions(Duration.ofMillis(1000)))
        .moveTo( PointOption.point(518, 478))
        .release()
        .perform();
    
  2. # 2 楼答案

    实现方法可能如下所示

    public void swipeScreen(String direction) {
            JavascriptExecutor js = Device.driver;
            HashMap<String, String> scrollObject = new HashMap<>();
            scrollObject.put("direction", direction);
            js.executeScript("mobile: scroll", scrollObject);
        }
    

    然后使用调用上述方法(不要忘记先声明字符串

    String DOWN="down";
    String LEFT ="left";
    
    swipeScreen(DOWN); //or swipeScreen(LEFT); ....likewise up and Right
    

    official web上的最佳参考

  3. # 3 楼答案

    我使用这段代码,并向我证明了这一点。它适用于iOS和Android

    它可能被认为是不推荐使用的,但对我来说它是有效的,我没有找到更好的解决方案

    public static void swipe(MobileDriver driver, DIRECTION direction, long duration) {
        Dimension size = driver.manage().window().getSize();
    
        int startX = 0;
        int endX = 0;
        int startY = 0;
        int endY = 0;
    
        switch (direction){
            case RIGHT:
                startY = (int) (size.height /2);
                startX = (int) (size.width * 0.90);
                endX = (int) (size.width * 0.05);
                break;
    
            case LEFT:
                startY = (int) (size.height /2);
                startX = (int) (size.width * 0.05);
                endX = (int) (size.width * 0.90);
                break;
    
            case UP:
                endY= (int) (size.height * 0.70);
                startY  = (int) (size.height * 0.30);
                startX = (size.width / 2);
                break;
    
    
            case DOWN:
                startY = (int) (size.height * 0.70);
                endY = (int) (size.height * 0.30);
                startX = (size.width / 2);
    
                break;
    
        }
    
        new TouchAction(driver)
                .press(startX, startY)
                .waitAction(Duration.ofMillis(duration))
                .moveTo(endX, startY)
                .release()
                .perform();
    
    }
    

    DIRECTION只是一个值为UP, DOWN...的枚举