DevExpress Winforms Controls 內建140多個UI控制元件和庫,完美構建流暢、美觀且易於使用的應用程式。無論是Office風格的介面,還是分析處理大批量的業務資料,DevExpress WinForms都能輕鬆勝任。DevExpress廣泛應用於ECM企業內容管理、 成本管控、程序監督、生產排程,在企業/政務資訊化管理中佔據一席重要之地。
【適用範圍】:各種桌面、Web應用程式開發,尤其是WinForms應用程式開發。
點選獲取DevExpress v19.2完整版試用下載:https://www.evget.com/product/740/download
在針對Visual Studio 2019的發行說明中,Microsoft 宣佈Coded UI測試的生命週期終止。
Microsoft建議將Appium with WinAppDriver 一起用於測試桌面和UWP應用,此訊息引起廣大使用者的興趣:DevExpress控制元件是否與Appium相容?經過DevExpress團隊的反覆測試,答案是肯定的!使用Appium建立自動UI測試的方法如下。
1. 跳轉到 https://github.com/Microsoft/WinAppDriver/releases然後下載兩個APP,
WinAppDriver - 允許您執行測試,需要安裝。WinAppDriver UI Recorder - 允許您在執行時記錄測試,不需要安裝 - 將下載的存檔解壓到任何資料夾。2. 在Windows中開啟Developer Mode。
3. 以管理員身份執行WinAppDriver.exe並使其執行,請注意應用程式正在偵聽的地址,稍後您將需要它。
4. 開啟您要測試的Visual Studio解決方案,或建立一個新的示例解決方案。
5. 將新的單元測試專案新增到解決方案。
6. 在Solution Explorer中右鍵單擊Unit Test project,然後選擇“Manage NuGet Packages…”,安裝最新的穩定Appium.WebDriver程式包。
7. 開啟Unit Test專案的UnitTest1.cs檔案,並新增兩個類:MainDemoSession(定義開始和結束測試會話的方法)和Helper(包含查詢被測試的UI元素的方法),將步驟3中的地址用作WindowsApplicationDriverUrl值。
public class MainDemoSession{protected const string WindowsApplicationDriverUrl = "http://127.0.0.1:4723";private const string ApplicationPath = @"C:\\Users\\...\\AppiumTest.exe";protected static WindowsDriver<WindowsElement> desktopSession;public static void Setup(TestContext context) { // Launch a new instance of the tested application if (desktopSession == null) { // Create a new session to launch the tested applicationAppiumOptions options = new AppiumOptions(); options.AddAdditionalCapability("app", ApplicationPath); desktopSession = new WindowsDriver<WindowsElement>( new Uri(WindowsApplicationDriverUrl), options); Assert.IsNotNull(desktopSession); Assert.IsNotNull(desktopSession.SessionId);// Set implicit timeout to 1.5 seconds //to make element search to retry every 500 ms //for at most three times desktopSession.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(1.5); } }public static void TearDown() { // Close the application and delete the session if (desktopSession != null) { desktopSession.Close(); desktopSession.Quit(); desktopSession = null; } } }public static class Helper { public static WindowsElement FindElementByAbsoluteXPath( this WindowsDriver<WindowsElement> desktopSession, string xPath, int nTryCount = 3) { WindowsElement uiTarget = null; while (nTryCount-- > 0) { try { uiTarget = desktopSession.FindElementByXPath(xPath); } catch { } if (uiTarget != null) { break; } else { System.Threading.Thread.Sleep(400); } } return uiTarget; } }
8. 修改自動生成的UnitTest1類,如下所示:
[TestClass]public class UnitTest1 : MainDemoSession{[TestMethod]public void TestMethod1(){//test start//test finish } [ClassInitialize] public static void ClassInitialize(TestContext context) { Setup(context); }[ClassCleanup] public static void ClassCleanup() { TearDown(); } }
9. 執行您的應用程式,並將其拖到主系統顯示屏上(如果您具有多螢幕設定)。
10. 啟動WinAppDriver UI Recorder然後點選“Record”, 將滑鼠懸停在要與之互動的第一個UI元素上,然後等待它開始閃爍藍色。Recorder的狀態列會將其文字從“Active”更改為“XPath Ready”。
11. 當該元素閃爍時,recorder已準備就緒,您可以執行UI操作:單擊此元素、將其拖動、輸入新值等。完成此元素後,將滑鼠懸停在另一個UI元素上,等待 recorder的確認並重復該過程。
12. 記錄了要重現的一系列步驟後,請在recorder中單擊“Pause”,您可以開啟actions selector確保已記錄所有UI操作。
13. 單擊“Generate and copy C# code to Clipboard”按鈕來複制所有記錄的操作程式碼,將此程式碼貼上到UnitTest1.TestMethod1方法中。 例如,下面的程式碼選擇“Job”標籤。
[TestMethod] public void TestMethod1() {//test start// LeftClick on TabItem "Job" at (20,31)Console.WriteLine("LeftClick on TabItem \\"Job\\" at (20,31)");string xpath_LeftClickTabItemJob_20_31 = "/Pane\\[@ClassName=\\"#32769\\"\\][@Name=\\"Desktop 1\\"]/Window\\[starts-with(@AutomationId,\\"XtraForm\\")]/Pane[@Name=\\"The XtraLayoutControl\\"\\][starts-with(@AutomationId,\\"dataLayoutControl\\")]/Table[@Name=\\"Root\\"]/Table[@Name=\\"autoGeneratedGroup0\\"]/Table[@Name=\\"Root\\"]/Table[@Name=\\"Photo\\"]/Table[@Name=\\"FirstAndLastName\\"]/Tab[@Name=\\"Tabs\\"]/TabItem[@Name=\\"Job\\"]";var winElem_LeftClickTabItemJob_20_31 = desktopSession.FindElementByAbsoluteXPath(xpath_LeftClickTabItemJob_20_31);if (winElem_LeftClickTabItemJob_20_31 != null){winElem_LeftClickTabItemJob_20_31.Click();}else{Console.WriteLine($"Failed to find element using xpath: {xpath_LeftClickTabItemJob_20_31}");return;}//test finish}14. 在內部測試期間,自動生成的程式碼可能無法通過其完整路徑找到UI元素:
/Pane\\[@ClassName=\\"#32769\\"\\][@Name=\\"Desktop 1\\"]/Window[starts-with…
如果發生這種情況,請縮短所有元素路徑,使其以“ / Window”開頭。
string xpath_LeftClickTabItemJob_20_31 = "/Window[starts-with(@AutomationId...";
此外,您可以使用Assert.Fail而不是Console.WriteLine來除錯測試(如果找不到UI元素,則可以)。
Assert.Fail($"Failed to find element...");
15. 在Visual Studio中右鍵單擊Unit Test project,然後單擊“Run Tests”。測試將啟動您的應用程式,重複所有記錄的步驟,然後關閉應用程式。 所有測試操作都記錄在步驟3中啟動的WinAppDriver控制檯中。
您可以通過與Coded UI相同的方式啟動Appium測試,唯一的區別是您需要在測試執行計算機上執行WinAppDriver。
DevExpress v19.2全新發布,最新動態請持續關注DevExpress中文網!