appium操作之手勢操作-多點觸摸(地圖放大縮小)


1.移動端地圖放大縮小,需要2個手指同時操作,多點觸摸,如何實現呢?,

MultiTouchAction類可以模擬用戶多點觸摸操作,包含add(),perform()兩個方法,結合TouchAction模擬多根手指滑動的效果

舉例:

2.下載:百度地圖,先確定其包名和入口

 

 package: com.baidu.BaiduMap

入口launchable-activity:  com.baidu.baidumaps.WelcomeScreen

3.新建MultiTest.class

腳本如下:

package com.test.firstAppium;
import java.net.MalformedURLException;
import java.net.URL;
import java.time.Duration;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import io.appium.java_client.MultiTouchAction;
import io.appium.java_client.TouchAction;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.touch.WaitOptions;
import io.appium.java_client.touch.offset.PointOption;
public class MultiTouchTest {
 // 聲明全局變量
  public static AndroidDriver<WebElement> androidDriver;
  @BeforeTest
  public void setup() throws MalformedURLException {
   // 1.創建配置對象
   DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
   // 2.添加配置
   // deviceName:可以找到我們測試的設備
   desiredCapabilities.setCapability("deviceName", "127.0.0.1:62001");
   // platformName:測試平台android or IOS
   desiredCapabilities.setCapability("platformName", "Android");
   // appPackage:找到測試 APP:aapt dump badging.....
   desiredCapabilities.setCapability("appPackage", " com.baidu.BaiduMap");
   // automationName:uiautomator2來解決輸入框輸入不了數據
   // 自動化引擎
   // desiredCapabilities.setCapability("automationName", "uiautomator2");
    // 不清理應用的數據,默認是清理的
   desiredCapabilities.setCapability("noReset", true);
   // appActivity:測試app入口
   desiredCapabilities.setCapability("appActivity", "com.baidu.baidumaps.WelcomeScreen");
   // 創建驅動
   // 傳入2個參數,第一個參數:Appium通訊地址,第二個參數:配置對象
   androidDriver = new AndroidDriver<WebElement>(new URL("http://127.0.0.1:4723/wd/hub"), desiredCapabilities);
   // 隱式等待
   androidDriver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
  }
   // 自定義方法
  @Test
  public void TestZoom() throws InterruptedException {
   Thread.sleep(6000);
   //1.實例化multiTouchAction對象
   MultiTouchAction multiTouchAction =new MultiTouchAction(androidDriver);
   //2.實例化2個TouchAction
   TouchAction touchAction1= new TouchAction<>(androidDriver);
   TouchAction touchAction2= new TouchAction<>(androidDriver);
   //3.點擊放大+
   androidDriver.findElementById("com.baidu.BaiduMap:id/zoom_in").click();
   //點擊縮小 -
   androidDriver.findElementById("com.baidu.BaiduMap:id/zoom_out").click();
   //4.得到當前屏幕得高度和寬度
   int x=androidDriver.manage().window().getSize().getWidth();
   int y=androidDriver.manage().window().getSize().getHeight();
   //第一根手指從B到A點滑動,放大,從小到上
   touchAction1.press(PointOption.point(x*4/10,y*4/10))
   .waitAction(WaitOptions.waitOptions(Duration.ofMillis(1000)))
   .moveTo(PointOption.point(x*2/10,y*2/10)).release();
   //第二根手指從B到A點滑動,放大,從小到上
   touchAction2.press(PointOption.point(x*6/10,y*6/10))
   .waitAction(WaitOptions.waitOptions(Duration.ofMillis(1000)))
   .moveTo(PointOption.point(x*2/10,y*2/10)).release();
   //把2手指的動作添加到MultiTouchAction里面
   multiTouchAction.add(touchAction1).add(touchAction2);
   multiTouchAction.perform();
   
   
   
  }   
  
  @AfterTest
  public void teardown() {
   androidDriver.quit();
  }
 }
 
這里舉例是2手指向外滑動,放大的腳本
如果是縮小的動作,就是把x和y的數值交換一下

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM