Skip to content

Commit ca1543c

Browse files
authored
adding new headless mode for chromium (#614)
* adding new headless mode for chromium * chromium mock for other tests
1 parent 928d1b7 commit ca1543c

2 files changed

Lines changed: 65 additions & 0 deletions

File tree

src/Microsoft.PowerApps.TestEngine.Tests/TestInfra/PlaywrightTestInfraFunctionTests.cs

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
using System;
55
using System.Collections.Generic;
6+
using System.Linq;
67
using System.Threading.Tasks;
78
using Microsoft.Extensions.Logging;
89
using Microsoft.Playwright;
@@ -56,6 +57,10 @@ public PlaywrightTestInfraFunctionTests()
5657
MockElementHandle = new Mock<IElementHandle>(MockBehavior.Strict);
5758
MockUserManager = new Mock<IUserManager>(MockBehavior.Strict);
5859
MockTestWebProvider = new Mock<ITestWebProvider>(MockBehavior.Strict);
60+
61+
// Mock Chromium behavior
62+
MockPlaywrightObject.SetupGet(x => x.Chromium).Returns(new Mock<IBrowserType>(MockBehavior.Strict).Object);
63+
MockPlaywrightObject.SetupGet(x => x.Chromium.Name).Returns("chromium");
5964
}
6065

6166
[Theory]
@@ -154,6 +159,58 @@ public async Task SetupAsyncTest(string browser, string? device, int? screenWidt
154159
MockBrowser.Verify(x => x.NewContextAsync(It.Is<BrowserNewContextOptions>(y => verifyBrowserContextOptions(y))), Times.Once());
155160
}
156161

162+
[Theory]
163+
[InlineData("chromium", null, true, true)]
164+
[InlineData("Chromium", "msedge", true, true)]
165+
[InlineData("Chromium", "chrome", true, true)]
166+
[InlineData("Chromium", "msedge", false, false)]
167+
[InlineData("cHromium", null, false, false)]
168+
[InlineData("webkit", null, true, false)]
169+
[InlineData("firefox", null, false, false)]
170+
public async Task SetupAsync_HeadlessModeWithChromium_AddsNewHeadlessArgs(string browser, string? channel, bool headless, bool expectedResult)
171+
{
172+
// Arrange
173+
MockTestState.Setup(x => x.GetTestEngineModules()).Returns(new List<Microsoft.PowerApps.TestEngine.Modules.ITestEngineModule>() { });
174+
175+
var testSettings = new TestSettings
176+
{
177+
Headless = headless,
178+
Timeout = 30000
179+
};
180+
181+
var browserConfig = new BrowserConfiguration
182+
{
183+
Browser = browser,
184+
Channel = channel,
185+
};
186+
187+
MockTestState.Setup(ts => ts.GetTestSettings()).Returns(testSettings);
188+
MockSingleTestInstanceState.Setup(st => st.GetBrowserConfig()).Returns(browserConfig);
189+
MockSingleTestInstanceState.Setup(st => st.GetLogger()).Returns(MockLogger.Object);
190+
LoggingTestHelper.SetupMock(MockLogger);
191+
192+
MockBrowserType.Setup(c => c.Name).Returns(browser);
193+
MockBrowserType.Setup(c => c.LaunchAsync(It.IsAny<BrowserTypeLaunchOptions>()))
194+
.ReturnsAsync(Mock.Of<IBrowser>());
195+
MockPlaywrightObject.Setup(p => p[browser]).Returns(MockBrowserType.Object);
196+
197+
var functions = new PlaywrightTestInfraFunctions(
198+
MockTestState.Object,
199+
MockSingleTestInstanceState.Object,
200+
MockFileSystem.Object,
201+
MockPlaywrightObject.Object
202+
);
203+
204+
// Act
205+
await functions.SetupAsync(Mock.Of<IUserManager>());
206+
207+
// Assert
208+
MockBrowserType.Verify(c => c.LaunchAsync(It.Is<BrowserTypeLaunchOptions>(options =>
209+
options.Args != null &&
210+
options.Args.Contains("--headless=new")
211+
)), expectedResult ? Times.Once : Times.Never);
212+
}
213+
157214
[Theory]
158215
[InlineData("en-US")]
159216
[InlineData("fr-FR")]

src/Microsoft.PowerApps.TestEngine/TestInfra/PlaywrightTestInfraFunctions.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,14 @@ public async Task SetupAsync(IUserManager userManager)
107107
staticContext.Headless = launchOptions.Headless;
108108
staticContext.Timeout = launchOptions.Timeout;
109109

110+
//this is added for the new headless mode in chromium
111+
if (testSettings.Headless && PlaywrightObject?.Chromium?.Name != null && string.Equals(browserConfig.Browser, PlaywrightObject.Chromium.Name, StringComparison.OrdinalIgnoreCase))
112+
{
113+
var headlessArgs = new[] { "--headless=new" };
114+
launchOptions.Args = (launchOptions.Args ?? Array.Empty<string>()).Concat(headlessArgs).ToArray();
115+
staticContext.Args = (staticContext.Args ?? Array.Empty<string>()).Concat(headlessArgs).ToArray();
116+
}
117+
110118
var browser = PlaywrightObject[browserConfig.Browser];
111119
if (browser == null)
112120
{

0 commit comments

Comments
 (0)