Appium 微信 webview 的自動化技術


Appium 微信 webview 的自動化技術

 

最近好多人問微信webview自動化的事情, 碰巧我也在追微信webview的自動化和性能分析方法. 先發出來一點我的進展給大家參考下. 此方法用於Android平台, iOS請自行解決

 

微信的設置

用微信打開debugx5.qq.com, 這是個微信的x5內核調試頁面. 你可以在任何聊天窗口內輸入這個網址. 並打開它. 勾選”是否打開TBS內核Inspector調試功能”


使用ChromeDriver編寫測試用例

首先安裝ChromeDriver
從官方下載或者從你的appium的安裝路徑里面找chromedriver. 在appium的執行日志里面其實也會打印chromedriver的路徑的
然后在電腦上啟動它, 設置好端口

chromedriver --url-base=wd/hub --port=8000

 

可以使用selenium或者appium的客戶端去編寫測試用例.
如下是我的scalatest的測試用例. 大家可以自己用其他的語言實現

test("test chromedriver weixin") { val options = new ChromeOptions() options.setExperimentalOption("androidPackage", "com.tencent.mm") options.setExperimentalOption("androidUseRunningApp", true) options.setExperimentalOption("androidActivity", ".plugin.webview.ui.tools.WebViewUI") options.setExperimentalOption("androidProcess", "com.tencent.mm:tools") val capability = DesiredCapabilities.chrome() capability.setCapability(ChromeOptions.CAPABILITY, options) val url = "http://127.0.0.1:8000/wd/hub" val driver = new AndroidDriver[WebElement](new URL(url), capability) driver.get("https://testerhome.com/topics/6954") println(driver.getPageSource) driver.quit() }

使用appium編寫測試用例

有人會經常問為什么android上appium不能自動化微信webview, 其實是可以的. 主要是目前的appium有個bug導致的. 
在appium中context的切換時, 沒有帶上一個關鍵的androidProcess配置導致的. 
他會導致appium識別webview的時候, 把com.tencent.mm:tools的webview識別成com.tencent.mm的webview. 從而導致context切換失敗.

正確的用appium測試微信h5的方法如下

test("test weixin h5") { val capability = new DesiredCapabilities() capability.setCapability("app", "") capability.setCapability("appPackage", "com.tencent.mm") capability.setCapability("appActivity", ".ui.LauncherUI") capability.setCapability("deviceName", "emulator-5554") capability.setCapability("fastReset", "false") capability.setCapability("fullReset", "false") capability.setCapability("noReset", "true") //capability.setCapability("unicodeKeyboard", "true") //capability.setCapability("resetKeyboard", "true") //關鍵是加上這段 val options = new ChromeOptions() options.setExperimentalOption("androidProcess", "com.tencent.mm:tools") capability.setCapability(ChromeOptions.CAPABILITY, options) val url = "http://127.0.0.1:4723/wd/hub" val driver = new AndroidDriver[WebElement](new URL(url), capability) println(driver.getPageSource) driver.findElementByXPath("//*[@text='我']").click driver.findElementByXPath("//*[@text='收藏']").click driver.findElementByXPath("//*[contains(@text, '美團外賣')]").click println(driver.getPageSource) println(driver.getContextHandles) driver.context("WEBVIEW_com.tencent.mm:tools") println(driver.getPageSource) }

最關鍵的就是這句

val options = new ChromeOptions() options.setExperimentalOption("androidProcess", "com.tencent.mm:tools") capability.setCapability(ChromeOptions.CAPABILITY, options)

后記

之前測試加上ChromeOptions配置的時候沒有成功, 我以為是appium不支持ChromeOptions, 就給appium-android-driver提交了一個PR
后來jlipps提醒了我一下

 

我就又追查了幾遍, 最后發現是我本地安裝appium時候加上的http_proxy環境變量干擾了ChromeDriver的執行.
Appium其實是支持ChromeOptions的

 

結論也就是現在的Appium其實是可以完美的做微信自動化的

 

我在想我是不是國內第一個提供微信webview自動化方法的人 
借鑒此思路的同學轉發請注明原鏈. https://testerhome.com/topics/6954

 


免責聲明!

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



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