日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何让页面初始化的时候实现点击事件_辅助程序实现黑盒自动化测试的常见问题...

發布時間:2025/3/15 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何让页面初始化的时候实现点击事件_辅助程序实现黑盒自动化测试的常见问题... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景輔助程序(Accessibility)在大多數機型上具有重啟設備后被激活的特性,可以完成Android測試框架(Uiautomator1.0、Uiautomator2.0)無法實現的功能。本文介紹如何搭建輔助程序和如何利用輔助程序進行黑盒測試。并總結了利用輔助程序執行黑盒測試遇到的問題,并在文末總結了各測試方案的應用場景。

輔助程序實現黑盒自動化測試的特點

輔助功能相較于測試框架在部分場景下有一定的優勢,可以做更多場景的測試:

1. 運行輔助程序過程中可以執行Uiautomator1.0或Uiautomator2.0測試用例,執行測試用例過程中輔助程序會被中斷,當測試用例執行結束后輔助程序會恢復運行;

2. 大部分機型重啟設備,服務會自動運行,可以測試部分app開機自啟功能等功能;

3. 由于是App方案,所以可以直接讀取手機短信,設備插上手機卡后,可以在邏輯數據層攔截短信驗證碼,實現程序的驗證碼登陸;

4.輔助程序有較高的優先級,程序保活能力非常強;

由于測試方式是基于Accessibility服務的app,所以也有很多限制:

1. 和被測應用不在同一進程內,相較于Uiautomator2.0只能做黑盒測試;

2. 由于是App實現方案,所以在各系統上存在權限問題,不能像Uiautomator1.0一樣獲取系統運行信息(最近運行的應用、當前顯示的activity)

3. 執行點擊動作需要使用AccessibilityNodeInfo#performAction方法,但是此方法只能在clickable=true時生效;

4. 無法直接操作屏幕,需要借助AccessibilityService的手勢功能實現滑動屏幕、點擊屏幕等動作;

5. 由于系統限制,高版本系統中啟動其他App失敗;

6. 發送鍵盤事件受限制,只能發送Home、back、打開通知、打開快捷設置、打開電源彈窗等有限功能;

7. 輔助程序異常退出時會關閉輔助程序配置,需要在設置頁面手動配置;

輔助程序服務配置與黑盒自動化測試實現

自定義AccessibilityService服務,在服務內重載系統方法,

初始化測試服務:重載onServiceConnected方法

當服務激活時調用此方法,在這里進行服務的初始化工作,主要配置onAccessibilityEvent方法感知的事件類型和服務配置。

1、獲取AccessibilityServiceInfo 對象:

getServiceInfo()方法獲取當前使用的AccessibilityServiceInfo對象,如果方法返回null,直接通過AccessibilityServiceInfo()構造方法創建。?AccessibilityServiceInfo?accessibilityServiceInfo?=?getServiceInfo();
if?(accessibilityServiceInfo?==?null)?{
????accessibilityServiceInfo?=?new?AccessibilityServiceInfo();
????setServiceInfo(accessibilityServiceInfo);
}

2、設置AccessibilityServiceInfo#eventTypes標記過濾AccessibilityEvent事件類型:

直接通過或運算符(|)添加標記,下面代碼配置過濾控件點擊、控件選擇、控件獲取焦點和文本變化事件,發生配置的事件時會調用onAccessibilityEvent方法。accessibilityServiceInfo.eventTypes?|=?AccessibilityEvent.TYPE_VIEW_CLICKED;
accessibilityServiceInfo.eventTypes?|=?AccessibilityEvent.TYPE_VIEW_SELECTED;
accessibilityServiceInfo.eventTypes?|=?AccessibilityEvent.TYPE_VIEW_FOCUSED;
accessibilityServiceInfo.eventTypes?|=?AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED;

3、 設置AccessibilityServiceInfo#flags配置測試能力:

下面的代碼在默認配置基礎上增加WebView測試能力。accessibilityServiceInfo.flags?|=?AccessibilityServiceInfo.DEFAULT;
accessibilityServiceInfo.flags?|=?AccessibilityServiceInfo.FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY;

