如何用Appium测试控件
DevExpress WPF控件支持Appium框架与WinAppDriver UI测试自动化。本主题展示了如何准备环境和创建测试。
准备环境
按照以下步骤使用Appium与DevExpress WPF控件:
- 启用Windows开发人员模式。
- 安装winappdriver。
- 在您的项目中引用Appium.WebDriver nuget package。
-
将DevExpress WPF控件切换到UI测试模式。要做到这一点,请设置DX.UITESTINGENABLED 环境变量为1,或者ClearAutomationEventsHelper.UITestingEnabled属性在被测试的应用程序启动时为true。这种模式导致以下变化:
- 动画被禁用。
- 上下文菜单仅在鼠标单击时打开,当鼠标指针位于菜单上方时不打开。
- UI Automation tree经过调整,使UI测试更加稳定和可靠。
提示:示例项目使用EnvironmentVariables 属性来指定DX.UITESTINGENABLED环境变量。
View Example :Test the OutlookInspiredApp with Appium
创建测试
要使用Appium API,请创建一个WindowsDriver实例。下面的代码示例运行测试过的应用程序并创建一个WindowsDriver会话:
UnitTest1.cs:
var options = new AppiumOptions(); options.AddAdditionalCapability(capabilityName: "app", capabilityValue: PathToTheApp); options.AddAdditionalCapability(capabilityName: "deviceName", capabilityValue: "WindowsPC"); options.AddAdditionalCapability(capabilityName: "platformName", capabilityValue: "Windows"); options.AddAdditionalCapability(capabilityName: "ms:experimental-webdriver", capabilityValue: true); var driver = new WindowsDriver<WindowsElement>(new Uri("http://127.0.0.1:4723"), options);
点击复制
UnitTest1.vb:
Dim options = New AppiumOptions() options.AddAdditionalCapability(capabilityName:="app", capabilityValue:=PathToTheApp) options.AddAdditionalCapability(capabilityName:="deviceName", capabilityValue:="WindowsPC") options.AddAdditionalCapability(capabilityName:="platformName", capabilityValue:="Windows") options.AddAdditionalCapability(capabilityName:="ms:experimental-webdriver", capabilityValue:=True) Dim driver = New WindowsDriver(Of WindowsElement)(New Uri("http://127.0.0.1:4723"), options)
点击复制
要测试一个正在运行的应用程序,将上面代码示例中的" app " capacityname行更改为以下内容:
UnitTest1.cs :
options.AddAdditionalCapability(capabilityName: "appTopLevelWindow", capabilityValue: $"0x{WindowHandle.ToInt64():X8}");
点击复制
UnitTest1.vb:
options.AddAdditionalCapability(capabilityName:="appTopLevelWindow", capabilityValue:=$"0x{WindowHandle.ToInt64()}")
点击复制
提示:如果您在与被测试应用程序相同的进程中托管测试,则测试应该在单独的线程中。在这种情况下,UI线程可以同步处理windows消息。
使用 WinAppDriver UI recorder
您可以使用WinAppDriver UI recorder工具来生成测试,在这种情况下,测试应用程序需要 DesktopSession 类。这种方法有以下缺点:
- 这些测试使用FindElementByXPath方法来查找元素,这个方法比较慢,因为它要解析整个可视树。
- 这些测试很难维护,因为它们使用绝对xpath来查找元素,应用程序布局的改变可能会破坏测试。
- 这些试题很难读懂,参考我们的GitHub存储库上的提交,比较记录的测试和基于Appium api的测试可读性。
使用 Appium API
使用WinAppDriver的FindElementByName、FindElementByClassName和FindElementByAccessibilityId方法来查找应用程序元素。这些方法的工作速度比FindElementByXPath方法快,修改应用程序布局时,基于这些方法的测试不会失败。
您可以使用检查工具来查找元素名、类名和自动化 ids。
提示:您可以指定应用程序元素的AutomationProperties.AutomationId 附加属性来增强测试的可读性。
示例
下面的代码打开“New Employee”窗口,找到带有TextEdit类的“First Name”元素,输入“John”,然后点击“Save & Close”元素:
C#:
[Test] public void CreateEmployee() { var bNewEmployee = driver.FindElementByName("New Employee"); bNewEmployee.Click(); WindowsElement newEmployeeWindow = null; while (newEmployeeWindow == null) newEmployeeWindow = driver.FindElementByName("Employee (New)"); newEmployeeWindow.FindElementByName("First Name").FindElementByClassName("TextEdit").SendKeys("John"); newEmployeeWindow.FindElementByName("Save & Close").Click(); }
点击复制
Visual Basic:
Public Sub CreateEmployee() Dim driver = desktopSession.DesktopSessionElement Dim bNewEmployee = driver.FindElementByName("New Employee") bNewEmployee.Click() Dim newEmployeeWindow As WindowsElement = Nothing While newEmployeeWindow Is Nothing newEmployeeWindow = driver.FindElementByName("Employee (New)") End While newEmployeeWindow.FindElementByName("First Name").FindElementByClassName("TextEdit").SendKeys("John") newEmployeeWindow.FindElementByName("Save & Close").Click() End Sub
点击复制
View Example:Test theOutlookInspiredApp with Appium