appium(七)微信小程序
从本质上来说,微信小程序就是在微信中的一个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); } }