AccessibilityServiceInfo.FLAG_REQUEST_FILTER_KEY_EVENTS標記慎用,如果增加此標記,輔助程序會攔截設備按鍵事件,會導致點擊返回鍵、home鍵無效。

4、更新配置信息:
需要調用
AccessibilityServiceInfo#setServiceInfo(AccessibilityServiceInfo info)
方法更新配置。

重載
onAccessibilityEvent(AccessibilityEvent accessibilityEvent)
方法,感知頁面變化。

當發生頁面變化時回調此方法,可用于觸發自動處理彈窗的業務

重載onInterrupt()方法,釋放資源

當系統中斷輔助服務時調用(例如執行自動化測試用例),可以在這個方法內釋放資源。

配置測試服務

配置清單文件:

需通過meta-data標簽指定accessibilityservice配置文件,該文件位于res/xml文件夾下。<serviceandroid:label="輔助按鍵服務"android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"android:exported="true"android:directBootAware="true"android:name=".service.TaskAccessibilityService">
????<intent-filter>
????????<action?android:name="android.accessibilityservice.AccessibilityService"/>
????intent-filter>
????<meta-dataandroid:name="android.accessibilityservice"android:resource="@xml/accessibility_service_config"?/>
service>

屬性介紹:

accessibilityservice配置輔助程序屬性:

android:description 配置輔助程序描述信息,在設置頁面中顯示

android:accessibilityFeedbackType 反饋方式

android:canPerformGestures 模擬手勢配置,輔助程序滑動屏幕時必須配置此屬性為true

android:accessibilityFlags
等同AccessibilityServiceInfo#flags的設置,可以在代碼中動態配置

res/xml/accessibility_service_config.xml文件信息:

<?xml ?version="1.0"?encoding="utf-8"?>
<accessibility-service?xmlns:android="http://schemas.android.com/apk/res/android"android:description="@string/accessibility_service_description"android:accessibilityFeedbackType="feedbackAllMask"android:canRetrieveWindowContent="true"android:canPerformGestures="true"android:notificationTimeout="100"android:accessibilityFlags="flagDefault"
????/>

AccessibilityService支持動作

下面是AccessibilityService可以直接調用的方法概述,通過下面這些方法可以獲取UI測試過程中必要的數據和執行測試動作。

performGlobalAction方法參數為AccessibilityNodeInfo的靜態常量:

dispatchGesture實現點擊、滑動滑動屏幕

系統SDK<24時無法點擊和滑動屏幕,需要通過AccessibilityNodeInfo的performAction(int action)方法實現UI操作,參數指定ACTION_ACCESSIBILITY_FOCUS獲取焦點、ACTION_LONG_CLICK執行長點擊、執行ACTION_CLICK點擊。

屏幕滑動和點擊方法是借助dispatchGesture方法模擬手勢實現的,通過Path指定屏幕滑動路徑,調用dispatchGesture方法實現Path指定的滑動方式。具體實現代碼如下:Path?mPath?=?new?Path();
mPath.moveTo(startX,?startY);//滑動的起始點
mPath.lineTo(endX,?endY);//滑動終點。不指定lineTo的坐標,只配置moveTo坐標時執行點擊動作,點擊位置為moveTo指定的坐標。
????dispatchGesture(new?GestureDescription.Builder().addStroke(new?GestureDescription.StrokeDescription
????????????(mPath,?50,?500)).build(),?new?GestureResultCallback()?{
????????@Override
????????public?void?onCompleted(GestureDescription?gestureDescription)?{
????????????super.onCompleted(gestureDescription);
????????????System.out.println("模擬手勢成功");
????????}

????????@Override
????????public?void?onCancelled(GestureDescription?gestureDescription)?{
????????????super.onCancelled(gestureDescription);
????????????System.out.println("模擬手勢失敗");
????????}
????},?null);
}?else?{
????System.out.println("系統不支持"?+?Build.VERSION.SDK_INT);
}

