因为工作原因,使用的编程语言都是C#,但是国内相应的Appium资料少得可怜,Java版本的Appium也考虑过,但是奈何自己搞不定Eclipse这个编译环境【说白了就是因为懒……

无意中看到了外面的世界,然后发现国外的相关资料还是很多的,那还说啥?赶紧的,撸起袖子就是干。

前置条件:APPIUM环境搭建,Windows环境下的搭建教程还是很多的,按照教程操作就可以了。

测试环境:Visual Studio 2015+Genymotion模拟器+Custome Phone 6.0.0

源码下载地址:https://github.com/appium/appium-dot-exe

源码下载后先设置VS能自动去下载对应的Nuget包,更新的时候有条件的还是可以挂点什么东西,原因你懂的。更新完对应的Nuget包,该关联的引用也都关联上了,报的错也就自行消失了。

C#下的Appium框架实际上WPF格式的WinForm应用程序,具体的启动过程以及原理可以参考:http://www.cnblogs.com/oscarxie/p/6678142.html,但是这个不是今天的重点

顺带真的想吐槽笔记本小屏幕还要强行追求1920*1080的高分辨率,强行放大字体后截图看起来感觉怪怪的,调低分辨率就是满屏幕的马赛克……

我们先来看一段GitHub上的示范代码,这段代码的功能是设置Appium的相关参数,对Windows自带的计算器功能进行测试,测试结果则是调用了Nunit单元测试中的断言功能进行判断:

  public class BasicScenarios
{
protected const string WindowsApplicationDriverUrl = "http://127.0.0.1:4723/wd/hub";
protected static RemoteWebDriver CalculatorSession;
protected static RemoteWebElement CalculatorResult;
protected static string OriginalCalculatorMode; [ClassInitialize]
public static void Setup(TestContext context)
{
// Launch the calculator app
DesiredCapabilities appCapabilities = new DesiredCapabilities();
appCapabilities.SetCapability("app", "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App");
appCapabilities.SetCapability("platformName", "Windows");
appCapabilities.SetCapability("deviceName", "WindowsPC");
CalculatorSession = new RemoteWebDriver(new Uri(WindowsApplicationDriverUrl), appCapabilities);
Assert.IsNotNull(CalculatorSession);
CalculatorSession.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds()); // Make sure we're in standard mode
CalculatorSession.FindElementByXPath("//Button[starts-with(@Name, \"Menu\")]").Click();
OriginalCalculatorMode = CalculatorSession.FindElementByXPath("//List[@AutomationId=\"FlyoutNav\"]//ListItem[@IsSelected=\"True\"]").Text;
CalculatorSession.FindElementByXPath("//ListItem[@Name=\"Standard Calculator\"]").Click(); // Use series of operation to locate the calculator result text element as a workaround
// We currently cannot query element by automationId without using modified appium dot net driver
// TODO: Use a proper appium/webdriver nuget package that allow us to query based on automationId
CalculatorSession.FindElementByXPath("//Button[@Name=\"Clear\"]").Click();
CalculatorSession.FindElementByXPath("//Button[@Name=\"Seven\"]").Click();
CalculatorResult = CalculatorSession.FindElementByName("Display is 7 ") as RemoteWebElement;
Assert.IsNotNull(CalculatorResult);
} [ClassCleanup]
public static void TearDown()
{
// Restore original mode before closing down
CalculatorSession.FindElementByXPath("//Button[starts-with(@Name, \"Menu\")]").Click();
CalculatorSession.FindElementByXPath("//ListItem[@Name=\"" + OriginalCalculatorMode + "\"]").Click(); CalculatorResult = null;
CalculatorSession.Dispose();
CalculatorSession = null;
} [TestInitialize]
public void Clear()
{
CalculatorSession.FindElementByName("Clear").Click();
Assert.AreEqual("Display is 0 ", CalculatorResult.Text);
} [TestMethod]
public void Addition()
{
CalculatorSession.FindElementByName("One").Click();
CalculatorSession.FindElementByName("Plus").Click();
CalculatorSession.FindElementByName("Seven").Click();
CalculatorSession.FindElementByName("Equals").Click();
Assert.AreEqual("Display is 8 ", CalculatorResult.Text);
}
}

从上面的代码我们可以得出,C#下的Appium可以分为以下三个步骤:

