Skip to content

Commit 892e5f2

Browse files
authored
Merge pull request #131 from system-verification/feature/add-clear-clipbord-method
feature/Add clear clipboard method
2 parents 63f7772 + 0dc5ec1 commit 892e5f2

File tree

5 files changed

+38
-5
lines changed

5 files changed

+38
-5
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ const result = driver.executeScript("powerShell", [{ command: `1+1` }]);
181181

182182
## Windows extensions
183183

184-
To enable easy switching from appium-windows-driver, there is a rudimentary implementation of `windows: click`, `windows: hover`, `windows: scroll`, `windows: keys`, `windows: getClipboard` and `windows: setClipboard`.
184+
To enable easy switching from appium-windows-driver, there is a rudimentary implementation of `windows: click`, `windows: hover`, `windows: scroll`, `windows: keys`, `windows: getClipboard`, `windows: setClipboard` and `windows: clearClipboard`.
185185

186186
## Supported WebDriver Commands
187187

src/FlaUI.WebDriver.UITests/ExecuteTests.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,18 @@ public void ExecuteScript_WindowsSetClipboard_IsSupported()
6464
Assert.That(element.Text, Is.EqualTo("Test TextBoxPasted!"));
6565
}
6666

67+
[Test]
68+
public void ExecuteScript_WindowsClearClipboard_IsSupported()
69+
{
70+
var driverOptions = FlaUIDriverOptions.TestApp();
71+
using var driver = new RemoteWebDriver(WebDriverFixture.WebDriverUrl, driverOptions);
72+
driver.ExecuteScript("windows: setClipboard", new Dictionary<string, object> {
73+
["b64Content"] = "Pasted!"});
74+
driver.ExecuteScript("windows: clearClipboard");
75+
var result = driver.ExecuteScript("windows: getClipboard", new Dictionary<string, object> {});
76+
Assert.That(result, Is.EqualTo(""));
77+
}
78+
6779
[Test]
6880
public void ExecuteScript_WindowsHoverXY_IsSupported()
6981
{

src/FlaUI.WebDriver/Controllers/ExecuteController.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,11 @@ public async Task<ActionResult> ExecuteScript([FromRoute] string sessionId, [Fro
4141
return await ExecuteWindowsSetClipboardScript(session, executeScriptRequest);
4242
case "windows: getClipboard":
4343
return await ExecuteWindowsGetClipboardScript(session, executeScriptRequest);
44+
case "windows: clearClipboard":
45+
return await ExecuteWindowsClearClipboardScript(session, executeScriptRequest);
4446
default:
45-
throw WebDriverResponseException.UnsupportedOperation("Only 'powerShell', 'windows: keys', 'windows: click', 'windows: hover' scripts are supported");
47+
throw WebDriverResponseException.UnsupportedOperation("Only 'powerShell', 'windows: keys', 'windows: click', 'windows: hover', 'windows: scroll', " +
48+
"'windows: setClipboard', 'windows: getClipboard', 'windows: clearClipboard' scripts are supported");
4649
}
4750
}
4851

@@ -124,6 +127,17 @@ private async Task<ActionResult> ExecuteWindowsGetClipboardScript(Session sessio
124127
return WebDriverResult.Success(result);
125128
}
126129

130+
private async Task<ActionResult> ExecuteWindowsClearClipboardScript(Session session, ExecuteScriptRequest executeScriptRequest)
131+
{
132+
if (executeScriptRequest.Args.Count != 0)
133+
{
134+
throw WebDriverResponseException.InvalidArgument($"No arguments expected for the windows: getClipboard script, but got {executeScriptRequest.Args.Count} arguments");
135+
}
136+
137+
await _windowsExtensionService.ExecuteClearClipboardScript(session);
138+
return WebDriverResult.Success();
139+
}
140+
127141
private async Task<ActionResult> ExecuteWindowsClickScript(Session session, ExecuteScriptRequest executeScriptRequest)
128142
{
129143
if (executeScriptRequest.Args.Count != 1)

src/FlaUI.WebDriver/Services/IWindowsExtensionService.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,6 @@ public interface IWindowsExtensionService
1010
Task ExecuteKeyScript(Session session, WindowsKeyScript action);
1111
Task<string> ExecuteGetClipboardScript(Session session, WindowsGetClipboardScript action);
1212
Task ExecuteSetClipboardScript(Session session, WindowsSetClipboardScript action);
13+
Task ExecuteClearClipboardScript(Session session);
1314
}
1415
}

src/FlaUI.WebDriver/Services/WindowsExtensionService.cs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public WindowsExtensionService(ILogger<WindowsExtensionService> logger)
1717

1818
public Task<string> ExecuteGetClipboardScript(Session session, WindowsGetClipboardScript action)
1919
{
20-
switch(action.ContentType)
20+
switch (action.ContentType)
2121
{
2222
default:
2323
case "plaintext":
@@ -59,6 +59,12 @@ public Task ExecuteSetClipboardScript(Session session, WindowsSetClipboardScript
5959
return Task.CompletedTask;
6060
}
6161

62+
public Task ExecuteClearClipboardScript(Session session)
63+
{
64+
ExecuteOnClipboardThread(() => System.Windows.Forms.Clipboard.Clear());
65+
return Task.CompletedTask;
66+
}
67+
6268
private void ExecuteOnClipboardThread(System.Action action)
6369
{
6470
// See https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.clipboard?view=windowsdesktop-8.0#remarks
@@ -138,15 +144,15 @@ private Point GetPoint(string? elementId, int? x, int? y, Session session)
138144
Y = element.BoundingRectangle.Top + y.Value
139145
};
140146
}
141-
147+
142148
return element.BoundingRectangle.Center();
143149
}
144150

145151
if (x.HasValue && y.HasValue)
146152
{
147153
return new Point { X = x.Value, Y = y.Value };
148154
}
149-
155+
150156
throw WebDriverResponseException.InvalidArgument("Either element ID or x and y must be provided");
151157
}
152158

0 commit comments

Comments
 (0)