微信小程序自動化


背景:騰訊系QQ、微信是基於騰訊自研X5內核,不是谷歌原生webview,所以調試會有些許差異(有很多app廠商也開始采用X5內核)

注意:微信小程序只支持手機,不支持模擬器

一.手機連接電腦

(1)用usb線將手機連接電腦

(2)開發者模式

在手機設置-關於手機-版本號,點擊5下后手機處於開發者模式(部分手機需要輸入手機密碼才能打開開發者選項

 (3)進入開發者選項后打開usb調試-確定

 (4)選擇usb配置

 (5)電腦dos命令行輸入adbdevices檢測設備是否連接成功

 注意:不同的手機型號開發人員選項所在的位置可能會有所不同

二.打開微信小程序webview開關

微信聊天窗口輸入打開微信小程序開關的url

打開url后uc開發者工具才能識別到微信小程序

打開 :http://debugmm.qq.com/?forcex5=true
關閉:http://debugmm.qq.com/?forcex5=false
打開開關后還需要點擊以下的X5調試頁面url:http://debugx5.qq.com,並勾選信息-TBS settings-打開TBS內核inspector調試功能

三.uc開發者工具識別小程序的web元素信息

uc開發者工具識別到手機微信小程序的前提:1.手機連接好電腦,2.手機微信小程序的開關打開,3.打開微信小程序

uc開發者工具的結構:包含微信窗口,還有多個小程序窗口

四.確認微信小程序對應的進程名

微信里有好多進程,需要確定小程序位於哪個進程中

首先可以通過微信包名來篩選,再通過微信的activity篩選掉微信的進程號,另一個就是篩選的結果,再通過篩選結果的進程號來得到進程名

app的package和activity獲取:先在豌豆莢下載app的apk安裝包到本地路徑,再通過aapt bump badging apk本地路徑得到package和activity

package:

activity: 

用排除法確認微信小程序的進程名:

五.編寫腳本

1.小程序X5內核(webview)版本和chromeDriver版本匹配的時候不能按照上面的表格去匹配V2.40 chromeDriver;

2.打開測試app的代碼:必須加noReset設置,否則微信數據會被全部清空

//打開測試的app:與appium的檢查器設置的所需配置一樣
DesiredCapabilities desiredCapabilities=new DesiredCapabilities(); desiredCapabilities.setCapability("deviceName", "127.0.0.1:62001"); desiredCapabilities.setCapability("platformName", "Android"); desiredCapabilities.setCapability("appPackage", "com.tencent.mm"); desiredCapabilities.setCapability("appActivity", "com.tencent.mm.ui.LauncherUI"); //必須加noReset設置,否則微信數據會被全部清空 desiredCapabilities.setCapability("noReset",true);

3.X5內核參數配置

// 支持X5內核應用自動化配置
desiredCapabilities.setCapability("recreateChromeDriverSessions", true);
// ChromeOptions使用來定制啟動選項,因為在appium中切換context識別webview的時候,
// 把com.tencent.mm:toolsmp的webview識別成com.tencent.mm的webview.
// 所以為了避免這個問題,加上androidProcess: com.tencent.mm:toolsmp
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("androidProcess", "com.tencent.mm:appbrand2");    //此處填寫之前獲取到的小程序進程名
desiredCapabilities.setCapability(ChromeOptions.CAPABILITY, options);
// 初始化會默認將chrome瀏覽器打開,需要將Browser置為空
desiredCapabilities.setBrowserName("");

4.appium的服務地址

地址從appium檢查器

URL remoteUrl = new URL("http://localhost:4723/wd/hub");
driver = new AndroidDriver(remoteUrl, desiredCapabilities);

5.元素定位和操作

(1)下拉操作

TouchAction touchAction1=new TouchAction(driver);
int width=driver.manage().window().getSize().getWidth();      //獲取屏幕的寬和高,通過比例來滑動屏幕,即使更換手機屏幕分辨率,也不影響代碼的操作
int height=driver.manage().window().getSize().getHeight();
PointOption pointOption1=PointOption.point(width/2,height/4);      //把坐標換為pointoption類型,press需要的參數
PointOption pointOption2=PointOption.point(width/2,height*3/4);
Duration duration=Duration.ofSeconds(3);                 //把滑動時間換成waitaction類型,需要兩步。先把時間換成duration類型,再把duration轉換為waitoption類型
WaitOptions waitOptions=WaitOptions.waitOptions(duration);
touchAction1.press(pointOption1).waitAction(waitOptions).moveTo(pointOption2).release().perform();     //按下滑動起始點到滑動終點,再釋放

(2)點擊微信小程序,切換到微信小程序

driver.findElement(MobileBy.AndroidUIAutomator("new UiSelector().text(\"text\")")).click();   //點擊微信小程序,無法通過id定位,只能通過text定位
Thread.sleep(5000); //由於下一步沒有不是元素定位,因此只能加硬性等待等待加載,隱式或顯式等待只能用於等待元素定位
System.out.println(driver.getContextHandles()); //獲取所有的contexts,得到已知contexts后切換
driver.context("WEBVIEW_com.tencent.mm:appbrand0"); //切換到微信小程序的webview視圖
//由於小程序打開會有多個web窗口,需要找到正確的窗口來切換句柄,才能找到里面的元素
Set<String> allwinhandle=driver.getWindowHandles(); //獲取所有窗口句柄
for (String handle:allwinhandle){
if (driver.getTitle().equals("騰訊課堂檸檬班軟件測試")){ 通過窗口的標題來判斷
break;
}else {
driver.switchTo().window(handle);如果不是要找的窗口,則繼續切換句柄
}
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM