详解搭建基于C#和Appium的Android自动测试环境

关于Appium环境搭建的例子网上比较多,不过都是关于Python,Java的,使用C#客户端的资料比较少,公司现有的测试系统是基于C#构建的,因为要和现有系统集成,所以选择的C#语言作为客户端, 下载Appium 官网提供的C#例子,但是对应的Android 版本,Nunit 版本都比较旧,对于初次接触手机测试的人来说,一步一个坑,把例子拿下来,折腾了一两天,还是各种问题。最终通过百度,Google,终于搭建好了环境,现在分享一下过程,希望对于后来人会有些帮助。

默认大家是安装了Visual Studio 的,如果没有安装,请百度如何安装Visual Studio

搭建环境有三部分,模拟器环境准备,Appium服务器环境准备,C#单元测试工程环境准备,关于前两部分腾讯课堂,网易课堂都有视频资料,大家可以参考。

下面我们开始:

模拟环境搭建

模拟环境搭建建议用Android Studio ,这样配置简单,模拟器的性能也强一些。

下载地址:http://www.android-studio.org/ 最新版本是3.2

安装完成后打开 Android Studio

在Tools菜单下找到 SDK Manager 菜单打开( Tools –>SDK Manager)显示如下:

找到 Android SDK (Appearance & Behavior ->System Setting -> Android SDK)

安装 Android SDK 例如:Android 6.0

接下来配置环境变量:

配置ANDROID_HOME 变量,对应的目录可用从下面位置找,

我对位置做过调整,和默认安装的位置不一样。

将 E:\android-sdk 替换成自己机器的地址。

在Path 中追加:%ANDROID_HOME%\platform-tools; %ANDROID_HOME%\tools

安装完SDK 后就可以安装模拟器了,关闭SDK Manager ,打开 AVD Manager (Tools ->AVD Manager)

点击左下角的Create Virtual Device 打开了 Virtual Device Configuration

选择 phone ,找一个分辨率小一些的机型 例如 480X800 ,分辨率高了比较耗费资源。

点击Next

选择 other Images, 找到你刚才下载的SDK 对应的Image ,上面选了Android 5.0 我们就下 Android 6.0 对应的Image ,点击Download 进行下载。完成后就可以点击Next 到最后一个画面了。

点击Finish 就完成了虚拟机的创建。

点击启动,启动虚拟机

这样虚拟机就配置并启动起来了,上面的镜像使用的是arm 版本,如果你的机器是X86,Android Studio 建议你使用X86的虚拟机。如果想使用X86的虚拟机,需要在Bios中开启 Virtualization Technology 设定为Enable ,操作系统可能也要做一些配置,这里就不细说了。

接下来我们安装AppiumServer。可以到官网下载。

下载地址:https://github.com/appium/appium-desktop/releases/tag/v1.7.1

Windows 操作系统 X86_64 处理器下载 appium-desktop-setup-1.7.1.exe 就可以了。

启动Appium

点击 Start Server v1.9.1

这样Appium Server 就启动了。

最后我们来配置单元测试工程。

启动Visual Studio ,创建一个单元测试工程。

在 NuGet 中查找 Appium (Tools ->NuGet Package Manager -> Manage NuGet Package for Solution…)

找到 Appium.WebDriver ,选择单元测试工程进行安装。

完成后使用下面代码替换自动生成的单元测试代码。运行单元测试,就可以看到如下模拟器中的计算器被打开,并点击了数字5。如下图:

using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium.Remote;
using System;
namespace androidTest
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
            DesiredCapabilities capabilities = new DesiredCapabilities();
            capabilities.SetCapability("deviceName", "Android Emulator");
            capabilities.SetCapability("automationName", "Appium");
            capabilities.SetCapability("platformName", "Android");
            capabilities.SetCapability("platformVersion", "6.0"); //可以根据自己的模拟器版版本进行修改。
            capabilities.SetCapability("appPackage", "com.android.calculator2"); //安卓自带计算器
            capabilities.SetCapability("appActivity", ".Calculator");

            RemoteWebDriver wd = new RemoteWebDriver(new Uri("http://127.0.0.1:4723/wd/hub"), capabilities);
            try
            {
                var result = wd.FindElementById("digit_5");
                result.Click();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally { wd.Quit(); }

        }

    }
}

上面代码最重要的就是关于 capabilities.SetCapability 的参数,具体参数可以看官方的文档说明。官方说明如下:

http://appium.io/docs/en/writing-running-appium/caps/

好了,关于使用C#单元测试和Appium进行Android 测试环境的搭建就结束了。

以上就是详解搭建基于C#和Appium的Android自动测试环境的详细内容,更多关于搭建基于C#和Appium的Android自动测试环境的资料请关注我们其它相关文章!

(0)

相关推荐

  • c#基于Redis实现轻量级消息组件的步骤

    最近在开发一个轻量级ASP.NET MVC开发框架,需要加入日志记录,邮件发送,短信发送等功能,为了保持模块的独立性,所以需要通过消息通信的方式进行处理,为了保持框架在部署,使用,二次开发过程中的简易便捷性,所以没有选择传统的MQ,而是基于Redis的订阅发布实现一个系统内部消息组件,话不多说,上码! 数据结构定义 消息实体包含几个部分,订阅通道名称,信息头,信息体,信息差异化额外信息字典,信息头主要包含消息标识,消息日期,信息体包含信息内容,信息实体类型等 public class Messa

  • 使用C#实现一个PPT遥控器

    说明 本项目参考了 https://github.com/yangzhongke/PhoneAsPrompter 项目来完成实现,并对其进行了一些修改完善. 完整代码可以到 https://github.com/PuZhiweizuishuai/PPT-Remote-control 与 https://gitee.com/puzhiweizuishuai/PPT-Remote-control 查看. 软件下载地址: https://gitee.com/puzhiweizuishuai/PPT-R

  • C#中调整图像大小的步骤详解

    在本篇文章中,我将介绍如何在C#中来调整你想要的图像大小.要实现这一目标,我们可以采取以下几个步骤: 1.首先要获取你想要调整大小的图像: string path = Server.MapPath("~/Images"); System.Drawing.Image img = System.Drawing.Image.FromFile(string.Concat(path,"/3904.jpg")); 2.将图像转换为Bitmap: Bitmap b = new B

  • C#读写文本文件(.txt)的方法实例

    读取txt文件 如果你要读取的文件内容不是很多,可以使用 File.ReadAllText(filePath) 或指定编码方式 File.ReadAllText(FilePath, Encoding)的方法.它们都一次性将文本内容全部读完,并返回一个包含全部文本内容的字符串 string str1 = File.ReadAllText(@"c:\temp\a.txt"); //也可以指定编码方式 string str2 = File.ReadAllText(@"c:\temp

  • C#基于Mongo的官方驱动手撸一个Super简易版MongoDB-ORM框架

    如题,在GitHub上找了一圈想找一个MongoDB的的ORM框架,未偿所愿,就去翻了翻官网(https://docs.mongodb.com/drivers/csharp/) 看了看文档发现官方的驱动功能已经相当强大了并且更新速度很快 2.3之后得驱动版本已经支持 .Net 5,而且方法都已支持Task ,可以配合async , await.使用 ,同时也支持Lambda表达式及表达式树 官方是这么说的(https://mongodb.github.io/mongo-csharp-driver

  • C#读取txt文件数据的方法实例

    第一步新建txt文件,写入内容 我是放在D盘下的,数据以逗号隔开的,是英文逗号 第二步读取数据 在需要读取数据的页面,添加代码,就可以了 private void Phone_Load(object sender, EventArgs e) { string ReadLine; string[] array; string Path = @"D:\FrontierApp.TXT"; StreamReader reader = new StreamReader(Path,System.T

  • 详解C# 线程的挂起与唤醒

    如果说C#和C++有什么不同,博主不得不说,对于异步的支持程度是C#的一一个伟大的进步. 其实早期的C++都没有异步,并发的概念.博主第一次使用C++创建异步程序的时候,是使用boost库的内容进行实现的.相对而言,C#对于异步的支持可以说是相当的好.相信很多名词大家都很耳熟能详,比如说Thread,BeginInvoke,Delegate,backgroundworker等等...其实楼主在使用了这么多的异步操作过程中,还是觉得backgroudworker比较好用. 当然,我们今天要说的和上

  • C#加载嵌入到资源的非托管dll

    如何加载非托管Dll 我们总会遇到需要加载非Win32的非托管dll,这里推荐一种方式就是将那些非win32的非托管dll嵌入资源的方式,在入口解压并且加载的方式,我先来看看如何实现吧,首先我们准备好demo,新增控制台项目如下: 代码如下: static void Main(string[] args) { UnzipAndLoad(); } /// <summary> /// 解压资源并且加载非托管DLL /// </summary> static void UnzipAndL

  • 详解搭建基于C#和Appium的Android自动测试环境

    关于Appium环境搭建的例子网上比较多,不过都是关于Python,Java的,使用C#客户端的资料比较少,公司现有的测试系统是基于C#构建的,因为要和现有系统集成,所以选择的C#语言作为客户端, 下载Appium 官网提供的C#例子,但是对应的Android 版本,Nunit 版本都比较旧,对于初次接触手机测试的人来说,一步一个坑,把例子拿下来,折腾了一两天,还是各种问题.最终通过百度,Google,终于搭建好了环境,现在分享一下过程,希望对于后来人会有些帮助. 默认大家是安装了Visual

  • 详解JavaScript基于面向对象之创建对象(2)

    接着上文<详解JavaScript基于面向对象之创建对象(1)>继续学习. 4.原型方式        我们创建的每个函数都有一个通过prototype(原型)属性,这个属性是一个对象,它的用途是包含可以由特定类型的所有实例共享的属性和方法.逻辑上可以这么理解:prototypt通过条用构造函数而创建的那个对象的原型对象.使用原型的好处就是可以让所有对象实例共享它所包含的属性和方法.也就是说,不必在构造函数中定义对象信息,而是直接将这些信息添加到原型中.        原型方式利用了对象的pr

  • 详解JavaScript基于面向对象之继承实例

    javascript面向对象继承的简单实例: 作为一门面向对象的语言,继承自然是它的一大特性,尽管javascript的面向对象的实现机制和和c#和java这样典型的面向对象不同,但是继承的基本特点还是具有的,简单的说就是获得父级的方法和属性,下面是一段简单的实例,大家有兴趣可以分析一下: window.onload = function(){ function parent(age,name){ this.age = age; this.name = name; } parent.protot

  • 详解JavaScript基于面向对象之继承

    一.面相对象继承机制       这个实例使用UML很好的解释了继承机制.       说明继承机制最简单的方式是,利用一个经典的例子就是几何形状.实际上,几何形状只有两种,即椭圆形(是圆形的)和多边形(具有一定数量的边).圆是椭圆的一种,它只有一个焦点.三角形.矩形和五边形都是多边形的一种,具有不同数量的边.正方形是矩形的一种,所有的边等长.这就构成了一种完美的继承关系,很好的解释了面向对象的继承机制.        在这个例子中,形状是椭圆形和多边形的基类(通常我们也可以叫它父类,所有类都由

  • Java 添加、删除、替换、格式化Word中的文本的步骤详解(基于Spire.Cloud.SDK for Java)

    Spire.Cloud.SDK for Java提供了TextRangesApi接口可通过addTextRange()添加文本.deleteTextRange()删除文本.updateTextRangeText()替换文本.updateTextRangeFormat()格式化文本等.本文将从以上方法介绍如何来实现对文本的操作.可参考以下步骤进行准备: 一.导入jar文件 创建Maven项目程序,通过maven仓库下载导入.以IDEA为例,新建Maven项目,在pom.xml文件中配置maven仓

  • 详解go基于viper实现配置文件热更新及其源码分析

    go第三方库 github.com/spf13/viper实现了对配置文件的读取并注入到结构中,好用方便. 其中以 viperInstance := viper.New() // viper实例 viperInstance.WatchConfig() viperInstance.OnConfigChange(func(e fsnotify.Event) { log.Print("Config file updated.") viperLoadConf(viperInstance) //

  • 详解SpringBoot基于Dubbo和Seata的分布式事务解决方案

    1. 分布式事务初探 一般来说,目前市面上的数据库都支持本地事务,也就是在你的应用程序中,在一个数据库连接下的操作,可以很容易的实现事务的操作. 但是目前,基于SOA的思想,大部分项目都采用微服务架构后,就会出现了跨服务间的事务需求,这就称为分布式事务. 本文假设你已经了解了事务的运行机制,如果你不了解事务,那么我建议先去看下事务相关的文章,再来阅读本文. 1.1 什么是分布式事务 对于传统的单体应用而言,实现本地事务可以依赖Spring的@Transactional注解标识方法,实现事务非常简

  • 详解SpringBean基于XML的装配

    1.设值注入:通过反射调用setXxx注入属性值 package com.itheima.assemble; import java.util.List; public class User { private String username; private Integer password; private List<String> list; /** * 设值注入 * 提供默认空参构造方法 ; * 为所有属性提供setter方法. */ public User() { super();

  • 详解Weex基于Vue2.0开发模板搭建

    前言 最近有一些人反馈说在面试过程中常常被问到weex相关的知识,也侧面反映的weex的发展还是很可观的,可是目前weex的开发者大多数是中小型公司或者个人,大公司屈指可数,揪其原因可能是基于weex的开发正确的姿势大家并没有找到,而且市面上的好多轮子还是.we后缀的,众所周知,weex和vue一直在努力的进行生态互通,而且weex实现web标准化是早晚的问题,今天和大家分享一下weex基于vue2.0的开发框架模板~ 工作原理 先简单熟悉一下weex的工作原理,这里引用一下weex官网上的一直

  • 详解Vue基于 Nuxt.js 实现服务端渲染(SSR)

    直接使用 Vue 构建前端单页面应用,页面源码时只有简单的几行 html,这并不利于网站的 SEO,这时候就需要服务端渲染 2016 年 10 月 25 日,zeit.co 背后的团队对外发布了一个 React 的服务端渲染应用框架 Next.js 几小时后,一个基于 Vue.js 的服务端渲染应用框架应运而生,与 Next.js 异曲同工,这就是Nuxt.js 一.快速模板 在已经安装了 vue-cli 的前提下,可以快速创建一个 nuxt 的项目模板 vue init nuxt-commun

随机推荐