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); } }

 

参考踩坑:https://www.cnblogs.com/4wheel/p/9954255.html

https://blog.csdn.net/qq_38741986/article/details/99702537

posted @ 2020-01-08 23:22  huiyii  阅读(1217)  评论(0编辑  收藏  举报