天天看點

界面控件DevExpress WPF入門指南 - 如何使用Appium測試控件

作者:慧都科技

複制下面連結擷取最新版

https://www.evget.com/product/740/download

DevExpress WPF 控件支援帶有WinAppDriver UI測試自動化的Appium架構,本文主要介紹如何準備環境和建立測試。

準備環境

按照以下步驟将 Appium 與 DevExpress WPF 控件一起使用:

1. 啟動Windows 開發人員模式 。

2. 安裝WinAppDriver 。

3. 在您的項目中引用 Appium.WebDriver nuget package 。

4. 将 DevExpress WPF 控件切換到 UI 測試模式,為此請在應用程式啟動時在測試的應用程式中将 DX.UITestingENABLED 環境變量設定為 1 或将 ClearAutomationEventsHelper.UITestingEnabled 屬性設定為 true,此模式導緻以下更改:

  • 動畫被禁用。
  • 上下文菜單僅在滑鼠單擊時打開,當滑鼠指針位于菜單上方時不會打開。
  • UI Automation樹進行了調整,使 UI 測試更加穩定和可靠。

注意:示例項目使用 EnvironmentVariables 屬性來指定 DX.UITESTINGENABLED 環境變量。

建立測試

要使用 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”capabilityName 的行更改為以下内容:

options.AddAdditionalCapability(capabilityName: "appTopLevelWindow", capabilityValue: #34;0x{WindowHandle.ToInt64():X8}");           
options.AddAdditionalCapability(capabilityName:="appTopLevelWindow", capabilityValue:=#34;0x{WindowHandle.ToInt64()}")           

注意:如果您在與被測應用程式相同的程序中托管測試,則測試應該在單獨的線程中。 在這種情況下,UI 線程可以同步處理 windows 消息。

使用 WinAppDriver UI 記錄器

您可以使用 WinAppDriver UI Recorder 工具生成測試。 在這種情況下,您的測試應用程式需要 DesktopSession 類,這種方法有以下缺點:

  • 這些測試使用 FindElementByXPath 方法來查找元素,這種方法很慢,因為它會解析整個可視化樹。
  • 這些測試很難維護,因為它們使用絕對 XPath 來查找元素,應用程式布局更改可能會破壞測試。
  • 這些測試很難閱讀。

使用 Appium API

使用 WinAppDriver 的 FindElementByName、FindElementByClassName 和 FindElementByAccessibilityId 方法來查找應用程式元素,這些方法比 FindElementByXPath 方法工作得更快。 當您修改應用程式布局時,基于這些方法的測試不會失敗。

您可以使用 Inspect 工具查找元素名稱、類名稱和自動化 ID。

提示:您可以指定應用程式元素的 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           

DevExpress WPF

DevExpress WPF擁有120+個控件和庫,将幫助您傳遞滿足甚至超出企業需求的高性能業務應用程式。通過DevExpress WPF能建立有着強大互動功能的XAML基礎應用程式,這些應用程式專注于當代客戶的需求和建構未來新一代支援觸摸的解決方案。 無論是Office辦公軟體的衍伸産品,還是以資料為中心的商業智能産品,都能通過DevExpress WPF控件來實作。

繼續閱讀