原文章地址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方式。

转载于:https://www.cnblogs.com/111testing/p/7579932.html

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

  1. Hybrid APP混合开发(H5)

    创建一个getRequest.js文件方便多次使用 /***截取code*/ export const GetRequest = (data) => {var url = data // 获取u ...

  2. winapi获取和修改camera raw界面元素数据

    camera raw 界面如下: 需求就是根据 windows api 来操作界面右边的色温.色调.曝光等属性,进而对图片进行调色.根据 spy++ 捕获的窗口信息,理论上是可以拿到并修改值的. 根据 ...

  3. Chrome无头模式获取直播间弹幕

    场景: 获取DY直播间弹幕,并分类保存 安装第三方包: 经过调研,此处主要使用的是webdriver相关的包,也就是selenium,以及protobuf解析相关的包,如下: //安装google的p ...

  4. APP UI 自动化测试 H5页面元素定位

    使用 uc-devtools 代替 uiautomatorviewer 查找定位H5元素 由于uiautomatorviewer 只能定位APP原生页面: 所以要定位app H5 页面内的元素 使用 ...

  5. MuMu模拟器+Edge浏览器:Android原生APP嵌入的H5页面元素定位

    前提条件: 1.已安装MuMu模拟器 2.已配置adb环境 adb链接MuMu模拟器 C:\Users\shenyf>adb connect 127.0.0.1:7555 connected t ...

  6. 通过Appium启动设置和作业帮,获取app包名和界面名

    关闭当前的app是直接大返回,还是在后台运行的 driver.close_app() 每次命令完成以后,要加等待时间

  7. App混合应用Appium自动化测试框架技术难点

    前言 难点?Appium工具的坑太多了,一上百度搜索就是一箩筐各种解决方案,且不同人不同环境,实则静下心来分析,无非就是环境问题和使用者对框架的思考问题!为什么这么说呢?例如:app混合h5的自动化, ...

  8. 安卓手机USB调试模式打开方法

    USB 调试模式是安卓系统提供的一个用于开发工作的功能,使用该功能可以在电脑和安卓设备之间复制数据.在安卓设备上安装游戏软件等等.默认情况下,USB 调试模式是关闭的,所以需要手动打开它.打开了 US ...

  9. 开启企业微信调试模式

    前文 想不到吧,企业微信有调试模式,打开之后就是这样啦~ 界面跟我们的谷歌浏览器调试模式一模一样(但是有点卡~~) 下面来讲一下怎么开的, 正文开始~~~~ 正文 准备工作 企业微信PC版 pak文件 ...

最新文章

  1. laravel和dingoapi的结合使用
  2. liferay7.0 mysql_Liferay7 BPM门户开发之6: Activiti数据库换为mysql
  3. Google AI与Deepmind强强联合,加速神经网络稀疏化进程
  4. CentOS 7.3 安装配置RabbitMQ
  5. JAVA性能诊断与调优
  6. 随着“造车时代”的企业网络推广之下,富士康也想入圈造车?
  7. 这届年轻人连穷都不怕,还会怕冷?
  8. [云炬创业管理笔记]第三章打造优秀创业团队讨论1
  9. Windows下的搜索神器 —— everything
  10. java 类似xamarin_xamarin android如何将Java.Lang.Object类型转成C#类型
  11. 记录一种多个按钮中每次只能选中一个的实现方式
  12. 为知笔记 Markdown 新手指南
  13. 学习Python的好去处,微信公众号“Python小屋”
  14. opencv之解决对加载图片大小限制的问题
  15. 【GCC调试程序C语言问题】对‘ceil’未定义的引用/已经包含头文件仍然提示未定义的引用
  16. 设置现金流量科目必须录入
  17. Python菜鸟编程第十四课之正则表达式
  18. Android阿里云推送离线通知集成踩坑之路
  19. python 获取各pkg版本_Python pkg_resources.get_distribution方法代碼示例
  20. 对图像高通滤波matlab,高通巴特沃斯滤波器在MATLAB中对图像进行滤波

热门文章

  1. %3cphp和%3c php_PHP 编码安全
  2. leetcode - 155. 最小栈
  3. virtualbox禁用硬件虚拟化_Mac版Virtualbox6.1开启嵌套虚拟化
  4. c# npoi 2.5版本设置字体加粗_Python帮你做Excel——格式设置与画图
  5. java 发送带basic认证的http post请求实例代码_图解HTTP学习笔记(八)—确认访问用户身份的认证...
  6. echarts 仪表盘 文字位置_方法 | 用notion打造个人仪表盘
  7. 四元数姿态解算c语言例程_(21)用四元数插值来对齐IMU和图像帧
  8. 共享的网络如何让自己比别人快_如何用网络推广打造属于自己的网络品牌?
  9. 【windows】windows 11 安装解决 这台电脑无法运行 Windows 11
  10. python作品讲解_python实例作品