概述
uiautomator2工作原理:
WebDriver script:就是我们的执行脚本
Appium:
客户端传递desired capabilities属性配置给Appium Server来创建一个会话,Appium Server会调用appium-uiautomator2-driver,同时将UiAutomator2 server的两个apk安装到测试设备上
1、appium-uiautomator2-server-vx.x.x.APK
2、appium-uiautomator2-server-debug-androidTest.apk
UiAutomator2 server两个apk的作用:
1、UiAutomator2 驱动模块,负责创建会话,安装UiAutomator2-server.apk到设备上,开启Netty(这是一个通信框架,相当于Bootstrap使用的SocketServer升级版本)
2、UiAutomator2服务器模块,当驱动模块创初始化完毕,服务器就会监听PC端Appium发送过来的请求,将请求发送给真正底层的UiAutomator2。
InitDriver.java类添加uiautomator获取驱动的方法:
/**
* 使用的是UIautomator模式,此模式下支持toast获取
* @param appPackage
* @param appActivity
* @param appWaitActivity
* @return
* @throws Exception
*/
public static AndroidDriver<AndroidElement> getDriverAlreadyInstallByUiautomator2(String appPackage,String appActivity) throws Exception{
DesiredCapabilities caps =commonCaps();
caps.setCapability(AndroidMobileCapabilityType.APP_PACKAGE, appPackage);
caps.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY, appActivity);
caps.setCapability(MobileCapabilityType.AUTOMATION_NAME, AutomationName.ANDROID_UIAUTOMATOR2);
AndroidDriver<AndroidElement> driver = new AndroidDriver<>(new URL(
"http://127.0.0.1:4723/wd/hub"), caps);
return driver;
}
private static DesiredCapabilities commonCaps(){
// caps变量是我们脚本告诉appium服务端的初始化参数
DesiredCapabilities caps = new DesiredCapabilities();
// 设备名称,但是这个参数在安卓上可以随便写,但是不能没有
caps.setCapability(MobileCapabilityType.DEVICE_NAME, "xxx");
// 表示使用appium自带的uicode输入法,该输入法支持中文并且会隐藏键盘
caps.setCapability(AndroidMobileCapabilityType.UNICODE_KEYBOARD, true);
// 表示在执行测试完成后,将设备的输入法重置回原来的
caps.setCapability(AndroidMobileCapabilityType.RESET_KEYBOARD, true);
// true表示不重签名app,但是selendroid模式是必须要重签名的
caps.setCapability(AndroidMobileCapabilityType.NO_SIGN, true);
//appium默认为uiautomator
caps.setCapability(MobileCapabilityType.AUTOMATION_NAME, "appium");
caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
// caps.setCapability("autoGrantPermissions", true);
// caps.setCapability(MobileCapabilityType.UDID, "192.168.2.193:5555");
return caps;
}
用例实现:登录知乎在密码错误的情况下会弹出toast提示框,并用来判断
//uiautomator2获取toast
public void loginGetToast() throws Exception{
try {
driver.findElementById("android:id/button3").click();
} catch (Exception e) {
System.out.println("没有弹框");
}
driver.findElement(MobileBy.AndroidUIAutomator("new UiSelector().text("邮箱")")).click();
driver.findElement(MobileBy.AndroidUIAutomator("new UiSelector().text("邮箱")")).click();
driver.findElementById("email_input_view").sendKeys("vop_jiangfeifei@163.com");
driver.findElementById("com.zhihu.android:id/password").sendKeys("28763234abc");
Boolean flag=true;
//显式等待
WebDriverWait wait=new WebDriverWait(driver, 10);
try {
//AndroidElement toast=(AndroidElement) wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@text='帐号或密码错误']")));
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@text='帐号或密码错误1']")));
//System.out.println(toast.getText());
} catch (Exception e) {
flag=false;
}
if(flag=true){
System.out.println("密码错误,提示正确");
}else{
System.out.println("密码错误,提示不正确");
}
}
测试代码:
public class ZhihuTestApp {
public static void main(String[] args) throws Exception {
AndroidDriver<AndroidElement> driver=null;
try {
driver=InitDriver.getDriverAlreadyInstallByUiautomator2("com.zhihu.android", "com.zhihu.android.app.ui.activity.MainActivity");
Login login =new Login(driver);
login.loginGetToast();
} catch (Exception e) {
e.printStackTrace();
}finally{
if(driver!=null){
driver.quit();
System.out.println("关闭成功");
}
}
}
}
最后
以上就是隐形皮卡丘为你收集整理的Uiautomator2与toast获取的全部内容,希望文章能够帮你解决Uiautomator2与toast获取所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复