App實現黑盒自動化測試痛點的解決

高版本系統通過intent啟動APP失敗

Android高版本系統對后臺程序啟動應用做了嚴格限制,解決這個問題有下面兩種方案

1. 輔助程序實現懸浮窗功能,在整個測試流程中App屬于前臺應用,具有啟動其他App的權限。缺點:各版本系統適配麻煩,測試過程中會檢測到懸浮窗。

2. 通過UI操作啟動App,在桌面滑動尋找被測應用的Launcher圖標,然后通過點擊操作打開App。

AccessibilityNodeInfo執行performAction失敗

performAction方法執行失敗是因為對應的AccessibilityNodeInfo不具有對應的操作屬性,比如執行點擊操作時AccessibilityNodeInfo#isClickable()方法返回false,此時點擊操作就會失敗。有兩種解決方案:

1. 尋找響應事件的AccessibilityNodeInfo執行performAction操作

由于當前AccessibilityNodeInfo無法響應點擊事件,那么尋找AccessibilityNodeInfo#isClickable()返回true的父控件執行操作。public?boolean?clickNode(AccessibilityNodeInfo?nodeInfo){
????AccessibilityNodeInfo?actionNode=null;
????while?(true){
????????actionNode=nodeInfo.getParent();
????????//循環時防止空指針異常
????????if(actionNode==null){
????????????return?false;
????????}
????????if(actionNode.isClickable()){
????????????break;
????????}
????}
????//可能存在所有父控件均不可點擊情況
????if(actionNode==null){
????????return?false;
????}
????actionNode.performAction(AccessibilityNodeInfo.ACTION_CLICK);
????return?false;
}
2. 如果SDK >= 24,則計算AccessibilityNodeInfo的屏幕坐標,然后點擊對應的屏幕坐標即可。public?boolean?clickNode(AccessibilityNodeInfo?nodeInfo){
????if(Build.VERSION.SDK_INT?>=?Build.VERSION_CODES.N){
????????//獲取控件的屏幕坐標
????????Rect?rect=new?Rect();
????????nodeInfo.getBoundsInScreen(rect);
????????//點擊屏幕坐標
????????clickScreen(rect.centerX(),rect.centerY());
????????return?true;
????}else?{
????????return?false;
????}
}

public?void?clickScreen(int?x,?int?y)?{
????Path?mPath?=?new?Path();
????mPath.moveTo(x,?y);//配置點擊坐標

????if?(Build.VERSION.SDK_INT?>=?Build.VERSION_CODES.N)?{
????????dispatchGesture(new?GestureDescription.Builder().addStroke(new?GestureDescription.StrokeDescription
????????????????(mPath,?50,?50)).build(),?new?GestureResultCallback()?{
????????????@Override
????????????public?void?onCompleted(GestureDescription?gestureDescription)?{
????????????????super.onCompleted(gestureDescription);
????????????????System.out.println("點擊成功");
????????????}

????????????@Override
????????????public?void?onCancelled(GestureDescription?gestureDescription)?{
????????????????super.onCancelled(gestureDescription);
????????????????System.out.println("點擊失敗");
????????????}
????????},?null);
????}?else?{
????????System.out.println("系統不支持"?+?Build.VERSION.SDK_INT);
????}
}

選擇測試方案的建議

以上就是通過App實現黑盒測試的簡單介紹,再具體的信息可以查閱Android源碼,下面介紹一下幾種測試方案的使用場景:

UiAutomator1.0

權限:Shell權限,可以反射系統API實現常用功能,可以繞過Android安全機制,讀取最近運行APP、正在運行進程、強殺其他應用;

保活:保活能力較強,不會被Android系統釋放,可以用nohup模式異步運行,即使拔掉數據線也不影響服務(諾基亞手機除外);

場景推薦:?適用多App通用測試腳本,便于對腳本做項目擴展;提供遠程手機服務接口。Android R(11)模擬器不支持,兼容Android R系統的腳本需要注意。

UiAutomator2.0

