Chrome调试模式获取App混合应用H5界面元素

原文章地址http://blog.csdn.net/qq_19636353/article/details/53731254

浏览器的远程调试工具,使得我们可以通过PC上开启的控制台,调试手机浏览器中正在运行的代码。运行于 Android 4+系统的Chrome for Android 同样也可以配合ADB(Android Debug Bridge)实现桌面远程调试。桌面版Chrome32+已经支持免安装ADB即可实现远程调试移动设备页面/WebView 。

Android远程调试目前支持所有操作系统,并且支持以下: 
● 调试站点的页面 
● 调试安卓原生App中的WebView 
● 实时将安卓设备的屏幕图像同步显示到开发机器。 
● 通过端口转发(port forwarding)与虚拟主机映射(virtual host mapping)实现安卓移动设备与开发服务器进行交互调试。

而在最新的Android 4.4 Kitkat版本中,原本基于Android WebKit的WebView实现被换成基于Chromium的WebView实现。

移动端 
1. 在eclipse中配置AndroidSDK环境(Android6.0、ADT23.0) 
2. 将手机与PC通过USB连接,开启USB调试模式; 
3. 使用360手机助手或在dos窗口输入adb devices查看手机驱动连接是否成功;

PC端 
1. 在Chrome浏览器地址栏输入chrome://inspect,进入调试模式; 
2. 此时页面显示了手机型号、驱动名称、APP要调试的WebView名称; 
3. 点击inspect,若成功加载与APP端相同界面的调试页面,则配置成功; 
4. 若获取不到WebView或者调试页面预览框显示空白,则需要进行VPN破解–安装FQ软件(由于默认的DevTools使用的是appspot服务器,这在国内是需要翻越GWF)

chromedriver

Appium通过 chromedriver-port 9515进行通信,驱动安卓手机上的WebView;

查看手机系统应用Android System WebView显示的Chrome版本,下载对应的chromedriver并添加到Appium的chromedriver目录,保证驱动程序版本对应,Appium后台启动时会自动重启chromedriver,此时后台不会出现等待chromedriver启动现象;
  • 1
  • 2
  • 3
  • 4
//杀掉chromedriver进程并重启,要先切换到NATIVE_APP(包括微信端)
public static void RestartChromedriver() throws Exception{
    Runtime.getRuntime().exec("taskkill /F /im chromedriver.exe");
    System.setProperty("webdriver.chrome.driver", "D:\\Appium\\node_modules\\appium\\node_modules\\appium-chromedriver\\chromedriver\\win\\chromedriver.exe");
}
  • 1
  • 2
  • 3
  • 4
  • 5
端口被占用解决方案:http://jingyan.baidu.com/article/a501d80c26cd90ec620f5e5e.html
  • 1
  • 2

Appium切换context、切换webview

import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebElement;
import com.tms.app.itms.logs.Log;
import io.appium.java_client.android.AndroidDriver;

public class ITMS_GetElement{
    public static void getContextHandle(AndroidDriver<WebElement> driver) {
        Set<String> context = null ;
        for(int i=1;i<=20;i++){
            context = driver.getContextHandles();
            for(String contextName : context) {
                System.out.println(contextName);//打印当前上下文
                if(contextName!=null && contextName.contains("WEBVIEW_com.quantum.Tmsp7")||contextName.contains("WEBVIEW_com.tencent.mm:tools")){
                    switchTo_WEBVIEW(driver);
                    driver.getPageSource();
                    return;
                }
                if(i==20) assert false;
            }
            Log.goSleep(1);
        }
    }

