博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
powershell 开发入门_WinAppDriver 快速入门
阅读量:6621 次
发布时间:2019-06-25

本文共 5654 字,大约阅读时间需要 18 分钟。

努力到无能为力,拼搏到感动自己。

f2db79073acc85f2d22c70df4cfa8be2.png
06a3bd69ea996f96b9076fbf22ebf01d.png Win App Driver 简介
67db19f0299868e983e64071198f5552.png

    Windows Application Driver(WinAppDriver)是在windows应用程序上支持类似Selenium的UI自动化测试服务。

支持的测试类型如下:

Universal Windows Platform (UWP)

Windows Forms (WinForms)

Windows Presentation Foundation (WPF)

Classic Windows (Win32)

参考地址:https://github.com/microsoft/WinAppDriver
入门教程   下载安装
Windos Application Driver 下载地址:https://github.com/Microsoft/WinAppDriver/releases 默认安装位置:C:\Program Files (x86)\Windows Application Driver\WinAppDriver.exe注意:Windows 必须将开发者模式打开,否则WinAppdriver无法运行,打开方式如下:按快捷键“Win+R”,并输入“ms-settings:developers”,回车之后会跳转开发者选项设置页面,然后选择开发人员模式通过在PowerShell中输入“Get-WindowsDeveloperLicense”,如果返回信息是True,说明开发者模式已打开PS C:\Users\ThinkBook> Get-WindowsDeveloperLicenseExpirationTime     IsValid--------------     -------9999/12/31 8:00:00    True
测试程序启动/退出

1、 运行Windows App Driver

启动后,窗口会显示如下信息:Windows Application Driver listening for requests at: http://127.0.0.1:4723/Press ENTER to exit.注意:切记不可关闭此窗口

2、启动UWP程序案例代码如下:

//获取Sessionprotected const string WindowsApplicationDriverUrl = "http://127.0.0.1:4723";protected static WindowsDriver ClientSession;public static void BaseSetup(string appid,string id = "app"){
if (ClientSession == null)    {
DesiredCapabilities appCapabilities = new DesiredCapabilities(); appCapabilities.SetCapability(id,appid); appCapabilities.SetCapability("deviceName", "WindowsPC"); ClientSession = new WindowsDriver(new Uri(WindowsApplicationDriverUrl), appCapabilities); }}//AppId、ID如何获取方法1(最简单快速):选择任意一个UWP程序,然后快捷方式到桌面并查看该属性。找到目标类型或目标对应的文本,即为UWP程序对应的AppIdAPPId感叹号之后的字段即为对应的ID。方法2://Id 查找方法打开UWP测试程序的安装位置,然后找到AppxManifest.xml,通过对应的进程名搜索,会找到如下字段,在这些字段中可以找到对应的Id"App" Executable=//AppId查找方法AppId相当于PackageFamilyName + ! + Id在powershell中运行命令“Get-AppxPackage -Name value”查询UWP相关信息,并找到PackageFamilyName对应的信息查询微软商店UWP案例:Get-AppxPackage -Name "*windowsstore*"
9b5a39c60dbbde17b3071f6f172129dc.png

3d503924b878115e30cbbc9f504e830a.png

2edac92e8cd8c52f67498cee975fe412.png

3、退出测试程序

//通过Session 退出WindowsDriver wdriver = null; wdriver.Quit(); //方法1wdriver.Close(); //方法2wdriver.CloseApp(); //方法3wdriver.Dispose(); //方法4//通过结束进程方式结束Process[] ps0 = Process.GetProcessesByName(processName);foreach (Process p in ps0){
    p.Kill();}
WindowsElement 查询
//常用查找方式//Session ,别忘了赋值此处为演示,默认nullWindowsDriver wdriver = null;  WindowsElement element = null;//以下分别是通过XPath、ClassName、Id、AccessibilityId、Name查询对应的元素element = wdriver.FindElementByXPath("");element = wdriver.FindElementByClassName("");element = wdriver.FindElementById("");element = wdriver.FindElementsByAccessibilityId("");element = wdriver.FindElementByName("");...
WindowsElement 操作

1、点击操作

