Skip to content

Commit 73db943

Browse files
authored
Merge pull request #71 from FlaUI/fix-desktop-element-interaction
Fix element interaction and screenshots for desktop sessions
2 parents 3e9587a + eee2b2c commit 73db943

File tree

6 files changed

+64
-6
lines changed

6 files changed

+64
-6
lines changed
File renamed without changes.

src/FlaUI.WebDriver.UITests/ElementTests.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,18 @@ public void GetAttribute_TextBox_ReturnsValue(string attributeName, string expec
300300
Assert.That(value, Is.EqualTo(expectedValue));
301301
}
302302

303+
[Test]
304+
public void GetAttribute_DesktopElement_ReturnsAttribute()
305+
{
306+
var driverOptions = FlaUIDriverOptions.RootApp();
307+
using var driver = new RemoteWebDriver(WebDriverFixture.WebDriverUrl, driverOptions);
308+
var element = driver.FindElement(By.Name("Taskbar"));
309+
310+
var result = element.GetDomAttribute("ClassName");
311+
312+
Assert.That(result, Is.EqualTo("Shell_TrayWnd"));
313+
}
314+
303315
[Test]
304316
public void GetAttribute_PatternProperty_ReturnsValue()
305317
{

src/FlaUI.WebDriver.UITests/FindElementsTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ namespace FlaUI.WebDriver.UITests
99
public class FindElementsTests
1010
{
1111
[Test]
12-
public void FindElement_FromRoot_ReturnsElement()
12+
public void FindElement_FromDesktop_ReturnsElement()
1313
{
1414
var driverOptions = FlaUIDriverOptions.RootApp();
1515
using var driver = new RemoteWebDriver(WebDriverFixture.WebDriverUrl, driverOptions);
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
using FlaUI.WebDriver.UITests.TestUtil;
2+
using NUnit.Framework;
3+
using OpenQA.Selenium.Remote;
4+
using System.Drawing;
5+
using System.IO;
6+
7+
namespace FlaUI.WebDriver.UITests
8+
{
9+
public class ScreenshotTests
10+
{
11+
[Test]
12+
public void GetScreenshot_FromDesktop_ReturnsScreenshot()
13+
{
14+
var driverOptions = FlaUIDriverOptions.RootApp();
15+
using var driver = new RemoteWebDriver(WebDriverFixture.WebDriverUrl, driverOptions);
16+
17+
var screenshot = driver.GetScreenshot();
18+
19+
Assert.That(screenshot.AsByteArray.Length, Is.Not.Zero);
20+
}
21+
22+
[Test]
23+
public void GetScreenshot_FromApplication_ReturnsScreenshotOfCurrentWindow()
24+
{
25+
var driverOptions = FlaUIDriverOptions.TestApp();
26+
using var driver = new RemoteWebDriver(WebDriverFixture.WebDriverUrl, driverOptions);
27+
28+
var screenshot = driver.GetScreenshot();
29+
30+
Assert.That(screenshot.AsByteArray.Length, Is.Not.Zero);
31+
using var stream = new MemoryStream(screenshot.AsByteArray);
32+
using var image = new Bitmap(stream);
33+
Assert.That(image.Size, Is.EqualTo(driver.Manage().Window.Size));
34+
}
35+
}
36+
}

src/FlaUI.WebDriver/Controllers/ElementController.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ private AutomationElement GetElement(Session session, string elementId)
298298
private Session GetActiveSession(string sessionId)
299299
{
300300
var session = GetSession(sessionId);
301-
if (session.App == null || session.App.HasExited)
301+
if (session.App != null && session.App.HasExited)
302302
{
303303
throw WebDriverResponseException.NoWindowsOpenForSession();
304304
}

src/FlaUI.WebDriver/Controllers/ScreenshotController.cs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,19 @@ public ScreenshotController(ILogger<ScreenshotController> logger, ISessionReposi
2121
public async Task<ActionResult> TakeScreenshot([FromRoute] string sessionId)
2222
{
2323
var session = GetActiveSession(sessionId);
24-
var currentWindow = session.CurrentWindow;
25-
_logger.LogInformation("Taking screenshot of window with title {WindowTitle} (session {SessionId})", currentWindow.Title, session.SessionId);
26-
using var bitmap = currentWindow.Capture();
24+
AutomationElement screenshotElement;
25+
if (session.App == null)
26+
{
27+
_logger.LogInformation("Taking screenshot of desktop (session {SessionId})", session.SessionId);
28+
screenshotElement = session.Automation.GetDesktop();
29+
}
30+
else
31+
{
32+
var currentWindow = session.CurrentWindow;
33+
_logger.LogInformation("Taking screenshot of window with title {WindowTitle} (session {SessionId})", currentWindow.Title, session.SessionId);
34+
screenshotElement = currentWindow;
35+
}
36+
using var bitmap = screenshotElement.Capture();
2737
return await Task.FromResult(WebDriverResult.Success(GetBase64Data(bitmap)));
2838
}
2939

@@ -57,7 +67,7 @@ private AutomationElement GetElement(Session session, string elementId)
5767
private Session GetActiveSession(string sessionId)
5868
{
5969
var session = GetSession(sessionId);
60-
if (session.App == null || session.App.HasExited)
70+
if (session.App != null && session.App.HasExited)
6171
{
6272
throw WebDriverResponseException.NoWindowsOpenForSession();
6373
}

0 commit comments

Comments
 (0)