本文共 5654 字,大约阅读时间需要 18 分钟。
努力到无能为力,拼搏到感动自己。
Win App Driver 简介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*"
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、移动光标到指定元素上
WindowsDriverwdriver = 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;
转载地址:http://uucpo.baihongyu.com/