开发移动应用,最耗时耗力的就是手动测试APP的每个功能点或修复bug。有人就会提议App的业务逻辑可以使用nUnit或xUnit测试单元来辅助完成。那用户界面要如何测试?众所周知,移动设备多种多样,数量及其庞大,设备的类型也是各式各样,要如何才能保证App用户界面在成千上百iOS和Android设备中都能正常显示,没有错误?这是很多APP开发人员最头疼的事情了。

今天,本文主要介绍如何使用Xamarin提供的UITest来测试app界面。

访问控件

当使用Xamarin.Forms创建应用程序时,会使用Xamarin.Forms的控件和XAML创建用户界面。运行时,Xamarin.Forms会根据我们创建的用户界面生成对应的原生应用程序。由于我们正在开发针对Xamarin.Forms控件,因此可通过StyleID 特殊属性在Xamarin.UITests中的访问权限。StyleID可以被设置为任意字符串,创建任何测试功能都可以被直接访问,且无论在iOS或Android应用中StyleID都是一致的,这就意味着不需要特别管理这些ID。

XAML

<Button x:Name="ButtonLogin"
StyleId="ButtonLogin"
Grid.Row="5"
BackgroundColor="#F44336"
BorderRadius="0"
TextColor="White"
Text="Login to Meetup"
Command="{Binding LoginCommand}" />

c#

var buttonLogin = new Button
{
StyleId = "ButtonLogin",
Text = "Login to Meetup",
BorderRadius = 0,
TextColor = Color.White,
BackgroundColor = Color.FromHex("F443336")
};
 

最后需要做的就是在iOS和Android 应用中添加代码,在原生控件中使用StyleId。这样可以调用Xamarin.UITest。这些代码需要在App的最终版注释掉。

iOS 设置

打开iOS的AppDelegate.cs 文件,在FinishedLaunching方法中添加以下代码:

   1:  Forms.ViewInitialized += (sender, e) =>
   2:  {
   3:    if (null != e.View.StyleId)
   4:    {
   5:      e.NativeView.AccessibilityIdentifier = e.View.StyleId;
   6:    }
   7:  };

Android 设置

打开MainActivity.cs文件,在OnCreate方法中添加以下代码:

   1:  Xamarin.Forms.Forms.ViewInitialized += (sender,  e) =>
   2:  {
   3:    if (!string.IsNullOrWhiteSpace(e.View.StyleId))
   4:    {
   5:      e.NativeView.ContentDescription = e.View.StyleId;
   6:    }
   7:  };

现在,可以运行UITest ,打开REPL,则会出现ButtonLogin :

在UITest,ButtonLogin常用于验证button的交互功能即登录屏幕是否正常出现:

   1:  [Test]
   2:  public void OpenLoginScreen()
   3:  {
   4:    app.Screenshot("App Launches");
   5:    app.Tap("ButtonLogin");
   6:    app.Screenshot("When I tap Login");
   7:    Assert.IsNotNull(app.Query("EntryUserName").Single());
   8:    app.Screenshot("Login Page is Visible");
   9:  }

亲们学会了吗?通过本篇文章能够让我们实现APP的用户界面的完美自动化测试!这样可以省时省力,高效提升测试效率!

