Appium元素定位和案例(有注释)

it2023-09-29  74

1、元素识别方法

元素识别方法:

前面也说过appium也是以webdriver为基础的,对于元素的定位也基本一致,只是增加一些更适合移动平台的独特方式:

id定位: 主要看resource id的值: 函数: driver.findElementById(resource_id的值); class定位: 主要看class的值 函数: driver.findElementByClassName(class的值); AndroidUIAutomator定位: 主要看text的值 函数: driver.findElementByAndroidUIAutomator(text(\”中文\”)); Accessibility ID定位 函数: driver.findElementByAccessibilityId(content-desc的值); Xpath定位 主要看目标元素的位置 函数:findElementByXPath(路径) findElementByXPath(//*[@resource-id=‘xxx’]”)

2、元素的操作方法

click() 点击 sendKeys() 模拟键盘输入 clear() 清除 Getattribute() 获取属性值

针对应用的操作 如应用的安装、卸载、关闭、启动等。

1)安装应用:installApp(); 2)卸载应用:removeApp(); 3)关闭应用:closeAPP(); 4)启动应用:launchApp() 5)检查应用是否安装:isAppInstalled() 6)将应用置于后台:runAppInBackground() 7)应用重置:resetApp()

模拟手势操作

import io.appium.java_client.TouchAction; //要生成对象 TouchAction touchAction = new TouchAction(driver);

1)按压控件:press() 2)长按控件:longPress() 3)点击控件:tap() 4)移动:moveTo() 5)暂停:wait() 6)结束操作:release() 7)将操作发送服务器:Perform()

移动设备特有的操作

1)息屏: lockDevice() 2)当前Activity:currentActivity() 3)收起键盘:hideKeyboard() 4)滑动:swipe() 5)拉出文件:pullFile() 6)推送文件:pushFile()

3、案例

定位、获取元素,QQ登录和退出