權限:與被測App運行在相同進程內部,與被測APP具有相同權限;

保活:保活能力差,被測App進程結束時,腳本即停止運行;

場景推薦:可以直接操作被測App的方法,可以用于白盒測試,對長期維護的重點項目可以用來進行單元測試和復雜業務測試。

輔助程序

權限:單獨的App,跨進程操作,需單獨申請app權限;

保活:由于是Android專用場景的服務,所以保活能力非常強,部分機型即使重啟后服務依然存在,且不影響UiAutomator測試用例的執行,用例執行結束后服務自動恢復;

場景推薦:殘障人士輔助APP;設備維護服務;自動初始化程序運行環境等

本文轉載自開測
往期精彩回顧

2019年度精選文章

Linux中用戶的簡介與管理

為什么我們要從MySQL遷移到TiDB?


360技術公眾號

技術干貨|一手資訊|精彩活動

掃碼關注我們

總結

以上是生活随笔為你收集整理的如何让页面初始化的时候实现点击事件_辅助程序实现黑盒自动化测试的常见问题...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 黄色三级片毛片 | 一区二区三区入口 | 国产一区二区免费在线 | 色婷婷成人 | 国产日韩精品电影 | 尤物videos另类xxxx| 美女日批网站 | 亚洲精品乱码久久久久久 | 成年人免费看 | 成年人看的羞羞网站 | 欧美综合久久久 | 欧美在线免费观看视频 | 欧美理论片在线观看 | 免费中文字幕日韩欧美 | 午夜爱爱影院 | 黄瓜视频污在线观看 | 艳妇乳肉豪妇荡乳xxx | 成年人毛片 | 人人免费操 | 午夜电影天堂 | 直接看的毛片 | 亚洲伊人色| 国产精品一区二区6 | 丁香av| 日韩a视频 | 色偷偷综合网 | 欧美日韩亚洲国产另类 | 岛国一区 | av日韩av| 色吊丝中文字幕 | 国产精品zjzjzj在线观看 | 顶级黄色片 | 欧美久久久一区二区三区 | 俄罗斯黄色大片 | 天天看av | 九九黄色大片 | 日批黄色片 | 亚洲国产精品系列 | 精品在线视频播放 | 日本成人综合 | 爱情岛论坛亚洲品质自拍视频 | 国产精品网站入口 | 国产黄页 | 这里有精品 | 97在线观视频免费观看 | 天天久久久 | 午夜亚洲AV永久无码精品蜜芽 | 噜噜噜久久,亚洲精品国产品 | 可以免费看av | 性中国古装videossex | 欧美最顶级a∨艳星 | 国产精品久久一区二区三区 | 中文字幕免费视频 | 国产精品天美传媒沈樵 | 91在线视频在线观看 | 青青草免费观看 | 1024香蕉视频 | 黄色小视频免费网站 | 欧美10p| 亚洲精品免费观看 | 嫩草大剧院 | 秋霞在线一区 | 亚洲啪| 亚洲a毛片| 国产成人精品久久二区二区 | 日本在线h | 日日操狠狠干 | 99精品毛片 | 粉嫩av一区二区三区免费观看 | 国产欧美久久久 | 人人干97 | 国产精品一二三区 | 国产性猛交普通话对白 | 国产九九在线 | 国产精品美女久久久久图片 | 东北少妇不戴套对白第一次 | 亚洲无人禁区 | 日韩午夜视频在线 | 制服诱惑一区二区三区 | 日韩欧美中文字幕精品 | 欧美成人h | 永久免费看黄网站 | 男女aa视频 | 日韩在线观看中文字幕 | 交视频在线播放 | 又色又爽又黄18网站 | 春色伊人 | 伊人国产视频 | 97人妻精品一区二区免费 | 一区二区福利 | 国产情侣呻吟对白高潮 | 国语对白一区二区三区 | 台湾佬在线 | 欧美自拍偷拍第一页 | 日本熟妇毛茸茸丰满 | 777黄色| 乱色欧美| 18无套直看片红桃 | 69久人妻无码精品一区 |