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 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 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;
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;
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);
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();
}
@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的數值交換一下