移动APP的自动化测试的更多相关文章

  1. 从0到1搭建移动App功能自动化测试平台(2):操作iOS应用的控件

    转自:http://debugtalk.com/post/build-app-automated-test-platform-from-0-to-1-Appium-interrogate-iOS-UI ...

  2. 从0到1搭建移动App功能自动化测试平台(0):背景介绍和平台规划

    本文作者: 伯乐在线 - debugtalk .未经作者许可,禁止转载!欢迎加入伯乐在线 专栏作者. 转载地址:http://blog.jobbole.com/101221/ 背景 最近新加入DJI的 ...

  3. Web/app端自动化测试对比

    Web/app端自动化测试 做了一段时间的Android自动化测试,对比个人之前做的web端自动化测试,有一些感想.(由于个人接触的时间也不是太久,很多东西理解也并不深刻,先写下菜鸟时期的感想.) 区 ...

  4. Appium 从 0 到 1 搭建移动 App 功能自动化测试平台 (1):模拟器中运行 iOS 应用

    转载:https://testerhome.com/topics/4960 在上一篇文章中,我对本系列教程的项目背景进行了介绍,并对自动化测试平台的建设进行了规划. 在本文中,我将在已准备就绪的iOS ...

  5. APP UI自动化测试思路总结

    python+appium自动化测试系列就要告一段落了,本篇博客咱们做个小结. 首先想要说明一下,APP自动化测试可能很多公司不用,但也是大部分自动化测试工程师.高级测试工程师岗位招聘信息上要求的,所 ...

  6. 移动端混合型App(hybrid app)自动化测试选型与实践

    背景 公司产品的业务已经发展到了移动端,开发选型已经结束,决定使用phonegap做移动端的web应用开发平台.考虑到业务的复杂与多样,移动端的测试同样需要自动化.在网上看了很多,最终锁定了3个移动端 ...

  7. BeautifulReport 实现app UI自动化测试

    修改了 BeautifulReport源码中的一些内容<附:BeautifulReport--适用于unittest自动化测试的可视化报告>; 1.生成截图时,原来的img文件夹必须在项目 ...

  8. Appium App UI 自动化测试理论知识

    (一)App自动化测试背景 随着移动终端的普及,手机应用越来越多,也越来越重要.App的回归测试用例数量越来越多,全量回归也越来越消耗时间.另外移动端碎片化严重(碎片化:兼容性测试,手机品牌多样.An ...

  9. APP接口自动化测试JAVA+TestNG(三)之HTTP接口测试实例

    前言     前两篇普及相关基础知识后,本篇主要对举例对国家气象局接口自动化测试进行讲解(Get请求及结果断言),以达到自动化测试入门目的,除了前两篇的一些了解外,需要有一定的JAVA知识(HTTP相 ...

随机推荐

  1. html中 table 和 form的位置

    对于web前端开发来说  经常会用到 像firebug这样审查元素 工具 发现了一个这样的现象: 当 able><form><tr>....</tr>< ...

  2. JS 关闭页面事件

    主页面调用:<script src="<%=ResolveUrl("../JS/QuitJS.js") %>" type="text ...

  3. 大前端学习笔记整理【六】this关键字详解

    前言 在上一篇博客里我总结了下辨认this指向的四种方式,但是有师兄抛出一个问题来,我发现那些this的指向并不能说明更复杂的情况,先看下这段代码 var a = { name: 'a', getNa ...

  4. 关于maven中央仓库jar包不存在问题

    最近接手一个maven项目,引入依赖的时候报了一个 Missing artifact com.oracle:ojdbc6:jar:12.1.0.1 pom.xml 的错误,网上一查,原来是Oracle ...

  5. RedHat Enterprise Linux 7关闭防火墙方法

    systemctl命令是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起 在之前的版本中关闭防火墙等服务的命令是 service iptables stop ...

  6. C程序员学bash shell容易掉坑的注意点(未完待续)

    shell解释器很娇气,有一点点不合乎规范的编码风格都会让脚本歇菜. 1. 空格该有还是该没有要看情况.该有的时候不能没有!该没有的时候不能有! 变量赋值的等号两边不能有空格. 2. 在shell中是 ...

  7. jboss [how to access the admin console]

    However you have not yet added any users to be able to access the admin console. 进入%EAP_HOME%/bin 执行 ...

  8. 手机移动端confirm替换方案

    //弹框 ;(function () { var ConfirmBox = function (options){ this.defaults = { title:"", topT ...

  9. Thread and ThreadPool

    C#中Thread与ThreadPool的比较 Thread类,一次使用一个线程,来创建和删除线程.这种方式建立和删除线程是很昂贵的(cpu密集型). Threadpool类 对于大多数的情况下是使用 ...

  10. 看到shape文件可以加载到GOOGLE EARTH上的方法,有空可以试试

    引用 Shape文件转为KMZ并在Google Earth中显示 (1)在ArcGIS中加载一个Shape文件,笔者加载的是某个地区的道路(双线道路)图层 (2)在ArcToolbox中,依次展开Co ...