使用的是“夜神模拟器”版本:6.6.1.2
Android版本号:5.1.1
1.创建一个Maven项目
2.导入测试包:
<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>6.1.0</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.3.0</version>
</dependency>
3.编写测试脚本代码
package com.wang;
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 org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import java.net.URL;
import java.time.Duration;
import java.util.concurrent.TimeUnit;
public class QQAppium {
static AndroidDriver<WebElement> androidDriver;
public static void main(String[] args) throws Exception {
DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
desiredCapabilities.setCapability("deviceName", "127.0.0.1:62001");
desiredCapabilities.setCapability("platformName", "Android");
desiredCapabilities.setCapability("automationName", "uiautomator2");
desiredCapabilities.setCapability("appPackage", "com.tencent.mobileqqi");
desiredCapabilities.setCapability("appActivity", "com.tencent.mobileqq.activity.SplashActivity");
//创建驱动,传入两个参数,第一个参数,APPium通讯地址,第二个参数:配置对象
AndroidDriver<WebElement> androidDriver = new AndroidDriver<WebElement>
(new URL("http://127.0.0.1:4723/wd/hub"), desiredCapabilities);
// WebElement e1 = androidDriver.findElementByXPath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout");
// WebElement e2 = androidDriver.findElementByXPath("//android.widget.RelativeLayout[@content-desc=\"root\"]/android.widget.RelativeLayout");
System.out.println("小页面,需要登录");
//等待元素加载完毕,10秒 因为模拟器运行需要时间,而代码运行很快,
// 所以要等待Android加载,否则代码找不到相对应的按钮会报错
// Thread.sleep(10000); //强制等待,元素加不加载的出来都等待
//隐式等待 10秒的隐式等待
androidDriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
//同意继续
androidDriver.findElementById("com.tencent.mobileqqi:id/dialogRightBtn").click();
//Thread.sleep(5000);
//登录3454245182
androidDriver.findElementByClassName("android.widget.EditText").sendKeys("********你的qq号");
androidDriver.findElementById("com.tencent.mobileqqi:id/password").sendKeys("********qq密码");
//点击登录
androidDriver.findElementById("com.tencent.mobileqqi:id/login").click();
//Thread.sleep(3000);
androidDriver.findElementByClassName("android.widget.CheckBox").click();
//点击继续
Thread.sleep(1000);
androidDriver.findElementByAndroidUIAutomator("new UiSelector().text(\"继续\")").click();
//点击朋友圈
androidDriver.findElementByXPath("/hierarchy/android.widget.FrameLayout/android.view." +
"View/android.widget.FrameLayout[1]/android.widget." + "HorizontalScrollView/android." +
"widget.LinearLayout/android.app.ActionBar.Tab[3]").click();
//点击设置
androidDriver.findElementByXPath("//android.widget.TextView[@content-desc=\"设置\"]").click();
//点击设备锁、账号安全
androidDriver.findElementByXPath("/hierarchy/android.widget.FrameLayout/android." +
"widget.RelativeLayout/android.view.View/android.widget.FrameLayout[2]/android." +
"widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android" +
".widget.LinearLayout[3]/android.widget.RelativeLayout[2]").click();
//点击手势密码设定
androidDriver.findElementByXPath("/hierarchy/android.widget.FrameLayout/android.widget." +
"RelativeLayout/android.view.View/android.widget.FrameLayout[2]/android.widget.LinearLayout" +
"/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.RelativeLayout[3]").click();
//点击创建手势密码
androidDriver.findElementByAndroidUIAutomator("new UiSelector().text(\"创建手势密码\")").click();
//九宫格滑动解锁
//实例化TouchAcation对象
TouchAction touchAction = new TouchAction<>(androidDriver);
//原始的数据转成Duration类型的
Duration duration = Duration.ofMillis(800);
//吧Duration类型的转换成WatiOptions类型的
WaitOptions waitOptions = WaitOptions.waitOptions(duration);
PointOption option1 = PointOption.point(189, 235);
PointOption option2 = PointOption.point(270, 235);
PointOption option3 = PointOption.point(350, 234);
PointOption option4 = PointOption.point(350, 315);
PointOption option5 = PointOption.point(350, 393);
//各个坐标的点连起来
touchAction.press(option1).moveTo(option2).moveTo(option3).moveTo(option4).moveTo(option5).release();
//让滑动生效
touchAction.perform();
PointOption option6 = PointOption.point(188, 235);
PointOption option7 = PointOption.point(271, 235);
PointOption option8 = PointOption.point(351, 234);
PointOption option9 = PointOption.point(350, 315);
PointOption option10 = PointOption.point(350, 393);
//各个坐标的点连起来
touchAction.press(option6).moveTo(option7).moveTo(option8).moveTo(option9).moveTo(option10).release();
//让滑动生效
touchAction.perform();
//点击返回
androidDriver.findElementByXPath("//android.widget.LinearLayout[@content-desc=\"" +
"手势密码锁定:向上导航\"]/android.widget.FrameLayout/android.widget.ImageView[1]").click();
//返回
androidDriver.findElementByXPath("//android.widget.LinearLayout[@content-desc=\"" +
"设备锁、帐号安全:向上导航\"]/android.widget.FrameLayout/android.widget.ImageView[1]").click();
//返回
androidDriver.findElementByXPath("//android.widget.LinearLayout[@content-desc=\"" +
"设置:向上导航\"]/android.widget.FrameLayout/android.widget.ImageView[1]").click();
//点击消息
androidDriver.findElementByXPath("/hierarchy/android.widget.FrameLayout/android.view." +
"View/android.widget.FrameLayout[1]/android.widget.HorizontalScrollView/android.widget." +
"LinearLayout/android.app.ActionBar.Tab[1]/android.widget.RelativeLayout").click();
//执行完成之后退出销毁驱动,模拟器返回桌面
androidDriver.quit();
}
}
QQ录屏20200907162758
版权声明:本文为weixin_45004745原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。