系列文章目录
研究Winappdriver测试Winform(二)
前言
如何使用Appium/Selenium编写自己的测试脚本的步骤,以及如何在Microsoft Visual Studio中使用C#进行测试脚本的创作
编写自己的测试脚本
你可以选择任何Appium/Selenium支持的编程语言或工具来编写测试脚本。在下面的示例中,我们将使用Microsoft Visual Studio使用C#编写测试脚本。
创建测试项目
-
打开Microsoft Visual Studio 2015或Microsoft Visual Studio 2017。
注意:在Visual Studio 2017中,请确保已安装了可选的.NET桌面开发工作负载。 -
创建测试项目和解决方案。选择New Project > Templates > Visual C# > Test > Unit Test Project。
-
创建后,选择Project > Manage NuGet Packages… > Browse,搜索并安装Appium.WebDriver的NuGet包。
-
开始编写你的测试脚本(查看示例代码)。
测试Universal Windows Platform应用程序
要测试UWP应用程序,只需在创建会话时在应用程序能力项中指定要测试的应用程序的Application Id。如果你的应用程序支持,还可以通过appArguments能力项指定启动参数。下面是一个以C#编写的为Windows Alarms & Clock应用程序创建测试会话的示例:
// 启动 Alarms & Clock 应用
DesiredCapabilities appCapabilities = new DesiredCapabilities();
appCapabilities.SetCapability("app", "Microsoft.WindowsAlarms_8wekyb3d8bbwe!App");
AlarmClockSession = new WindowsDriver<WindowsElement>(new Uri("http://127.0.0.1:4723"), appCapabilities);
// 使用会话控制应用
AlarmClockSession.FindElementByAccessibilityId("AddAlarmButton").Click();
AlarmClockSession.FindElementByAccessibilityId("AlarmNameTextBox").Clear();
你可以在生成的AppX\vs.appxrecipe文件中的RegisteredUserModeAppID节点下找到你的应用程序的Application Id。例如:c24c8163-548e-4b84-a466-530178fc0580_scyf5npe3hv32!App
。
测试经典Windows应用程序
要测试经典Windows应用程序,需要在创建新会话时在应用程序能力项中指定要测试的应用程序的完整可执行路径。与现代(UWP)应用程序类似,你还可以通过appArguments能力项指定启动参数。但与现代应用程序不同,你还可以通过"appWorkingDir"能力项为经典应用程序指定应用程序工作目录。以下是为在C:\MyTestFolder\中打开MyTestFile.txt的Notepad应用程序创建测试会话的示例:
// 启动 Notepad
DesiredCapabilities appCapabilities = new DesiredCapabilities();
appCapabilities.SetCapability("app", @"C:\Windows\System32\notepad.exe");
appCapabilities.SetCapability("appArguments", @"MyTestFile.txt");
appCapabilities.SetCapability("appWorkingDir", @"C:\MyTestFolder\");
NotepadSession = new WindowsDriver<WindowsElement>(new Uri("http://127.0.0.1:4723"), appCapabilities);
// 使用会话控制应用
NotepadSession.FindElementByClassName("Edit").SendKeys("This is some text");
创建桌面会话
一个测试会话通常对应一个应用程序的顶级窗口。只要会话保持活动状态,你就可以发送输入交互并导航应用程序元素树。在Windows 10 PC上,应用程序可能触发外部更改,如弹出通知、应用磁贴等。此外,一些应用程序还会响应可以通过开始菜单或其他来源触发的外部事件。Windows Application Driver通过通过Root会话公开整个桌面来支持所有这些场景,如下所示:
DesiredCapabilities appCapabilities = new DesiredCapabilities();
appCapabilities.SetCapability("app", "Root");
DesktopSession = new WindowsDriver<WindowsElement>(new Uri("http://127.0.0.1:4723"), appCapabilities);
// 使用会话控制桌面
DesktopSession.Keyboard.PressKey(OpenQA.Selenium.Keys.Command + "a" + OpenQA.Selenium.Keys.Command);
附加到现有应用窗口
在某些情况下,你可能希望测试不像上面所示那样以传统方式启动的应用程序。例如,Cortana应用程序始终在运行,并且在通过开始菜单或键盘快捷键触发之前不会启动UI窗口。在这种情况下,可以通过将应用程序顶级窗口句柄提供为十六进制字符串(例如0xB822E2)来在Windows Application Driver中
创建新会话。此窗口句柄可以从上面提到的桌面会话中检索。这种机制也可用于启动时间异常长的应用程序。以下是在使用键盘快捷键启动Cortana应用程序并使用桌面会话定位窗口的示例:
DesktopSession.Keyboard.SendKeys(Keys.Meta + "s" + Keys.Meta);
var CortanaWindow = DesktopSession.FindElementByName("Cortana");
var CortanaTopLevelWindowHandle = CortanaWindow.GetAttribute("NativeWindowHandle");
CortanaTopLevelWindowHandle = (int.Parse(CortanaTopLevelWindowHandle)).ToString("x"); // 转换为十六进制
// 通过附加到Cortana顶级窗口创建会话
DesiredCapabilities appCapabilities = new DesiredCapabilities();
appCapabilities.SetCapability("appTopLevelWindow", CortanaTopLevelWindowHandle);
CortanaSession = new WindowsDriver<WindowsElement>(new Uri(WindowsApplicationDriverUrl), appCapabilities);
// 使用会话控制Cortana
CortanaSession.FindElementByAccessibilityId("SearchTextBox").SendKeys("add");
总结
以上就是今天要讲的内容,介绍在Windows上利用Appium测试本机应用的各种方式,如何启动应用,定位元素,以及不同类型应用的特点等。