首页 > 技术文章 > hybrid应用自动化

scarlettlie 2021-06-14 13:20 原文

一.hybrid介绍

hybrid是一种混合app,将h5页面嵌入native原生页面。

基于uiautomator+chromedriver。native部分走uiautomator,web部分走chrome,两者结合混搭,从而实现hybrid自动化

二.配置步骤

1.在app源码中打开webview调试模式(如果没有打开,uc开发者工具无法识别到app的web页面)

webview.setWebContentsDebuggingEnabled(true);     //需要开发帮忙打开

2.手机连接电脑

(1)用usb线将手机连接电脑

(2)开发者模式

在手机设置-关于手机-版本号,点击5下后手机处于开发者模式(部分手机需要输入手机密码才能打开开发者选项

 (3)进入开发者选项后打开usb调试-确定

 (4)选择usb配置

 (5)电脑dos命令行输入adbdevices检测设备是否连接成功

注意:不同的手机型号开发人员选项所在的位置可能会有所不同

3.native部分

通过appium来进行定位:用appium定位元素

(1)主机IP为127.0.0.1,再启动服务器

 (2)点击启动检查器会话

 (3)所需功能配置:

packageActivity获取:aapt dump badging D:\rubish\apk\bilibili.apk

 

 

 (4)点击开启会话

在手机安装app,并且app打开的情况下,点击开启会话,开始抓取app页面元素

4.web/h5部分

(1)uc开发者工具

安装uc开发者工具,

手机打开开发者模式连接电脑,

打开要测试的hybrid app,进入h5页面,

打开安装好的开发者工具,如图:

(2)chrome驱动

下载对应版本的chrome驱动:https://npm.taobao.org/mirrors/chromedriver

对应版本:根据uc开发者工具的展示的手机webview版本,找到和手机webview最近的chromedriver版本下载

替换appium自带的chromedriver.exe

chromedriver.exe地址:\resources\app\node_modules\appium\node_modules\appium_chromedriver\chromedriver\win

三.脚本编写步骤

1.自动化前置代码

//打开app,和appium中设置的所需功能配置一样
DesiredCapabilities desiredCapabilities=new DesiredCapabilities();
desiredCapabilities.setCapability("platformName", "Android");
desiredCapabilities.setCapability("platfomVersion", "10");
desiredCapabilities.setCapability("deviceName", "HUAWEI P40");
desiredCapabilities.setCapability("appPackage", "com.lemon.lemonban");
desiredCapabilities.setCapability("appActivity", "com.lemon.lemonban.activity.WelcomeActivity");
desiredCapabilities.setCapability("ensureWebviewsHavePages", true);
desiredCapabilities.setCapability("noReset", true); //不清除数据
URL remoteurl=new URL("http://localhost:4723/wd/hub"); //appium的服务地址:来自appium的检查器
driver=new AndroidDriver(remoteurl,desiredCapabilities);

2.先点击进入webview视图,但是并未切换到contexts;

driver.findElement(MobileBy.AndroidUIAutomator("new UiSelector().text(\"柠檬社区\")")).click();

3.再获取到所有的contexts

System.out.println(driver.getContextHandles());

4.切换到webview试图

driver.context("webview视图");

5.元素定位和执行操作

driver.findElement(By.xpath("//a[@class=\"index-bottom__item\"][3]")).click();

6.切换回native视图

driver.context("native视图");

推荐阅读