1.实例化DesiredCapabilities类并调用SetCapability方法设置对应的一些参数,对应的参数设置可以参考Java版的设置:

     appCapabilities.setappCapabilitiesability("automationName", "Appium");//appium做自动化
     //appCapabilities.setappCapabilitiesability("app", "C:\\software\\jrtt.apk");//安装apk
     //appCapabilities.setappCapabilitiesability("browserName", "chrome");//设置HTML5的自动化,打开谷歌浏览器
appCapabilities.setappCapabilitiesability("deviceName", "S4");//设备名称
appCapabilities.setappCapabilitiesability("platformName", "Android"); //安卓自动化还是IOS自动化
appCapabilities.setappCapabilitiesability("platformVersion", "4.4"); //安卓操作系统版本
appCapabilities.setappCapabilitiesability("udid", "192.168.56.101:5555"); //设备的udid (adb devices 查看到的)
appCapabilities.setappCapabilitiesability("appPackage","com.android.calculator2");//被测app的包名
appCapabilities.setappCapabilitiesability("appActivity",".Calculator");//被测app的入口Activity名称
appCapabilities.setappCapabilitiesability("unicodeKeyboard", "True"); //支持中文输入
appCapabilities.setappCapabilitiesability("resetKeyboard", "True"); //支持中文输入,必须两条都配置
appCapabilities.setappCapabilitiesability("noSign", "True"); //不重新签名apk
appCapabilities.setappCapabilitiesability("newCommandTimeout", "");

2.设置Appium的服务地址:具体的服务地址是在Appium中进行设置的,同时连接手机,我们把设置好的地址复制过来就可以了。

new RemoteWebDriver(new Uri("http://172.xx.xx.169:4723/wd/hub"), capabilities);

3.调用RemoteWebDriver的类下提供的元素定位方法进行元素定位,并对应为好的元素进行对应的操作:Appium提供了以下定位元素的方法(这里的具体语法和Java相比有点区别,需要注意下):

FindElement(By by);
FindElementByClassName(string className);
FindElementByCssSelector(string cssSelector);
FindElementById(string id);
FindElementByLinkText(string linkText);
FindElementByName(string name);
FindElementByPartialLinkText(string partialLinkText);
FindElementByTagName(string tagName);
FindElementByXPath(string xpath);

同时,Appium也提供了以下的操作:

bool Displayed { get; } //判断元素是否存在
bool Enabled { get; } //判断元素是否启用
bool Selected { get; }//判断元素是否被选中
Size Size { get; }//获取元素的高度和宽度
string TagName { get; }//获取元素的文本(不含空格)
string Text { get; }//获取指定属性的值
void Clear();//清除元素内容
void Click();//点击
string GetAttribute(string attributeName);
string GetCssValue(string propertyName);//获取CSS属性的值
void SendKeys(string text);//将文本写入元素
void Submit();//提交此元素到服务器

