腾讯Android自动化测试实战3.3.3 修改Robotium以支持X5WebView

简介:

3.3.3 修改Robotium以支持X5WebView

本节中的X5WebView指QQ浏览器团队出品的腾讯X5内核中的WebView。除了QQ、微信、应用宝等众多腾讯内部产品在使用X5内核外,京东、58同城等众多腾讯外部的合作伙伴也在使用X5内核。

腾讯X5网站:http://x5.tencent.com/。

然而Robotium本身并不支持获取X5WebView中的元素,因此无法对使用了X5内核的Web页面进行自动化测试,而通过3.2.2节中介绍的Robotium支持WebView原理可知,只要对Robotium稍加改造,即可使用同样的原理获取WebElement对象,完成对X5WebView自动化的支持。

这里再概述一下Robotium支持WebView的过程,以便理解为何Robotium不支持X5以及如何修改。

步骤1:获取目标WebView。

如代码清单3-13所示,代码final WebView webView = viewFetcher.getFreshestView (viewFetcher.getCurrentViews(WebView.class));调用ViewFetcher类获取当前界面中的WebView,而该WebView是android.webkit.WebView。

步骤2:做执行JS前的准备工作。

如代码清单3-13所示,final String javaScript = prepareForStartOfJavascriptExecution();调用prepareForStartOfJavascriptExecution(),该方法还调用了如代码清单3-22所示的代码,将WebSettings是否允许执行JS设置为True(系统默认是False)。然后还设置了WebView的WebChromeClient(WebChromeClient用于辅助WebView处理Javascript的对话框、提示框等)。从这里可以看出Robotium使用的是继承自android.webkit.WebChromeClient的RobotiumWebClient。

代码清单3-22 RobotiumWebClient.enableJavascriptAndSetRobotiumWebClientd

/**

 * Enables JavaScript in the given {@code WebViews} objects.

 *

 * @param webViews the {@code WebView} objects to enable JavaScript in

 */

 

public void enableJavascriptAndSetRobotiumWebClient(List<WebView> webViews, WebChromeClient originalWebChromeClient){

    this.originalWebChromeClient = originalWebChromeClient;

 

    for(final WebView webView : webViews){

 

        if(webView != null){

            inst.runOnMainSync(new Runnable() {

                public void run() {

                   //WebSettings开启JS

                    webView.getSettings().setJavaScriptEnabled(true);

                    webView.setWebChromeClient(robotiumWebClient);

 

                 }

            });

        }

    }

}

步骤3:在指定WebView中执行相应JS。

如代码清单3-13所示,最后调用webView.loadUrl("javascript:" + javaScript + function);方法在指定的WebView中执行相应片段的JS代码。

从以上核心步骤中可以看出,Robotium不支持X5的原因在于,首先,其获取目录WebView时,是获取android.webkit.WebView中的WebView;其次,辅助处理JS的WebChromeClient也是继承自android.webkit.WebChromeClient。而X5内核中的WebView并不是继承自android.webkit.WebView,X5内核中的WebChromeClient也不是继承自android.webkit.WebChromeClient,因此Robotium没法获取X5内核中的目标WebView,也就没法在目标WebView中执行JS并提取WebElement元素。了解个中缘由后,就可以稍加改造以支持X5WebView。

如图3-15所示为以外部引用(即该jar包的类并不实际打包进测试工程,仅在IDE调试时用。当调用相应的类时,寻找的是被测工程中的相应的类)的方式导入X5提供的SDK。

 

图3-15 导入X5提供的SDK

在获取目标WebView时,相应地修改成X5 SDK中的WebView。如图3-16所示,获取目标WebView时修改为com.tencent.smtt.sdk.WebView。

 

图3-16 修改目标WebView

同样地,修改WebChromeClient为继承自com.tencent.smtt.sdk.WebChromeClient中的TxWebChromeClient,然后在WebView中设置WebChromeClient时使用TxWebChromeClient,如图3-17所示。

 

图3-17 修改目标WebChromeClient

对于其他有相应的WebView或WebChromeClient调用的地方,均修改成X5 SDK中对应的WebView及WebChromeClient,修改完成后,将相应的类带上前缀以便区分,如图3-18所示。

 

图3-18 修改后的类

当需要获取使用了X5内核的Web元素时,调用TxWebUtils类中的相应方法即可。如图3-19所示,与Robotium原有的WebUtils使用方法一致,至此,完成了对X5内核的支持。

 

图3-19 TxWebUtils中的类方法

