Files
elwig/Tests/E2ETests/AppSession.cs
Lorenz Stechauner 34178105a7
All checks were successful
Test / Run tests (push) Successful in 2m38s
E2ETests: Use ElwigTestDB.sqlite3 instead of default
2024-07-08 13:05:21 +02:00

50 lines
2.2 KiB
C#

using OpenQA.Selenium.Appium.Windows;
using OpenQA.Selenium.Appium;
namespace Tests.E2ETests {
public class AppSession : IDisposable {
private const int WaitForAppLaunch = 3;
private readonly string WinAppDriverUrl;
public readonly WindowsDriver<WindowsElement> App;
public readonly WindowsDriver<WindowsElement> Desktop;
public AppSession(string appPath, string? appArgs, string winAppDriverUrl) {
WinAppDriverUrl = winAppDriverUrl;
var appiumOptions = new AppiumOptions();
appiumOptions.AddAdditionalCapability("app", appPath);
if (appArgs != null)
appiumOptions.AddAdditionalCapability("appArguments", appArgs);
appiumOptions.AddAdditionalCapability("deviceName", "WindowsPC");
appiumOptions.AddAdditionalCapability("ms:waitForAppLaunch", WaitForAppLaunch);
App = new WindowsDriver<WindowsElement>(new Uri(WinAppDriverUrl), appiumOptions);
Assert.That(App, Is.Not.Null);
Assert.That(App.SessionId, Is.Not.Null);
App.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(1.5);
var desktopOptions = new AppiumOptions();
desktopOptions.AddAdditionalCapability("app", "Root");
desktopOptions.AddAdditionalCapability("deviceName", "WindowsPC");
Desktop = new WindowsDriver<WindowsElement>(new Uri(WinAppDriverUrl), desktopOptions);
}
public WindowsDriver<WindowsElement> CreateWindowDriver(string windowName) {
var window = Desktop.FindElementByAccessibilityId(windowName);
var windowHandle = int.Parse(window.GetAttribute("NativeWindowHandle")).ToString("x"); // Convert to Hex
var appiumOptions = new AppiumOptions();
appiumOptions.AddAdditionalCapability("appTopLevelWindow", windowHandle);
return new WindowsDriver<WindowsElement>(new Uri(WinAppDriverUrl), appiumOptions);
}
public void Dispose() {
GC.SuppressFinalize(this);
App.Close();
try {
Desktop.FindElementByName("Ja").Click();
} catch { }
App.Dispose();
Desktop.Close();
Desktop.Dispose();
}
}
}