Skip to content

Commit 353049b

Browse files
marcelwgnkarkarl
authored andcommitted
Add axe testing, add license headers
1 parent 977ec2a commit 353049b

3 files changed

Lines changed: 84 additions & 5 deletions

File tree

UITests/AxeHelper.cs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
//******************************************************************************
2+
//
3+
// Copyright (c) 2023 Microsoft Corporation. All rights reserved.
4+
//
5+
// This code is licensed under the MIT License (MIT).
6+
//
7+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
8+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
9+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
10+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
11+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
12+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
13+
// THE SOFTWARE.
14+
//
15+
//******************************************************************************
16+
17+
using Axe.Windows.Automation;
18+
using System.Diagnostics;
19+
using System.Linq;
20+
21+
namespace UITests
22+
{
23+
public class AxeHelper
24+
{
25+
public static IScanner AccessibilityScanner;
26+
27+
internal static void InitializeAxe()
28+
{
29+
var processes = Process.GetProcessesByName("WinUIGallery.DesktopWap");
30+
Assert.IsTrue(processes.Length > 0);
31+
32+
var config = Config.Builder.ForProcessId(processes[0].Id).Build();
33+
34+
AccessibilityScanner = ScannerFactory.CreateScanner(config);
35+
}
36+
37+
public static void AssertNoAccessibilityErrors()
38+
{
39+
var testResult = AccessibilityScanner.Scan(null).WindowScanOutputs.SelectMany(output => output.Errors);
40+
if (testResult.Count() != 0)
41+
{
42+
var mappedResult = testResult.Select(result => "Element " + result.Element.Properties["ControlType"] + " violated rule '" + result.Rule.Description + "'.");
43+
Assert.Fail("Failed with the following accessibility errors \r\n" + string.Join("\r\n", mappedResult));
44+
}
45+
}
46+
}
47+
}

UITests/SessionManager.cs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,20 @@
1-
using OpenQA.Selenium.Appium;
2-
using OpenQA.Selenium.Appium.Windows;
1+
//******************************************************************************
2+
//
3+
// Copyright (c) 2023 Microsoft Corporation. All rights reserved.
4+
//
5+
// This code is licensed under the MIT License (MIT).
6+
//
7+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
8+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
9+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
10+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
11+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
12+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
13+
// THE SOFTWARE.
14+
//
15+
//******************************************************************************
16+
17+
using OpenQA.Selenium.Appium;
318
using System;
419
using System.Diagnostics;
520
using System.IO;
@@ -70,7 +85,8 @@ public static void Setup(TestContext _)
7085
Thread.Sleep(3000);
7186
Assert.IsNotNull(_session);
7287
Assert.IsNotNull(_session.SessionId);
73-
88+
AxeHelper.InitializeAxe();
89+
7490
// Dismiss the disclaimer window that may pop up on the very first application launch
7591
// If the disclaimer is not found, this throws an exception, so lets catch that
7692
try

UITests/TestBase.cs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,19 @@
1-
using Microsoft.VisualBasic;
2-
using OpenQA.Selenium.Appium.Windows;
1+
//******************************************************************************
2+
//
3+
// Copyright (c) 2023 Microsoft Corporation. All rights reserved.
4+
//
5+
// This code is licensed under the MIT License (MIT).
6+
//
7+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
8+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
9+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
10+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
11+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
12+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
13+
// THE SOFTWARE.
14+
//
15+
//******************************************************************************
16+
317
using OpenQA.Selenium.Interactions;
418
using System.Threading;
519

@@ -17,6 +31,8 @@ public static void OpenControlPage(string name)
1731
search.SendKeys(name);
1832
Thread.Sleep(1_000);
1933
Session.FindElementByName(name).Click();
34+
35+
AxeHelper.AssertNoAccessibilityErrors();
2036
}
2137

2238
public static void TypeText(string text)

0 commit comments

Comments
 (0)