如何使用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(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 的行更改為以下內容:

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 記錄器

您可以使用 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控制元件來實現。