相关文章
|
2月前
|
运维 应用服务中间件 持续交付
自动化运维的利器:Ansible实战应用
【9月更文挑战第33天】本文将带你深入理解Ansible,一个强大的自动化运维工具。我们将从基础概念开始,逐步探索其配置管理、任务调度等功能,并通过实际案例演示其在自动化部署和批量操作中的应用。文章旨在通过浅显易懂的语言和实例,为读者揭开Ansible的神秘面纱,展示其在简化运维工作中的强大能力。
185 64
|
3月前
|
运维 安全 应用服务中间件
自动化运维的利剑:Ansible实战应用
【9月更文挑战第24天】在现代IT基础设施的快速迭代与扩展中,自动化运维成为提升效率、保障稳定性的关键。本文将深入探讨Ansible这一流行的自动化工具,通过实际案例分析其如何简化日常运维任务,优化工作流程,并提高系统的可靠性和安全性。我们将从Ansible的基础概念入手,逐步深入到高级应用技巧,旨在为读者提供一套完整的Ansible应用解决方案。
|
1月前
|
运维 监控 应用服务中间件
自动化运维的利器:Ansible实战应用
【10月更文挑战第41天】在现代IT运维领域,自动化已成为提高效率、减少错误的关键。Ansible作为一种简单而强大的自动化工具,正被越来越多的企业采纳。本文将通过实际案例,展示如何使用Ansible简化日常运维任务,包括配置管理和批量部署等,旨在为读者提供一种清晰、易懂的自动化解决方案。
28 1
|
1月前
|
运维 Ubuntu 应用服务中间件
自动化运维工具Ansible的实战应用
【10月更文挑战第36天】在现代IT基础设施管理中,自动化运维已成为提升效率、减少人为错误的关键手段。本文通过介绍Ansible这一流行的自动化工具,旨在揭示其在简化日常运维任务中的实际应用价值。文章将围绕Ansible的核心概念、安装配置以及具体使用案例展开,帮助读者构建起自动化运维的初步认识,并激发对更深入内容的学习兴趣。
65 4
|
1月前
|
前端开发 数据管理 测试技术
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第27天】本文介绍了前端自动化测试中Jest和Cypress的实战应用与最佳实践。Jest适合React应用的单元测试和快照测试,Cypress则擅长端到端测试,模拟用户交互。通过结合使用这两种工具,可以有效提升代码质量和开发效率。最佳实践包括单元测试与集成测试结合、快照测试、并行执行、代码覆盖率分析、测试环境管理和测试数据管理。
68 2
|
1月前
|
前端开发 JavaScript 数据可视化
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第26天】前端自动化测试在现代软件开发中至关重要,Jest和Cypress分别是单元测试和端到端测试的流行工具。本文通过解答一系列问题,介绍Jest与Cypress的实战应用与最佳实践,帮助开发者提高测试效率和代码质量。
47 2
|
2月前
|
运维 监控 jenkins
运维自动化实战:利用Jenkins构建高效CI/CD流程
【10月更文挑战第18天】运维自动化实战:利用Jenkins构建高效CI/CD流程
|
2月前
|
Web App开发 JavaScript 前端开发
鸿蒙Flutter实战:04-如何使用DevTools调试Webview
本文介绍如何在鸿蒙 Flutter 开发中调试 Webview,包括配置允许调试、找到 devtools 端口、开启端口转发、在 Chrome 中调试 Webview等。
48 0
鸿蒙Flutter实战:04-如何使用DevTools调试Webview
|
2月前
|
运维 关系型数据库 MySQL
自动化运维工具Ansible的实战应用
【10月更文挑战第9天】在现代IT运维领域,效率和可靠性是衡量一个系统是否健康的重要指标。自动化运维工具Ansible因其简洁、易用的特性,成为了众多企业和开发者的首选。本文将通过实际案例,展示如何利用Ansible进行日常的运维任务,包括配置管理、软件部署以及批量操作等,帮助读者深入理解Ansible的应用场景及其带来的效益。
|
2月前
|
Dart Android开发
鸿蒙Flutter实战:03-鸿蒙Flutter开发中集成Webview
本文介绍了在OpenHarmony平台上集成WebView的两种方法:一是使用第三方库`flutter_inappwebview`,通过配置pubspec.lock文件实现;二是编写原生ArkTS代码,自定义PlatformView,涉及创建入口能力、注册视图工厂、处理方法调用及页面构建等步骤。
69 0