package haha; import io.appium.java_client.AppiumDriver; import java.net.MalformedURLException; import java.net.URL; import org.openqa.selenium.remote.DesiredCapabilities; public class Test01 { public static void main(String[] args)throws MalformedURLException, InterruptedException { // TODO 自动生成的方法存根 DesiredCapabilities des=new DesiredCapabilities(); des.setCapability("platformName","android");//平台 des.setCapability("deviceName","Android Emulator");//设备名称 des.setCapability("platformVersion","4.4.4");//版本号 des.setCapability("noReset","true");//不要重复安装 des.setCapability("appPackage","com.tencent.mobileqq");//包名 Thread.sleep(3000);//3秒 //活动页 des.setCapability("appActivity","com.tencent.mobileqq.activity.LoginActivity"); Thread.sleep(7000);//7秒 //创建连接appium的对象 AppiumDriver dr = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"),des); //获取元素 String str=dr.findElementById("com.tencent.mobileqq:id/btn_login").getAttribute("text"); System.out.println(str);//id方法 Thread.sleep(3000);//3秒 String str2=dr.findElementByClassName("android.widget.Button").getAttribute("text"); System.out.println(str2);//name方法 Thread.sleep(6000);//5秒 String str3=dr.findElementByAndroidUIAutomator("text(\"登录\")").getAttribute("text"); System.out.println(str3);//text方法 Thread.sleep(3000);//3秒 String xp="/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.Button[2]"; dr.findElementByXPath(xp).click();//xpath方法 Thread.sleep(5000);//5秒 String str1=dr.findElementByAccessibilityId("请输入QQ号码或手机或邮箱").getAttribute("text"); System.out.println(str1);//content-desc方法 // Thread.sleep(5000);//3秒 // dr.findElementById("com.tencent.mobileqq:id/btn_login").click(); Thread.sleep(3000);//3秒 dr.findElementByAccessibilityId("请输入QQ号码或手机或邮箱").click();//点击元素 Thread.sleep(3000);//3秒 dr.findElementByAccessibilityId("请输入QQ号码或手机或邮箱").clear();//清除元素 dr.findElementByAccessibilityId("请输入QQ号码或手机或邮箱").sendKeys("302650100"); Thread.sleep(3000);//3秒 dr.findElementById("com.tencent.mobileqq:id/password").click(); Thread.sleep(3000);//3秒 dr.findElementById("com.tencent.mobileqq:id/password").clear(); dr.findElementById("com.tencent.mobileqq:id/password").sendKeys("wx3289696");//输入值 Thread.sleep(3000);//3秒 dr.findElementById("com.tencent.mobileqq:id/login").click(); Thread.sleep(3000);//3秒 dr.swipe(123,564,123,200,5000); Thread.sleep(8000);//3秒 //点击头像 dr.findElementById("com.tencent.mobileqq:id/conversation_head").click(); //点击设置 Thread.sleep(5000); dr.findElementById("com.tencent.mobileqq:id/settings").click(); //点击我的账户 Thread.sleep(5000); dr.findElementById("com.tencent.mobileqq:id/account_switch").click(); Thread.sleep(5000); //点击退出当前账户 dr.findElementByAndroidUIAutomator("text(\"退出当前账号\")").click(); Thread.sleep(5000); dr.quit(); } }

正式版qq登录出错拖图案例

package maker; import io.appium.java_client.AppiumDriver; import java.net.MalformedURLException; import java.net.URL; import org.openqa.selenium.remote.DesiredCapabilities; public class A06登陆正式版qq出错拖图 { public static void main(String[] args) throws MalformedURLException, InterruptedException{ // TODO 自动生成的方法存根 //1.配置设备和app信息 DesiredCapabilities des=new DesiredCapabilities(); des.setCapability("platformName","android");//平台 des.setCapability("deviceName","Android Emulator");//设备名 des.setCapability("platformVersion","4.4.4");//版本号 des.setCapability("noReset","true");//不要重复安装 des.setCapability("appPackage","com.tencent.mobileqq");//包名 //活动页 des.setCapability("appActivity","com.tencent.mobileqq.activity.LoginActivity"); //2.创建连接appium的对象 AppiumDriver dr = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"),des); //暂停 Thread.sleep(5000);//5秒 dr.findElementByAccessibilityId("请输入QQ号码或手机或邮箱").click(); // Thread.sleep(3000);//5秒 dr.findElementByAccessibilityId("请输入QQ号码或手机或邮箱").clear(); // Thread.sleep(3000);//5秒 dr.findElementByAccessibilityId("请输入QQ号码或手机或邮箱").sendKeys("111011101"); // Thread.sleep(3000);//5秒 dr.findElementByAccessibilityId("密码 安全").click(); dr.findElementByAccessibilityId("密码 安全").clear(); dr.findElementByAccessibilityId("密码 安全").sendKeys("abc123456"); // Thread.sleep(3000);//5秒 //点击登陆 登 录 dr.findElementById("com.tencent.mobileqq:id/login").click(); Thread.sleep(5000);//5秒 //滑动 dr.swipe(168, 330, 520, 330, 10000); Thread.sleep(5000);//5秒 dr.quit(); } }

轻聊版qq登录案例

首次登qq package maker; import io.appium.java_client.AppiumDriver; import java.net.MalformedURLException; import java.net.URL; import org.openqa.selenium.remote.DesiredCapabilities; public class A02元素操作 { public static void main(String[] args) throws MalformedURLException, InterruptedException{ // TODO 自动生成的方法存根 //1.配置设备和app信息 DesiredCapabilities des=new DesiredCapabilities(); des.setCapability("platformName","android");//平台 des.setCapability("deviceName","Android Emulator");//设备名 des.setCapability("platformVersion","4.4.4");//版本号 des.setCapability("noReset","true");//不要重复安装 des.setCapability("appPackage","com.tencent.qqlite");//包名 //活动页 des.setCapability("appActivity","com.tencent.mobileqq.activity.RegisterGuideActivity"); //2.创建连接appium的对象 AppiumDriver dr = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"),des); //暂停 Thread.sleep(5000);//5秒 //点击登陆按键 id:com.tencent.qqlite:id/btn_login dr.findElementById("com.tencent.qqlite:id/btn_login").click(); Thread.sleep(3000);//3秒 //获取qq号码输入框, 请输入QQ号码或手机或邮箱 dr.findElementByAccessibilityId("请输入QQ号码或手机或邮箱").click(); //输入qq号 dr.findElementByAccessibilityId("请输入QQ号码或手机或邮箱").sendKeys("2062911635"); Thread.sleep(3000);//3秒 //获取密码输入框, dr.findElementByAccessibilityId("请输入密码").click(); dr.findElementByAccessibilityId("请输入密码").sendKeys("abc123456"); Thread.sleep(3000);//3秒 //点击登陆按键 com.tencent.qqlite:id/login dr.findElementById("com.tencent.qqlite:id/login").click(); Thread.sleep(3000);//3秒 dr.quit(); } }

计算器项目

package com.qf.calc; import java.net.MalformedURLException; import java.net.URL; import java.util.concurrent.TimeUnit; import org.openqa.selenium.remote.DesiredCapabilities; import io.appium.java_client.AppiumDriver; /* 实现计算器app的自动化测试: 1、自动化脚本的对象是谁?到底是模拟器还是手机(假设选择的是模拟器) 2、appium支持ios、android、firefox os。要告诉脚本本次测试是针对哪一个平台的(假设是Android) 3、要告诉脚本,本次针对的Android版本是哪一个?4.4.4 4、要确定测试的app是谁?找到该app的包名:com.lilysgame.calculatorjw 5、要确定一个app入口的activity:com.lilysgame.calculator.MainActivity 6、创建一个appium对象,负责连接appium server 7、通过selenium提供的api方法定位元素(页面上控件) 8、对相应的元素做操作,按钮就要点击、文本框就要赋值..... 9、获取实际结果,并与预期的结果进行对比,得出测试执行的结论(断言) 具体实现: 1、selenium中提供了一个类,DesiredCapabilities,提供了很多方法,可以设置一些列的键值对 2、创建DesiredCapabilities的对象 DesiredCapabilities des = new DesiredCapabilities(); 3、des的方法setCapability()设置键值对 des.setCapability("platformName","Android");//指定平台是android des.setCapability("deviceName","Android Emulator");//指定的是模拟器 des.setCapability("platformVersion","4.4.4");//指定平台的版本号 des.setCapability("appPackage","com.lilysgame.calculatorjw");//指定要测试的应用的包名 des.setCapability("appActivity","com.lilysgame.calculator.MainActivity");//指定入口页面 4、创建Appium的对象 5、通过selenium提供的api方法定位元素(页面上控件) 6、对相应的元素做操作,按钮就要点击、文本框就要赋值..... 7、获取实际结果,并与预期的结果进行对比,得出测试执行的结论(断言) //时间等待有两种方式: * Thread.sleep(2000);强制等待,设置多少就等待多少 * 全局等待,对driver的等 * */ public class CalcTest { public static void main(String[] args) throws MalformedURLException, InterruptedException { //创建DesiredCapabilities的对象 DesiredCapabilities des = new DesiredCapabilities(); //des的方法setCapability()设置键值对 des.setCapability("platformName", "Android"); des.setCapability("deviceName", "Android Emulator"); des.setCapability("platformVersion", "4.4.4"); //再添加一个键值对,不让app每次测试都重置一遍 des.setCapability("noReset", true); des.setCapability("appPackage", "com.lilysgame.calculatorjw"); des.setCapability("appActivity","com.lilysgame.calculator.MainActivity"); //创建Appium的对象 AppiumDriver driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"),des); //设置一个全局等待的方法,要全局等待10s driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); //到目前为止,就已经能够连接上app啦,driver就可以对app进行操作啦 //定位元素的语句,要指定id属性定位到元素并对其进行操作 //定位到计算器的按键1,并点击 //driver.findElementById("com.lilysgame.calculatorjw:id/btnOne").click(); //使用class属性定位按键1,但是由于所有的按键都是一个class name,就点了默认的del,一般不用 //driver.findElementByClassName("android.widget.Button").click(); //通过text属性定位到元素 //driver.findElementByAndroidUIAutomator("text(\"5\")").click(); //通过xpath定位页面元素 driver.findElementByXPath("//*[@resource-id='com.lilysgame.calculatorjw:id/btnOne']").click(); //在点击完成1按键之后,等待5秒 //Thread.sleep(5000); //点击+ driver.findElementById("com.lilysgame.calculatorjw:id/btnAdd").click(); //点击2 driver.findElementById("com.lilysgame.calculatorjw:id/btnTwo").click(); //点等号 driver.findElementById("com.lilysgame.calculatorjw:id/btnEqual").click(); //定义预期结果变量 String expectValue = "7"; //获取实际结果,使用getAttribute("text") String acutalValue = driver.findElementById("com.lilysgame.calculatorjw:id/et_show").getAttribute("text"); //判断是否相等 if(expectValue.equals(acutalValue)){ System.out.println("加法运算实现是对的"); }else{ System.out.println("加法运算实现是错误的"); } } }
最新回复(0)