微信小程序自動化測試實踐


  由於騰訊系QQ、微信等都是基於騰訊自研X5內核,不是google原生webview(其實就是進行了二次定制)。實質上也是混合應用的一種,現在很多app產品也開始流行采用X5內核作為其內嵌web瀏覽服務,所以掌握X5內核混合應用自動化也是app自動化測試工程師必備技能。

  genymotion、夜神等模擬器是intel的X86架構,很多app安裝不了,比如微信、qq等(雖然說可以通過安裝arm解釋器來解決該問題,但是進行X5內核調試的話也會出現問題),建議最好是一台真實的手機來做。

  X5內核應用自動化方式和普通混合應用有非常多的差異,接下來以微信小程序舉例介紹怎么來開展X5內核的自動化

准備工作:

  1、java-client 5.0.3依賴包

  2、微信應用版本6.7.2

  3、科學上網工具(需要工具的同學加最下角QQ領取)

  4、手機端和PC端安裝chrome瀏覽器(注意版本最好對應一致)

  5、android手機(5.0+版本)

  6、chromedriver 2.26

  7、appium-desktop V1.5.0

步驟:

1、打開微信,在任意窗口輸入:debugx5.qq.com

在打開的界面中選擇信息->勾選是否打開TBS內核Inspector調試功能

2、手機通過usb連接到電腦,打開USB調試模式,通過adb devices命令檢測到設備

3、打開微信->發現->搜一搜,搜索檸檬班軟件測試,點擊對應小程序進入到主頁面

4、在chrome瀏覽器里面輸入chrome://inspect#devices

顯示的webview版本是57.xxx,這里就是微信X5內核的版本,不是android System webview版本,同樣也可以點擊inspect查看頁面元素:

 

可以看到當前就是一個html頁面,我們可以采取常規web元素定位方式來定位元素

注意事項:

  (1)頁面空白加載不出來,這是因為Google的inspect工具需要訪問到牆外的網站,所以需要有FQ工具或者VPN方式;

  (2)微信在新版本中對小程序調試入口加上了限制:在微信主窗口下來打開小程序,在chrome中通過inspect工具是檢測不到小程序對應的url入口的;

    解決方案:

    在微信->發現->搜一搜搜索小程序,即可發現在inspect工具中可以將對應url顯示出來。

  (3)還有一點需要注意,如果點擊右上角關閉了小程序之后,一定要記得從后台清理下對應的小程序進程(關閉之后小程序還在后台運行),再次點擊重啟小程序。

5、默認appium-desktop安裝之后里面自帶的chromedriver不是2.26的,需要手動去官網下載對應版本的chromedriver:

  http://chromedriver.storage.googleapis.com/index.html

  將其放到appium的chromedriver對應目錄中,我的是:

  C:\Users\Administrator\AppData\Local\appium-desktop\app-1.5.0\resources\app\node_modules\appium\node_modules\appium-chromedriver

6、微信/qq有很多的進程,我們要確定當前web頁面是位於哪個進程中:

確定我們當前微信的頁面運行在com.tencent.mm:toolsmp中

7、在desiredCapabilities中指定:

// 支持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:toolsmp");
desiredCapabilities.setCapability(ChromeOptions.CAPABILITY, options);
// 初始化會默認將chrome瀏覽器打開,需要將Browser置為空
desiredCapabilities.setBrowserName("");

8、根據chrome的inspect工具得到web元素的信息

測試流程如下:

  選擇檸檬班軟件測試小程序->點擊老師->滑動老師列表找到“歪歪”

  "老師"對應的xpath://*[@id="js-tab-bar"]/li[3]

  "歪歪"對應的xpath://em[text()='歪歪']

測試代碼對應如下:

// 休眠一下
Thread.sleep(5000);
// 找到微信的發現並點擊
androidDriver.findElementByAndroidUIAutomator("new UiSelector().text(\"發現\")").click();
// 點擊發現里面搜一搜
androidDriver.findElementByAndroidUIAutomator("new UiSelector().text(\"搜一搜\")").click();

Thread.sleep(2000);

// 點擊搜索框
androidDriver.findElement(By.id("com.tencent.mm:id/jd")).click();
        androidDriver.findElement(By.id("com.tencent.mm:id/jd")).sendKeys("檸檬班軟件測試");

Thread.sleep(2000);

// 點擊搜索結果中的檸檬班軟件測試(采用adb命令坐標點擊的方式)
execAdb("adb shell input tap 300 200");

Thread.sleep(4000);

// 點擊檸檬班軟件測試小程序
execAdb("adb shell input tap 300 500");

// 等待小程序加載完成
Thread.sleep(10000);

// 獲取到所有的contexts
System.out.println("所有的contexts:" + androidDriver.getContextHandles());

// 切換到小程序webview對應的context中
androidDriver.context("WEBVIEW_com.tencent.mm:toolsmp");
Thread.sleep(2000);

// 獲取到所有的handles
Set<String> windowHandles = androidDriver.getWindowHandles();
System.out.println("所有的windowsHandles" + windowHandles);

// 遍歷所有的handles,找到當前頁面所在的handle:如果pageSource有包含你想要的元素,就是所要找的handle
// 小程序的頁面來回切換也需要:遍歷所有的handles,切換到元素所在的handle
for (String windowHandle : windowHandles) {
    System.out.println("切換到對應的windowHandle:" + windowHandle);
    androidDriver.switchTo().window(windowHandle);
    Thread.sleep(2000);
    if (androidDriver.getPageSource().contains("檸檬班")) {
        break;
    }
}
// 點擊老師
androidDriver.findElement(By.xpath("//*[@id=\"js-tab-bar\"]/li[3]")).click();
        
// 通過js滾動到指定的元素 (這個元素已經在文檔中間已經存在,但是還是不可見的)
WebElement ele=androidDriver.findElement(By.xpath("//em[text()='歪歪']"));
Thread.sleep(2000);
// 將Driver實例化為js對象
JavascriptExecutor jExecutor=(JavascriptExecutor)androidDriver;
// 滑動到上面定位到的元素的位置
jExecutor.executeScript("arguments[0].scrollIntoViewIfNeeded(true);", ele);

Thread.sleep(2000);

到目前為止,微信小程序自動化代碼實現就完成了,后續按照自己的需求編寫代碼完成。

如果想要索取完整代碼,加下面Q即可。

 


免責聲明!

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



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