從本質上來說,微信小程序就是在微信中的一個H5頁面,但是微信用到了騰訊的X5框架來實現,因此如果要調試微信小程序,需要進行X5框架的設置;
設置方法:
在mumu模擬器中,只需要在微信中訪問debugmm.qq.com/?forcex5=true即可使用;(參考:https://www.cnblogs.com/xiaogongjin/p/11783801.html)
X5框架設置好之后,其元素定位就和H5頁面一樣,native使用appium的原生安卓定位,webview也可以使用selenium定位,注意切換context
注意:1.盡量使用微信小號,有一定被封的危險
2.如果保留消息記錄,記得設置DesiredCapabilities的noReset=true,防止微信消息被清空
3.可以在瀏覽器打開chrome://inspect,點擊inspect即可打開微信小程序webview的調試界面,使用DevTools必須 Fan*Qiang,如果已 Fan*Qiang,還是空白的,可以添加host解
決,host如下:
61.91.161.217 chrome-devtools-frontend.appspot.com
61.91.161.217 chrometophone.appspot.com
由於使用木木模擬器時,小程序閃退,下面是使用的是真機
import io.appium.java_client.android.AndroidDriver; import org.openqa.selenium.By; import org.openqa.selenium.chrome.ChromeOptions; import org.openqa.selenium.remote.DesiredCapabilities; import java.io.IOException; import java.net.URL; public class WeixinTest { public static void main(String[] args) throws IOException, InterruptedException { DesiredCapabilities desiredCapabilities = new DesiredCapabilities(); desiredCapabilities.setCapability("deviceName", "*****"); desiredCapabilities.setCapability("platformName", "Android"); desiredCapabilities.setCapability("platformVersion", "9.0"); desiredCapabilities.setCapability("appPackage", "com.tencent.mm"); desiredCapabilities.setCapability("appActivity", "com.tencent.mm.ui.LauncherUI"); /** * 下面的設置非常重要 */ // 支持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", "WEBVIEW_com.tencent.mm:toolsmp"); desiredCapabilities.setCapability(ChromeOptions.CAPABILITY, options); // 初始化會默認將chrome瀏覽器打開,需要將Browser置為空 desiredCapabilities.setBrowserName(""); desiredCapabilities.setCapability("chromedriverExecutable", "C:\\Users\\HJY\\Downloads\\chromedriver_win32weixin\\chromedriver.exe"); //可選參數 //不要重置簽名 desiredCapabilities.setCapability("noSign", true); //不清除緩存 desiredCapabilities.setCapability("noReset", true); //設置使用unicode鍵盤,讓自動化腳本實現過程中能夠輸入中文,成對使用,單獨使用下面的某一個屬性會ignore desiredCapabilities.setCapability("unicodeKeyboard", true); desiredCapabilities.setCapability("resetKeyboard", true); AndroidDriver driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), desiredCapabilities); Thread.sleep(5000); //找到並打開美團的微信小程序 driver.findElement(By.id("com.tencent.mm:id/r_")).click(); driver.findElement(By.xpath("//android.widget.EditText[@resource-id='com.tencent.mm:id/m7']")).sendKeys("美團"); Thread.sleep(2000); driver.findElement(By.id("com.tencent.mm:id/s5")).click(); Thread.sleep(10000); //切換到webview定位 System.out.println("所有的contextHandles:"+driver.getContextHandles()); System.out.println("切換前"); driver.context("WEBVIEW_com.tencent.mm:toolsmp"); System.out.println("切換后:"+driver.getContext()); Thread.sleep(5000); //叉掉彈屏廣告 driver.findElement(By.xpath("//wx-view[@class='newuser--close-btn']")).click(); Thread.sleep(1000); //點擊美食 driver.findElement(By.xpath("//wx-view[@data-name='美食']")).click(); Thread.sleep(1000); //切換到native定位 driver.context("NATIVE_APP"); Thread.sleep(5000); //定位native //點擊更多 driver.findElement(By.xpath("//android.widget.ImageButton[@content-desc='更多']")).click(); Thread.sleep(1000); //點擊回到首頁 String cancelButton="cmd /c start adb shell input tap 530,2250"; Runtime.getRuntime().exec(cancelButton); } }