    public static void switchTo_WEBVIEW(AndroidDriver<WebElement> driver) {
        String str = driver.currentActivity();//检查当前APP

        for(int k=0;k<30;k++){
            try {
                if(str.equals(".MainActivity")){
                    driver.context("WEBVIEW_com.quantum.Tmsp7");
                    return;
                }else if(str.equals(".plugin.webview.ui.tools.WebViewUI")){
                    driver.context("WEBVIEW_com.tencent.mm:tools");
                    return;
                }
            } catch (Exception e) {
                if(k<10){
                    Log.info("switch...");
                }if(k==30){
                    Log.fatal(driver, "switch fail!", e);
                }
            } finally{
                driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
            }
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

测试脚本(继承Selenium)

//loginSubmit
ITMS_GetElement.getContextHandle(driver);
driver.findElementById("username").sendKeys("15029200344");
driver.findElementById("password").sendKeys("111111");
driver.findElementByCssSelector("#loginSubmit").click();
// switchTo_NATIVE 获取当前地理位置——检查[允许]按钮
ITMS_GetElement.getAlertTitleNewThread(driver);//小米、华为
Thread.sleep(3000);
ITMS_GetElement.switchTo_WEBVIEW(driver);
driver.quit();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

其他

从Android 4.4+,Webkit是支持远程调试的,如果Appium中读取不到WebView,需要将app的debug模式打开,在app中配置如下代码(在WebView类中调用静态方法setWebContentsDebuggingEnabled):
  • 1
  • 2
if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.KITKAT) {
     WebView.setWebContentsDebuggingEnabled(true);
}
  • 1
  • 2
  • 3
由于大部分App的debug模式是关闭的,即便是内部App,比如QQ/微信,要去找一个开启了debug模式的版本还是比较麻烦的。因此需要使用借助第三方工具来强制开启任何App的Android webview debug模式,使之可以使用 chrome inspect。
  • 1
  • 2

收集网址

移动端Web开发调试之Chrome远程调试(Remote Debugging) 
http://blog.csdn.net/freshlover/article/details/42528643

Appium 微信 webview 的自动化技术 
https://testerhome.com/topics/6954

HTML5, WebKit, Chromium 
http://blog.csdn.net/milado_nju 
理解WebKit和Chromium: WebKit, WebKit2, Chromium和Chrome介绍 
http://blog.csdn.net/milado_nju/article/details/7292164

如何在Android App中建立WebView 
http://blog.csdn.net/tangcheng_ok/article/details/6951113

Selenium Webdriver元素定位的八种常用方式 
http://www.cnblogs.com/qingchunjun/p/4208159.html 
在选择定位方式的时候应该怎么选择: 
1. 当页面元素有id属性时,最好尽量用id来定位。但由于现实项目中很多程序员其实写的代码并不规范,会缺少很多标准属性,这时就只有选择其他定位方法。 
2. xpath很强悍,但定位性能不是很好,所以还是尽量少用。如果确实少数元素不好定位,可以选择xpath或cssSelector。 
3. 当要定位一组元素相同元素时,可以考虑用tagName或name。 
4. 当有链接需要定位时,可以考虑linkText或partialLinkText方式。

时间: 2024-08-17 14:14:55

Chrome调试模式获取App混合应用H5界面元素的相关文章

利用浏览器调试APP中的H5页面

安卓手机的情况下,可以用chrome浏览器来调试. 打开地址: chrome://inspect/#devices 手机用USB数据线连接电脑,并启动USB调试模式. 只要在APP中打开H5页面,界面就会显示该页面地址 点击inspect进入调试模式 之后就可以像调试浏览器页面一样调试了. 这个方法也可以用来查看APP中哪些页面调用的是H5的页面. 苹果手机可以用Safari自带的调试工具调试,在Safari浏览器工具栏-开发一栏下.

用Chrome devTools 调试Android手机app中的web页面。

(1) 手机要满足Android系统为4.4或更高版本,低版本不支持这种方式.(2) 确保App已经开启了webview的debug调试模式,由Android工程师协助.(2) 用usb数据线连接好手机与电脑.(3) 将手机中的 设置 - 开发人员工具 - USB调试功能打开.(4) 打开chrome://inspect/#devices,即单击chrome右上角控制按钮 - 更多工具 - 检查设备 - 勾选上 Discover USB devices(5) 在app中访问一个web页面,对应的

(一)Hybrid app混合开发模式

hybrid app是什么? 这里我们先看一下词条上的定义 Hybrid App:Hybrid App is a mobile application that is coded in both browser-supported language and computer language. They are available through application distribution platforms such as the Apple App Store, Google Play

获取调试模式

应用程序在开发时,会有一些功能只在调试阶段启用,应用发布时不再启动的功能,开发时根据调试环境启用功能,这时判断程序是否在调试模式是变得很有用了. /** * 判断应用程序是否处于调式模式 * @param context * @return */ public static boolean isDebugMode(Context context){ PackageManager pm = context.getPackageManager(); try{ ApplicationInfo info

VS Bug 当获取其他项目的代码时, F5 无法进入调试模式. 也不报错....

在64位的机子下, 被获用的项目使用X86时会出现. 就会出现   F5 无法进入调试模式. 也不报错.... 打断点也没有用. 在不加入X86项目的代码时, 又可以运行..   解决方案:   检查一下你的项目的运行平台是不是跟你的操作系统是一样的.. 要不就都使用Any CPU吧...     我是开发在VSTO项目时出现这个问题. 之种开发的时候是使用32位系统, Office 2010+VS2010. 正常开发使用. 现在使用新的机子, 使用64位系统,  VS2013+Office 2

chrome调试webview

手机:关于手机/版本号连续点击7次/开发者模式/usb调试模式 chrome:输入about:inspect 防止防火墙墙ip 远程调试需要FQ的wifi 否则无法在about:inspect所开窗口打开dev-tools 以下两篇文档供参考,有些方法未验证. 移动端Web开发调试之Chrome远程调试(Remote Debugging) 在智能手机还未普及时,移动设备的调试处处是alert的,这估计是最常用的办法了.以前很多时候为了预览页面在移动设备上的效果,需要先将页面上传到测试服务器,再将

Hybrid APP混合开发的一些经验和总结

Hybrid APP混合开发的一些经验和总结 写在前面: 由于业务需要,接触到一个Hybrid APP混合开发的项目.当时是第一次接触混合开发,有一些经验和总结,欢迎各位一起交流学习~ 1.混合开发概述 Hybrid App主要以JS+Native两者相互调用为主,从开发层面实现“一次开发,多处运行”的机制,成为真正适合跨平台的开发.Hybrid App兼具了Native App良好用户体验的优势,也兼具了Web App使用HTML5跨平台开发低成本的优势. 目前已经有众多Hybrid App开

不得不说的谷歌开发者模式:谷歌调试模式调试js代码总结

谷歌浏览器对开发者来说是一个很好的工具,确实能给开发者提供很多的方便,这是工作一年多以来,一个感触.谷歌浏览器可以在前端跟踪值传递,就像我们使用myeclipse进行debug一样,谷歌浏览器提供了强大的功能,使得开发者可以在前端跟踪值传递. 只要安装了谷歌浏览器,我们就可以使用谷歌开发者模式进行代码的调试,按F12进入开发者模式. 1,首先我们来说一下谷歌浏览器的控制台console 进入谷歌开发者模式以后,我们点击console进入控制台,在这里,我们可以很方便的进行js代码的调试.通常情况

Google Chrome 调试JS简单教程[更新]

题外话,刚开始我写这篇内容只是将自己了解的一些知识放上来,不巧的是我分析了我的来访日志,很多朋友都有这个需求,为了大家没有白来,我决定充实下这篇文章.最近更新时间2014-02-14 chrome版本: 32.0.1700.107 m 我是一名忠实Chrome迷,使用它已经快有2年的历史了,整体给我的感觉就是清爽,快速,简洁.又打小广告了……^_^,虽然我知道IE8+也有调试工具,包括火狐的什么XXBUG,但是我用过之后,个人还是十分偏爱chrome的debug. chrome对于在前端打拼的兄