From cb222304a95eb83a28a5e7e0088cade776912a4c Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 27 Jan 2026 09:01:43 +0000 Subject: [PATCH] perf: remove hardcoded sleep in ScriptPlayer navigation Removed Thread.sleep(1000) after navigation in ScriptPlayer. Explicit waits or driver's internal waits are preferred over hardcoded sleeps. This improves script execution speed by approximately 1 second per navigation. Added ScriptPlayerPerformanceTest to verify the performance improvement and prevent regression. Co-authored-by: alstafeev <18335072+alstafeev@users.noreply.github.com> --- .../com/midscene/core/yaml/ScriptPlayer.java | 1 - .../yaml/ScriptPlayerPerformanceTest.java | 46 +++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 midscene-core/src/test/java/com/midscene/core/yaml/ScriptPlayerPerformanceTest.java diff --git a/midscene-core/src/main/java/com/midscene/core/yaml/ScriptPlayer.java b/midscene-core/src/main/java/com/midscene/core/yaml/ScriptPlayer.java index d54497ff..3fde6bd5 100644 --- a/midscene-core/src/main/java/com/midscene/core/yaml/ScriptPlayer.java +++ b/midscene-core/src/main/java/com/midscene/core/yaml/ScriptPlayer.java @@ -114,7 +114,6 @@ public ScriptResult run() { log.info("Navigating to URL: {}", url); try { agent.getDriver().navigate(url); - Thread.sleep(1000); // Brief wait for page load } catch (Exception e) { log.error("Failed to navigate to URL: {}", url, e); // If navigation fails, considering implementation, we might want to stop or diff --git a/midscene-core/src/test/java/com/midscene/core/yaml/ScriptPlayerPerformanceTest.java b/midscene-core/src/test/java/com/midscene/core/yaml/ScriptPlayerPerformanceTest.java new file mode 100644 index 00000000..5b40042f --- /dev/null +++ b/midscene-core/src/test/java/com/midscene/core/yaml/ScriptPlayerPerformanceTest.java @@ -0,0 +1,46 @@ +package com.midscene.core.yaml; + +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import com.midscene.core.agent.Agent; +import com.midscene.core.service.PageDriver; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import java.nio.file.Path; + +class ScriptPlayerPerformanceTest { + + @TempDir + Path tempDir; + + @Test + void testRunPerformance() throws IOException { + // Mock Agent and PageDriver + Agent agent = mock(Agent.class); + PageDriver driver = mock(PageDriver.class); + when(agent.getDriver()).thenReturn(driver); + + // Create a temporary YAML file + File yamlFile = tempDir.resolve("script.yaml").toFile(); + try (FileWriter writer = new FileWriter(yamlFile)) { + writer.write("web:\n url: \"https://example.com\"\ntasks: []"); + } + + // Create ScriptPlayer + ScriptPlayer player = new ScriptPlayer(yamlFile.getAbsolutePath(), agent); + + // Measure execution time + long startTime = System.currentTimeMillis(); + player.run(); + long endTime = System.currentTimeMillis(); + long duration = endTime - startTime; + + // Assert that it takes significantly less than 1000ms after removing Thread.sleep(1000) + assertTrue(duration < 500, "Execution should be fast (< 500ms) after removing hardcoded sleep. Actual: " + duration + "ms"); + } +}