diff --git a/src/Microsoft.PowerApps.TestEngine/TestInfra/ITestInfraFunctions.cs b/src/Microsoft.PowerApps.TestEngine/TestInfra/ITestInfraFunctions.cs
index 8aa246559..5e5686432 100644
--- a/src/Microsoft.PowerApps.TestEngine/TestInfra/ITestInfraFunctions.cs
+++ b/src/Microsoft.PowerApps.TestEngine/TestInfra/ITestInfraFunctions.cs
@@ -70,6 +70,14 @@ public interface ITestInfraFunctions
/// Task
public Task FillAsync(string selector, string value);
+ ///
+ /// Presses a key on an element
+ ///
+ /// Selector to find element
+ /// Key to press (e.g., 'Enter', 'Tab', etc.)
+ /// Task
+ public Task PressAsync(string selector, string key);
+
///
/// Clicks an element
///
diff --git a/src/Microsoft.PowerApps.TestEngine/TestInfra/PlaywrightTestInfraFunctions.cs b/src/Microsoft.PowerApps.TestEngine/TestInfra/PlaywrightTestInfraFunctions.cs
index 32cedf7ca..ef63d9dc9 100644
--- a/src/Microsoft.PowerApps.TestEngine/TestInfra/PlaywrightTestInfraFunctions.cs
+++ b/src/Microsoft.PowerApps.TestEngine/TestInfra/PlaywrightTestInfraFunctions.cs
@@ -462,6 +462,12 @@ public async Task FillAsync(string selector, string value)
await Page.FillAsync(selector, value);
}
+ public async Task PressAsync(string selector, string value)
+ {
+ ValidatePage();
+ await Page.PressAsync(selector, value);
+ }
+
public async Task ClickAsync(string selector)
{
ValidatePage();
diff --git a/src/docs/PowerFX/TestEngine.PlaywrightAction.md b/src/docs/PowerFX/TestEngine.PlaywrightAction.md
index c977ff4c2..631c6c0a0 100644
--- a/src/docs/PowerFX/TestEngine.PlaywrightAction.md
+++ b/src/docs/PowerFX/TestEngine.PlaywrightAction.md
@@ -24,6 +24,7 @@ The following actions are supported
| exists | Returns True or False is locator exist |
| navigate | Navigate to the url |
| wait | Wait for locator items to exist |
+| press | Send a keyboard press to the locator (use via PlaywrightActionValue) |
## Examples
@@ -34,3 +35,10 @@ The following actions are supported
` Preview.PlaywrightAction("https://www.microsoft.com", "navigate")`
` Preview.PlaywrightAction("//button", "wait")`
+
+## Sending keyboard keys (Enter, Tab, etc.)
+
+Use `Preview.PlaywrightActionValue` when you need to send keyboard keys to an element. The third parameter is the key name (for example "Enter"). If empty, the default key is "Enter".
+
+` Preview.PlaywrightActionValue("//input[@id='search']", "press", "Enter")`
+
diff --git a/src/testengine.module.playwrightaction.tests/PlaywrightActionFunctionValueTests.cs b/src/testengine.module.playwrightaction.tests/PlaywrightActionFunctionValueTests.cs
index 2214f67ac..0a4b761a1 100644
--- a/src/testengine.module.playwrightaction.tests/PlaywrightActionFunctionValueTests.cs
+++ b/src/testengine.module.playwrightaction.tests/PlaywrightActionFunctionValueTests.cs
@@ -65,6 +65,17 @@ private void RunTestScenario(string id)
case "fill":
MockTestInfraFunctions.Setup(x => x.FillAsync("//foo", "xyz")).Returns(Task.CompletedTask);
break;
+ case "press-in-iframe":
+ var mockPressFrame = new Mock