基于C#的Appium自动化测试框架(Ⅰ)的更多相关文章

  1. 基于C#的Appium自动化测试框架(Ⅰ):程序结构

    因为工作原因,使用的编程语言都是C#,但是国内相应的Appium资料少得可怜,Java版本的Appium也考虑过,但是奈何自己搞不定Eclipse这个编译环境[说白了就是因为懒…… 无意中看到了外面的 ...

  2. Appium+python自动化(四十二)-Appium自动化测试框架综合实践- 寿终正寝完结篇(超详解)

    1.简介 按照上一篇的计划,今天给小伙伴们分享执行测试用例,生成测试报告,以及自动化平台.今天这篇分享讲解完.Appium自动化测试框架就要告一段落了. 2.执行测试用例&报告生成 测试报告, ...

  3. 广深小龙-基于unittest、pytest自动化测试框架之demo来学习啦!!!

    基于unittest.pytest自动化测试框架之demo,赶紧用起来,一起学习吧! demo分为两个框架:①pytest    ②unittest demo 中 包含 web.api 自动化测试框架 ...

  4. Appium+python自动化(三十八) - Appium自动化测试框架综合实践 - 框架简介-助你冲击高薪,迎娶白富美(超详解)

    简介 好久没有更新博客了,博友们是不是有点等不及了.不好意思啊,中秋节过后太忙了,这篇是好不容易抽点零碎时间写的.从这一篇开始小伙伴或者童鞋们,就跟随宏哥的脚步,一步步的从无到有,从0到1的搭建一个完 ...

  5. Appium+python自动化(三十九)-Appium自动化测试框架综合实践 - 代码实现(超详解)

    简介 经过一段时间的准备,完善的差不多了,继续分享有关Appium自动化测试框架综合实践.想必小伙伴们有点等不及了吧! driver配置封装 kyb_caps.yaml 配置表 参考代码 platfo ...

  6. Appium+python自动化(四十)-Appium自动化测试框架综合实践 - 代码实现(超详解)

    1.简介 今天我们紧接着上一篇继续分享Appium自动化测试框架综合实践 - 代码实现.由于时间的关系,宏哥这里用代码给小伙伴演示两个模块:注册和登录. 2.业务模块封装 因为现在各种APP的层出不群 ...

  7. Appium+python自动化(四十一)-Appium自动化测试框架综合实践 - 即将落下帷幕(超详解)

    1.简介 今天我们紧接着上一篇继续分享Appium自动化测试框架综合实践 - 代码实现.到今天为止,大功即将告成:框架所需要的代码实现都基本完成. 2.data数据封装 2.1使用背景 在实际项目过程 ...

  8. 《Selenium自动化测试实战:基于Python》Selenium自动化测试框架入门

    第1章  Selenium自动化测试框架入门 1.1  Selenium自动化测试框架概述 说到目前流行的自动化测试工具,相信只要做过软件测试相关工作,就一定听说过Selenium. 图1-1是某企业 ...

  9. 基于Ruby的Watir-WebDriver自动化测试框架

    基于Ruby的watir-webdriver自动化测试方案与实施(五)   基于Ruby的watir-webdriver自动化测试方案与实施(四)   基于Ruby的watir-webdriver自动 ...

随机推荐

  1. Python数据结构与循环语句

    # Python数据结构与循环语句:   首先编程是一项技能,类似跑步,期初不必在意细节,能使用起来就行,等学的游刃有余了再回过头来关注细节问题也不迟.  关于买书: 学会python之后,才需要买书 ...

  2. Git下载、更新、提交使用总结

    Git使用总结 1.下载代码到本地 1.1指定存储文件路径 1.运行git-bash.exe 2.指定盘符:cd f:work 1.2下载代码 命令:$ git clone <版本库的网址> ...

  3. (原创)如何在性能测试中自动生成并获取Oracle AWR报告

    版权声明:本文为原创文章,转载请先联系并标明出处 由于日常使用最多的数据库为Oracle,因此,最近又打起了Oracle的AWR报告的主意. 过去我们执行测试,都是执行开始和结束分别手动建立一个快照, ...

  4. C#文件下载(适用于各个浏览器)

    1.cs代码 public void DownFile(string filePath ,string fileName ) { // filePath 文件路径 例如:/File/记录.xlsx / ...

  5. 学习MVC之租房网站(七)-房源管理和配图上传

    在上一篇<学习MVC之租房网站(六)-用户登录和权限控制>完成了后台用户登录和权限控制功能的开发,接下来要完成的是房源的管理,用户在后台新增.编辑房源信息,供前台用户操作. 一 房源管理 ...

  6. jQuery选择器---基本选择器总结

    今天要跟大家分享一下jQuery选择器的使用方法,它的选择器分为四大类 如图: 基本选择器的使用: 1.id选择器 案例: <div id="notMe"><p& ...

  7. POJ3252-Round Numbers 数学

    题目链接:http://poj.org/problem?id=3252 题目大意: 输入两个十进制正整数a和b,求闭区间 [a ,b] 内有多少个Round number 所谓的Round Numbe ...

  8. Java中线程的使用 (2)-多线程、线程优先级、线程睡眠、让步、阻塞

    Java中线程的使用 (2)-多线程.线程优先级.线程睡眠.让步.阻塞 (一)多线程使用方法 说明:创建每个新的线程,一定要记得启动每个新的线程(调用.start()方法) class Xc3 ext ...

  9. Eclipse中启动tomcat时内存溢出

    今天在启动自己项目的时候遇到一个永久带(permgen space)内存溢出,查找了很多资料和请教了许多大神,最终才解决问题. 一.什么原因造成了永久带溢出: 1.项目使用了太多的静态变量 2.加载了 ...

  10. Unable open dabase as spfile parameter incorrect

    Error desc: ORA-00821: Specified value of sga_target 16M is too small, needs to be at least 4832M   ...