一.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)所需功能配置:
package和Activity获取: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视图");