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获取驱动的方法:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36/** * 使用的是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提示框,并用来判断
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28//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("密码错误,提示不正确"); } }
测试代码:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17public 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获取内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复