WindowsDriver wdriver = null;WindowsElement element = null;//对于支持点击操作的元素,直接调用Click方法即可element.Click();//对于不支持点击操作的元素可以使用下列方法//通过Session与element模拟鼠标点击//单击wdriver.Mouse.Click(element.Coordinates);//双击wdriver.Mouse.DoubleClick(element.Coordinates);//与单击类似wdriver.Mouse.ContextClick(element.Coordinates);//鼠标按下与松开联合,相当于一个单击//模拟鼠标按下操作wdriver.Mouse.MouseDown(element.Coordinates);//模拟鼠标松开操作wdriver.Mouse.MouseUp(element.Coordinates);//对于不支持点击操作的元素,另一种操作方式//计算坐标,引用WindowAPI,完成鼠标点击int x = element.Location.X;int y = element.Location.Y + element.Rect.Height / 2;SetCursorPos(x, y);mouse_event((int)(MouseEventFlags.LeftDown | MouseEventFlags.Absolute), x, y, 0, IntPtr.Zero);mouse_event((int)(MouseEventFlags.LeftUp | MouseEventFlags.Absolute), x, y, 0, IntPtr.Zero);//引入Windows API//鼠标点击事件[DllImport("User32")] public extern static void mouse_event(int dwFlags, int dx, int dy, int dwData, IntPtr dwExtraInfo);//设置鼠标焦点事件[DllImport("User32")] public extern static void SetCursorPos(int x, int y);private enum MouseEventFlags{
Move = 0x0001, //移动鼠标 LeftDown = 0x0002,//模拟鼠标左键按下 LeftUp = 0x0004,//模拟鼠标左键抬起 RightDown = 0x0008,//鼠标右键按下 RightUp = 0x0010,//鼠标右键抬起 MiddleDown = 0x0020,//鼠标中键按下 MiddleUp = 0x0040,//中键抬起 Wheel = 0x0800,//鼠标滚轮 Absolute = 0x8000//标示是否采用绝对坐标}           

2、截图操作

WindowsDriver wdriver = null;WindowsElement element = null;//通过Session截图,关于通过其他方式截图,此处不做介绍wdriver.GetScreenshot().SaveAsFile(filename);//通过元素截图element.GetScreenshot().SaveAsFile(filename);

3、获取元素坐标

【点击操作】中已经介绍,此处省略

4、获取元素属性

WindowsDriver wdriver = null;WindowsElement element = null;//通过WindowsElement 可以直接获取的属性//获取当前元素文本element.Text;//获取当前元素是否被选中,true表示选中,false表示未选中element.Selected;//获取当前元素是否在当前页面显示,true表示显示,false表示不显示element.Displayed;//获取当前元素是否可用,,true表示可用,false表示不可用element.Enabled;//获取元素大小element.Size.Height;element.Size.Width;element.Rect.Width;element.Rect.Height;//通过WindowsElement 不可以直接获取的属性//通过 GetAttribute()方法可以获取对应的属性值//需要注意的是这个方法不一定会解析出所有的属性值element.GetAttribute(attributeName)//获取元素 Nameelement.GetAttribute("Name");//获取元素 AutomationIdelement.GetAttribute("AutomationId");//获取元素 ToggleStateelement.GetAttribute("ToggleState");//对于某些特定属性无法获取的可以使用资源文件进行解析//获取当前页面资源wdriver.PageSource;//通过Xpath解析对应元素属性XmlDocument xmldoc = new XmlDocument();xmldoc.LoadXml(wdriver.PageSource);  //加载当前页面资源XmlNode xmlTarget = xmldoc.DocumentElement.SelectSingleNode(Xpath);  //通过Xpath 查找当前元素所在节点信息xmlTarget.Attributes[AttributeName].Value;  //解析元素属性

5、移动光标到指定元素上

WindowsDriver
wdriver = null;WindowsElement element = null;//移动光标到指定元素上wdriver.Mouse.MouseMove(element.Coordinates);//移动光标到指定元素上Actions action = new Actions(session);action.MoveToElement(element).Perform();//通过WindowAPI设置光标位置【点击操作】中已经介绍,此处省略

6、当前页面向上向下滑动

WindowsDriver wdriver = null;RemoteTouchScreen touchScreen = new RemoteTouchScreen(wdriver);touchScreen.Scroll(0,100); //向上滚动100touchScreen.Scroll(0,-100); //向下滚动100

7、测试窗口调整

WindowsDriver
wdriver = null;//最大化窗口wdriver.Manage().Window.Maximize();//最小化窗口wdriver.Manage().Window.Minimize();//设置窗口大小Size size = new Size(500,500);wdriver.Session.Manage().Window.Size = size;
结束
4dced884df2528123b64ba18cee50a6e.png

转载地址:http://uucpo.baihongyu.com/

你可能感兴趣的文章
ASP.NET 5 入门(1) - 建立和开发ASP.NET 5 项目
查看>>
spring+activemq中多个consumer同时处理消息时遇到的性能问题
查看>>
git clone 遇到的坑
查看>>
linux系统/var/log目录下的信息详解
查看>>
Android中利用LinearLayout继承实现ImageButton 转
查看>>
图片处理--边缘高亮
查看>>
Linux计划任务Crontab实例详解教程
查看>>
android之布局
查看>>
自定义服务器控件(处理不同的浏览器)
查看>>
解决IE6-IE7下li上下间距
查看>>
配置级别greenplum 可用空间计算
查看>>
聚集索引更新后会不会马上重新排序
查看>>
幸运大抽奖
查看>>
消除人声的方法
查看>>
Post请求
查看>>
labview 中activex的初步使用方法
查看>>
Jquery 操作Html 控件 CheckBox、Radio、Select 控件
查看>>
JSP与JavaBeans
查看>>
解决Android中TextView首行缩进的问题
查看>>
oracle 查询哪些表分区
查看>>