From e07b9e1032c022f602d5edf50de969e002a3e672 Mon Sep 17 00:00:00 2001 From: aristotelos Date: Mon, 26 Aug 2024 08:22:14 +0200 Subject: [PATCH 01/10] Add debug logging for Windows extensions --- src/FlaUI.WebDriver/Services/WindowsExtensionService.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/FlaUI.WebDriver/Services/WindowsExtensionService.cs b/src/FlaUI.WebDriver/Services/WindowsExtensionService.cs index d774ac1..acd51b2 100644 --- a/src/FlaUI.WebDriver/Services/WindowsExtensionService.cs +++ b/src/FlaUI.WebDriver/Services/WindowsExtensionService.cs @@ -25,10 +25,12 @@ public async Task ExecuteClickScript(Session session, WindowsClickScript action) { throw WebDriverResponseException.ElementNotFound(action.ElementId); } + _logger.LogDebug("Clicking element {ElementId} with mouse button {MouseButton}", action.ElementId, mouseButton); Mouse.Click(element.BoundingRectangle.Location, mouseButton); } else if (action.X.HasValue && action.Y.HasValue) { + _logger.LogDebug("Clicking point ({X}, {Y}) with mouse button {MouseButton}", action.X.Value, action.Y.Value, mouseButton); Mouse.Click(new Point { X = action.X.Value, Y = action.Y.Value }, mouseButton); } else @@ -42,6 +44,7 @@ public async Task ExecuteHoverScript(Session session, WindowsHoverScript action) { if (action.StartX.HasValue && action.StartY.HasValue) { + _logger.LogDebug("Moving mouse to ({X}, {Y})", action.StartX.Value, action.StartY.Value); Mouse.MoveTo(action.StartX.Value, action.StartY.Value); } else if (action.StartElementId != null) @@ -51,6 +54,7 @@ public async Task ExecuteHoverScript(Session session, WindowsHoverScript action) { throw WebDriverResponseException.ElementNotFound(action.StartElementId); } + _logger.LogDebug("Moving mouse to element {ElementId}", action.StartElementId); Mouse.MoveTo(element.BoundingRectangle.Location); } else @@ -60,11 +64,13 @@ public async Task ExecuteHoverScript(Session session, WindowsHoverScript action) if (action.DurationMs.HasValue) { + _logger.LogDebug("Waiting for {DurationMs}ms", action.DurationMs.Value); await Task.Delay(action.DurationMs.Value); } if (action.EndX.HasValue && action.EndY.HasValue) { + _logger.LogDebug("Moving mouse to ({X}, {Y})", action.EndX.Value, action.EndY.Value); Mouse.MoveTo(action.EndX.Value, action.EndY.Value); } else if (action.EndElementId != null) @@ -74,6 +80,7 @@ public async Task ExecuteHoverScript(Session session, WindowsHoverScript action) { throw WebDriverResponseException.ElementNotFound(action.EndElementId); } + _logger.LogDebug("Moving mouse to element {ElementId}", action.EndElementId); Mouse.MoveTo(element.BoundingRectangle.Location); } else From 01716db8d4934cbf24b1119432de1071527c0b9a Mon Sep 17 00:00:00 2001 From: aristotelos Date: Mon, 26 Aug 2024 08:25:04 +0200 Subject: [PATCH 02/10] Remove unused usings --- src/FlaUI.WebDriver/Controllers/ExecuteController.cs | 6 +----- src/FlaUI.WebDriver/Services/WindowsExtensionService.cs | 1 - 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/FlaUI.WebDriver/Controllers/ExecuteController.cs b/src/FlaUI.WebDriver/Controllers/ExecuteController.cs index 77eae66..6a45bc3 100644 --- a/src/FlaUI.WebDriver/Controllers/ExecuteController.cs +++ b/src/FlaUI.WebDriver/Controllers/ExecuteController.cs @@ -1,11 +1,7 @@ -using FlaUI.Core.Input; -using FlaUI.Core.WindowsAPI; -using FlaUI.WebDriver.Models; +using FlaUI.WebDriver.Models; using FlaUI.WebDriver.Services; -using Microsoft.AspNetCore.Authentication.OAuth.Claims; using Microsoft.AspNetCore.Mvc; using System.Diagnostics; -using System.Drawing; using System.Text.Json; namespace FlaUI.WebDriver.Controllers diff --git a/src/FlaUI.WebDriver/Services/WindowsExtensionService.cs b/src/FlaUI.WebDriver/Services/WindowsExtensionService.cs index acd51b2..ee25b0f 100644 --- a/src/FlaUI.WebDriver/Services/WindowsExtensionService.cs +++ b/src/FlaUI.WebDriver/Services/WindowsExtensionService.cs @@ -2,7 +2,6 @@ using FlaUI.Core.WindowsAPI; using FlaUI.WebDriver.Models; using System.Drawing; -using System.Runtime.CompilerServices; namespace FlaUI.WebDriver.Services { From 062c062f9a96ee891cc01f83cacb23f5d4802469 Mon Sep 17 00:00:00 2001 From: aristotelos Date: Mon, 26 Aug 2024 09:01:30 +0200 Subject: [PATCH 03/10] Fix dependabot directory Attempt to fix dependabot, which is running daily but does not discover any projects: ``` No dotnet-tools.json file found. No global.json file found. Discovering projects beneath [.]. No project files found. Central Package Management is not enabled. ``` --- .github/dependabot.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index bc18f00..08b8e55 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,6 +1,6 @@ version: 2 updates: - package-ecosystem: "nuget" - directory: "/" + directory: "/src" schedule: interval: "daily" From 39ebbdadbca6c98faf78c90f05d12e33c13b6085 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Aug 2024 06:36:19 +0000 Subject: [PATCH 04/10] Bump Swashbuckle.AspNetCore from 6.6.2 to 6.7.3 in /src Bumps [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) from 6.6.2 to 6.7.3. - [Release notes](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/releases) - [Commits](https://github.com/domaindrivendev/Swashbuckle.AspNetCore/compare/v6.6.2...v6.7.3) --- updated-dependencies: - dependency-name: Swashbuckle.AspNetCore dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- src/FlaUI.WebDriver/FlaUI.WebDriver.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/FlaUI.WebDriver/FlaUI.WebDriver.csproj b/src/FlaUI.WebDriver/FlaUI.WebDriver.csproj index b8a79f6..2a841ff 100644 --- a/src/FlaUI.WebDriver/FlaUI.WebDriver.csproj +++ b/src/FlaUI.WebDriver/FlaUI.WebDriver.csproj @@ -18,7 +18,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + From 2ee5a3d1e01854c77a515a29865042f2cd0e04f8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Aug 2024 06:36:35 +0000 Subject: [PATCH 05/10] Bump Selenium.WebDriver from 4.21.0 to 4.23.0 in /src Bumps [Selenium.WebDriver](https://github.com/SeleniumHQ/selenium) from 4.21.0 to 4.23.0. - [Release notes](https://github.com/SeleniumHQ/selenium/releases) - [Commits](https://github.com/SeleniumHQ/selenium/compare/selenium-4.21.0...selenium-4.23.0) --- updated-dependencies: - dependency-name: Selenium.WebDriver dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- src/FlaUI.WebDriver.UITests/FlaUI.WebDriver.UITests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/FlaUI.WebDriver.UITests/FlaUI.WebDriver.UITests.csproj b/src/FlaUI.WebDriver.UITests/FlaUI.WebDriver.UITests.csproj index a27aeb0..fd71ca2 100644 --- a/src/FlaUI.WebDriver.UITests/FlaUI.WebDriver.UITests.csproj +++ b/src/FlaUI.WebDriver.UITests/FlaUI.WebDriver.UITests.csproj @@ -11,7 +11,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all From e7deaafba0c2969b4fd26f581f53b1313e4319e5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Aug 2024 06:37:13 +0000 Subject: [PATCH 06/10] Bump NUnit from 4.1.0 to 4.2.1 in /src Bumps [NUnit](https://github.com/nunit/nunit) from 4.1.0 to 4.2.1. - [Release notes](https://github.com/nunit/nunit/releases) - [Changelog](https://github.com/nunit/nunit/blob/main/CHANGES.md) - [Commits](https://github.com/nunit/nunit/compare/4.1.0...4.2.1) --- updated-dependencies: - dependency-name: NUnit dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- src/FlaUI.WebDriver.UITests/FlaUI.WebDriver.UITests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/FlaUI.WebDriver.UITests/FlaUI.WebDriver.UITests.csproj b/src/FlaUI.WebDriver.UITests/FlaUI.WebDriver.UITests.csproj index a27aeb0..f876723 100644 --- a/src/FlaUI.WebDriver.UITests/FlaUI.WebDriver.UITests.csproj +++ b/src/FlaUI.WebDriver.UITests/FlaUI.WebDriver.UITests.csproj @@ -9,7 +9,7 @@ - + From 43ea19e7ac9dfb45768d4034fb9b819b294759b7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Aug 2024 06:50:06 +0000 Subject: [PATCH 07/10] Bump NUnit3TestAdapter from 4.5.0 to 4.6.0 in /src Bumps [NUnit3TestAdapter](https://github.com/nunit/nunit3-vs-adapter) from 4.5.0 to 4.6.0. - [Release notes](https://github.com/nunit/nunit3-vs-adapter/releases) - [Commits](https://github.com/nunit/nunit3-vs-adapter/compare/V4.5.0...V4.6.0) --- updated-dependencies: - dependency-name: NUnit3TestAdapter dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- src/FlaUI.WebDriver.UITests/FlaUI.WebDriver.UITests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/FlaUI.WebDriver.UITests/FlaUI.WebDriver.UITests.csproj b/src/FlaUI.WebDriver.UITests/FlaUI.WebDriver.UITests.csproj index 742a25e..ddddd49 100644 --- a/src/FlaUI.WebDriver.UITests/FlaUI.WebDriver.UITests.csproj +++ b/src/FlaUI.WebDriver.UITests/FlaUI.WebDriver.UITests.csproj @@ -10,7 +10,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive From 89f24769f1fa3ddf3a80ce649fada88a6fbb8d6c Mon Sep 17 00:00:00 2001 From: aristotelos Date: Tue, 27 Aug 2024 09:41:26 +0200 Subject: [PATCH 08/10] Fix element interaction and screenshots for desktop sessions Commit 666feb62d05a147439b20976e5c2a2084ef55761 fixed finding elements in desktop sessions (`Root` app), but not clicking on those elements or getting element properties, nor creating screenshots from the desktop. Adding support for those actions with this commit. --- src/FlaUI.WebDriver.UITests/ElementTests.cs | 12 +++++++ .../FindElementsTests.cs | 2 +- .../ScreenshotTests.cs | 36 +++++++++++++++++++ .../Controllers/ElementController.cs | 2 +- .../Controllers/ScreenshotController.cs | 18 +++++++--- 5 files changed, 64 insertions(+), 6 deletions(-) create mode 100644 src/FlaUI.WebDriver.UITests/ScreenshotTests.cs diff --git a/src/FlaUI.WebDriver.UITests/ElementTests.cs b/src/FlaUI.WebDriver.UITests/ElementTests.cs index a658ee4..7c38ff8 100644 --- a/src/FlaUI.WebDriver.UITests/ElementTests.cs +++ b/src/FlaUI.WebDriver.UITests/ElementTests.cs @@ -300,6 +300,18 @@ public void GetAttribute_TextBox_ReturnsValue(string attributeName, string expec Assert.That(value, Is.EqualTo(expectedValue)); } + [Test] + public void GetAttribute_DesktopElement_ReturnsAttribute() + { + var driverOptions = FlaUIDriverOptions.RootApp(); + using var driver = new RemoteWebDriver(WebDriverFixture.WebDriverUrl, driverOptions); + var element = driver.FindElement(By.Name("Taskbar")); + + var result = element.GetDomAttribute("ClassName"); + + Assert.That(result, Is.EqualTo("Shell_TrayWnd")); + } + [Test] public void GetAttribute_PatternProperty_ReturnsValue() { diff --git a/src/FlaUI.WebDriver.UITests/FindElementsTests.cs b/src/FlaUI.WebDriver.UITests/FindElementsTests.cs index 4ef3ca6..93341dc 100644 --- a/src/FlaUI.WebDriver.UITests/FindElementsTests.cs +++ b/src/FlaUI.WebDriver.UITests/FindElementsTests.cs @@ -9,7 +9,7 @@ namespace FlaUI.WebDriver.UITests public class FindElementsTests { [Test] - public void FindElement_FromRoot_ReturnsElement() + public void FindElement_FromDesktop_ReturnsElement() { var driverOptions = FlaUIDriverOptions.RootApp(); using var driver = new RemoteWebDriver(WebDriverFixture.WebDriverUrl, driverOptions); diff --git a/src/FlaUI.WebDriver.UITests/ScreenshotTests.cs b/src/FlaUI.WebDriver.UITests/ScreenshotTests.cs new file mode 100644 index 0000000..1754a62 --- /dev/null +++ b/src/FlaUI.WebDriver.UITests/ScreenshotTests.cs @@ -0,0 +1,36 @@ +using FlaUI.WebDriver.UITests.TestUtil; +using NUnit.Framework; +using OpenQA.Selenium.Remote; +using System.Drawing; +using System.IO; + +namespace FlaUI.WebDriver.UITests +{ + public class ScreenshotTests + { + [Test] + public void GetScreenshot_FromDesktop_ReturnsScreenshot() + { + var driverOptions = FlaUIDriverOptions.RootApp(); + using var driver = new RemoteWebDriver(WebDriverFixture.WebDriverUrl, driverOptions); + + var screenshot = driver.GetScreenshot(); + + Assert.That(screenshot.AsByteArray.Length, Is.Not.Zero); + } + + [Test] + public void GetScreenshot_FromApplication_ReturnsScreenshotOfCurrentWindow() + { + var driverOptions = FlaUIDriverOptions.TestApp(); + using var driver = new RemoteWebDriver(WebDriverFixture.WebDriverUrl, driverOptions); + + var screenshot = driver.GetScreenshot(); + + Assert.That(screenshot.AsByteArray.Length, Is.Not.Zero); + using var stream = new MemoryStream(screenshot.AsByteArray); + using var image = new Bitmap(stream); + Assert.That(image.Size, Is.EqualTo(driver.Manage().Window.Size)); + } + } +} diff --git a/src/FlaUI.WebDriver/Controllers/ElementController.cs b/src/FlaUI.WebDriver/Controllers/ElementController.cs index 624a73b..12f4bff 100644 --- a/src/FlaUI.WebDriver/Controllers/ElementController.cs +++ b/src/FlaUI.WebDriver/Controllers/ElementController.cs @@ -298,7 +298,7 @@ private AutomationElement GetElement(Session session, string elementId) private Session GetActiveSession(string sessionId) { var session = GetSession(sessionId); - if (session.App == null || session.App.HasExited) + if (session.App != null && session.App.HasExited) { throw WebDriverResponseException.NoWindowsOpenForSession(); } diff --git a/src/FlaUI.WebDriver/Controllers/ScreenshotController.cs b/src/FlaUI.WebDriver/Controllers/ScreenshotController.cs index 881c2fc..e7b51c8 100644 --- a/src/FlaUI.WebDriver/Controllers/ScreenshotController.cs +++ b/src/FlaUI.WebDriver/Controllers/ScreenshotController.cs @@ -21,9 +21,19 @@ public ScreenshotController(ILogger logger, ISessionReposi public async Task TakeScreenshot([FromRoute] string sessionId) { var session = GetActiveSession(sessionId); - var currentWindow = session.CurrentWindow; - _logger.LogInformation("Taking screenshot of window with title {WindowTitle} (session {SessionId})", currentWindow.Title, session.SessionId); - using var bitmap = currentWindow.Capture(); + AutomationElement screenshotElement; + if (session.App == null) + { + _logger.LogInformation("Taking screenshot of desktop (session {SessionId})", session.SessionId); + screenshotElement = session.Automation.GetDesktop(); + } + else + { + var currentWindow = session.CurrentWindow; + _logger.LogInformation("Taking screenshot of window with title {WindowTitle} (session {SessionId})", currentWindow.Title, session.SessionId); + screenshotElement = currentWindow; + } + using var bitmap = screenshotElement.Capture(); return await Task.FromResult(WebDriverResult.Success(GetBase64Data(bitmap))); } @@ -57,7 +67,7 @@ private AutomationElement GetElement(Session session, string elementId) private Session GetActiveSession(string sessionId) { var session = GetSession(sessionId); - if (session.App == null || session.App.HasExited) + if (session.App != null && session.App.HasExited) { throw WebDriverResponseException.NoWindowsOpenForSession(); } From eee2b2c7ed9647319648fa8f43aa4be05ef6ec1f Mon Sep 17 00:00:00 2001 From: aristotelos Date: Tue, 27 Aug 2024 09:43:31 +0200 Subject: [PATCH 09/10] Fix test filename --- src/FlaUI.WebDriver.UITests/{ActionsTest.cs => ActionsTests.cs} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/FlaUI.WebDriver.UITests/{ActionsTest.cs => ActionsTests.cs} (100%) diff --git a/src/FlaUI.WebDriver.UITests/ActionsTest.cs b/src/FlaUI.WebDriver.UITests/ActionsTests.cs similarity index 100% rename from src/FlaUI.WebDriver.UITests/ActionsTest.cs rename to src/FlaUI.WebDriver.UITests/ActionsTests.cs From 7c96990fbe9c51fe0b689f4e29d398a79341c9f0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Aug 2024 10:28:18 +0000 Subject: [PATCH 10/10] Bump Microsoft.NET.Test.Sdk from 17.10.0 to 17.11.0 in /src Bumps [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 17.10.0 to 17.11.0. - [Release notes](https://github.com/microsoft/vstest/releases) - [Changelog](https://github.com/microsoft/vstest/blob/main/docs/releases.md) - [Commits](https://github.com/microsoft/vstest/compare/v17.10.0...v17.11.0) --- updated-dependencies: - dependency-name: Microsoft.NET.Test.Sdk dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- src/FlaUI.WebDriver.UITests/FlaUI.WebDriver.UITests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/FlaUI.WebDriver.UITests/FlaUI.WebDriver.UITests.csproj b/src/FlaUI.WebDriver.UITests/FlaUI.WebDriver.UITests.csproj index ddddd49..3ac7a98 100644 --- a/src/FlaUI.WebDriver.UITests/FlaUI.WebDriver.UITests.csproj +++ b/src/FlaUI.WebDriver.UITests/FlaUI.WebDriver.UITests.csproj @@ -8,7 +8,7 @@ - + pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy