From 13fedccbc0f79a16d6ff0178fd058741e6a6e2b3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Apr 2026 08:28:10 +0000 Subject: [PATCH 1/5] Bump io.github.bonigarcia:webdrivermanager from 6.3.3 to 6.3.4 Bumps [io.github.bonigarcia:webdrivermanager](https://github.com/bonigarcia/webdrivermanager) from 6.3.3 to 6.3.4. - [Release notes](https://github.com/bonigarcia/webdrivermanager/releases) - [Changelog](https://github.com/bonigarcia/webdrivermanager/blob/master/CHANGELOG.md) - [Commits](https://github.com/bonigarcia/webdrivermanager/compare/webdrivermanager-6.3.3...webdrivermanager-6.3.4) --- updated-dependencies: - dependency-name: io.github.bonigarcia:webdrivermanager dependency-version: 6.3.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 07914cfd5..6d047ffc5 100644 --- a/build.gradle +++ b/build.gradle @@ -35,7 +35,7 @@ subprojects { // https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java implementation group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '4.41.0' // https://mvnrepository.com/artifact/io.github.bonigarcia/webdrivermanager - implementation group: 'io.github.bonigarcia', name: 'webdrivermanager', version: '6.3.3' + implementation group: 'io.github.bonigarcia', name: 'webdrivermanager', version: '6.3.4' // https://mvnrepository.com/artifact/io.appium/java-client implementation group: 'io.appium', name: 'java-client', version: '10.1.0' // https://mvnrepository.com/artifact/com.orientechnologies/orientdb-graphdb From 2585c1d75b39a6d6cf37bd4e2ec7e754d01e8756 Mon Sep 17 00:00:00 2001 From: ferpasri Date: Mon, 6 Apr 2026 16:52:21 +0200 Subject: [PATCH 2/5] Add WdDriver configurable user data and profile --- .../org/testar/monkey/alayer/webdriver/WdDriver.java | 6 ++++-- .../org/testar/webdriver/manager/WdChromeManager.java | 10 ++++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/webdriver/src/org/testar/monkey/alayer/webdriver/WdDriver.java b/webdriver/src/org/testar/monkey/alayer/webdriver/WdDriver.java index 4d17f8aac..d6eb84a2b 100644 --- a/webdriver/src/org/testar/monkey/alayer/webdriver/WdDriver.java +++ b/webdriver/src/org/testar/monkey/alayer/webdriver/WdDriver.java @@ -1,6 +1,6 @@ /** - * Copyright (c) 2018 - 2025 Open Universiteit - www.ou.nl - * Copyright (c) 2019 - 2025 Universitat Politecnica de Valencia - www.upv.es + * Copyright (c) 2018 - 2026 Open Universiteit - www.ou.nl + * Copyright (c) 2019 - 2026 Universitat Politecnica de Valencia - www.upv.es * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -74,6 +74,8 @@ public class WdDriver extends SUTBase { public static boolean disableSecurity = false; public static boolean remoteDebugging = false; public static boolean disableGPU = true; + public static String userDataDir = ""; + public static String profileDirectory = ""; private final Keyboard kbd = AWTKeyboard.build(); private final Mouse mouse = WdMouse.build(); diff --git a/webdriver/src/org/testar/webdriver/manager/WdChromeManager.java b/webdriver/src/org/testar/webdriver/manager/WdChromeManager.java index aa03d0fb1..fbdab16ca 100644 --- a/webdriver/src/org/testar/webdriver/manager/WdChromeManager.java +++ b/webdriver/src/org/testar/webdriver/manager/WdChromeManager.java @@ -1,6 +1,6 @@ /** - * Copyright (c) 2025 Universitat Politecnica de Valencia - www.upv.es - * Copyright (c) 2025 Open Universiteit - www.ou.nl + * Copyright (c) 2025 - 2026 Universitat Politecnica de Valencia - www.upv.es + * Copyright (c) 2025 - 2026 Open Universiteit - www.ou.nl * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -103,6 +103,12 @@ public RemoteWebDriver createWebDriver(String chromeForTestingPath, String exten if(WdDriver.disableGPU) { options.addArguments("--disable-gpu"); } + if(WdDriver.userDataDir != null && !WdDriver.userDataDir.isEmpty()) { + options.addArguments("--user-data-dir=" + WdDriver.userDataDir); + } + if(WdDriver.profileDirectory != null && !WdDriver.profileDirectory.isEmpty()) { + options.addArguments("--profile-directory=" + WdDriver.profileDirectory); + } Map prefs = new HashMap<>(); prefs.put("profile.default_content_setting_values.notifications", 1); From 4a3ec2cf4d497c7210d59ba80cfc6393c2a6417d Mon Sep 17 00:00:00 2001 From: ferpasri Date: Thu, 2 Apr 2026 12:47:54 +0200 Subject: [PATCH 3/5] Fix parse llm selected ESC action --- .../llm/LlmParseActionResponse.java | 3 ++- .../llm/TestLlmParseActionResponse.java | 22 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/testar/src/org/testar/action/priorization/llm/LlmParseActionResponse.java b/testar/src/org/testar/action/priorization/llm/LlmParseActionResponse.java index 1b0b6e37c..e82f67c24 100644 --- a/testar/src/org/testar/action/priorization/llm/LlmParseActionResponse.java +++ b/testar/src/org/testar/action/priorization/llm/LlmParseActionResponse.java @@ -36,6 +36,7 @@ import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.testar.monkey.Util; import org.testar.monkey.alayer.Action; import org.testar.monkey.alayer.Color; import org.testar.monkey.alayer.FillPattern; @@ -189,7 +190,7 @@ private boolean updateTextAction(Action action, Action innerAction, String input String widgetDesc = action.get(Tags.OriginWidget).get(Tags.Desc, ""); action.set(Tags.Desc, innerAction.getClass().getSimpleName() + " '" + inputText + "' into '" + widgetDesc + "'"); - if(action.get(Tags.Visualizer) instanceof TextVisualizer) { + if(action.get(Tags.Visualizer, Util.NullVisualizer) instanceof TextVisualizer) { TextVisualizer textVisualizer = (TextVisualizer) action.get(Tags.Visualizer); Pen newPen = Pen.newPen().setColor(Color.Red).setFillPattern(FillPattern.Solid).setStrokeWidth(50).build(); action.set(Tags.Visualizer, textVisualizer.withText(inputText, newPen)); diff --git a/testar/test/org/testar/action/priorization/llm/TestLlmParseActionResponse.java b/testar/test/org/testar/action/priorization/llm/TestLlmParseActionResponse.java index 0f4fbc591..8de5e79fb 100644 --- a/testar/test/org/testar/action/priorization/llm/TestLlmParseActionResponse.java +++ b/testar/test/org/testar/action/priorization/llm/TestLlmParseActionResponse.java @@ -1,5 +1,7 @@ package org.testar.action.priorization.llm; +import static org.junit.Assert.assertEquals; + import java.util.HashSet; import java.util.Set; @@ -222,6 +224,18 @@ public void test_llm_selects_android_type_action() { Assert.isTrue(innerText.equals("testar")); } + @Test + public void test_parsing_hit_escape_action() { + String llmResponse = "```json{\"actionId\":\"AID_HitEsc\",\"input\":\"\"}```"; + Set derivedActions = createDefaultDerivedActions(createState()); + + LlmParseActionResponse llmParseResponse = new LlmParseActionResponse(); + LlmParseActionResult llmParseResult = llmParseResponse.parseLlmResponse(derivedActions, llmResponse); + + assertEquals(LlmParseActionResult.ParseResult.SUCCESS, llmParseResult.getParseResult()); + assertEquals("AID_HitEsc", llmParseResult.getActionToExecute().get(Tags.AbstractID)); + } + private static StateStub createState() { StateStub createdState = new StateStub(); createdState.set(WdTags.WebTitle, "Page Title | State"); @@ -241,6 +255,7 @@ private static Set createDefaultDerivedActions(StateStub state) { derivedActions.add(createSelectAction(state, "combobox_widget_desc", "combobox_widget_web_id", "CID_combobox_widget", "AID_combobox_widget", "CID_select", "AID_select", "Saab")); derivedActions.add(createAndroidTypeAction(state)); + derivedActions.add(createHitEscAction(state, "CID_HitEsc", "AID_HitEsc")); return derivedActions; } @@ -321,4 +336,11 @@ private static Action createAndroidTypeAction(StateStub parentState) { return action; } + private static Action createHitEscAction(StateStub parentState, String actionConcreteId, String actionAbstractId) { + Action action = ac.hitESC(parentState); + action.set(Tags.ConcreteID, actionConcreteId); + action.set(Tags.AbstractID, actionAbstractId); + return action; + } + } From 4a2e27222cab6e8c339e7783da4e00bb424f321b Mon Sep 17 00:00:00 2001 From: ferpasri Date: Mon, 6 Apr 2026 17:07:03 +0200 Subject: [PATCH 4/5] Extend parse llm response tests --- .../llm/TestLlmParseActionResponse.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/testar/test/org/testar/action/priorization/llm/TestLlmParseActionResponse.java b/testar/test/org/testar/action/priorization/llm/TestLlmParseActionResponse.java index 8de5e79fb..84c43b611 100644 --- a/testar/test/org/testar/action/priorization/llm/TestLlmParseActionResponse.java +++ b/testar/test/org/testar/action/priorization/llm/TestLlmParseActionResponse.java @@ -14,6 +14,8 @@ import org.testar.monkey.alayer.actions.CompoundAction; import org.testar.monkey.alayer.actions.StdActionCompiler; import org.testar.monkey.alayer.actions.Type; +import org.testar.monkey.alayer.actions.WdCloseTabAction; +import org.testar.monkey.alayer.actions.WdHistoryBackAction; import org.testar.monkey.alayer.actions.WdRemoteScrollTypeAction; import org.testar.monkey.alayer.actions.WdRemoteTypeAction; import org.testar.monkey.alayer.actions.WdSelectListAction; @@ -236,6 +238,30 @@ public void test_parsing_hit_escape_action() { assertEquals("AID_HitEsc", llmParseResult.getActionToExecute().get(Tags.AbstractID)); } + @Test + public void test_parsing_wd_navigate_back_action() { + String llmResponse = "```json{\"actionId\":\"AID_NavBack\",\"input\":\"\"}```"; + Set derivedActions = createDefaultDerivedActions(createState()); + + LlmParseActionResponse llmParseResponse = new LlmParseActionResponse(); + LlmParseActionResult llmParseResult = llmParseResponse.parseLlmResponse(derivedActions, llmResponse); + + assertEquals(LlmParseActionResult.ParseResult.SUCCESS, llmParseResult.getParseResult()); + assertEquals("AID_NavBack", llmParseResult.getActionToExecute().get(Tags.AbstractID)); + } + + @Test + public void test_parsing_wd_close_tab_action() { + String llmResponse = "```json{\"actionId\":\"AID_CloseTab\",\"input\":\"\"}```"; + Set derivedActions = createDefaultDerivedActions(createState()); + + LlmParseActionResponse llmParseResponse = new LlmParseActionResponse(); + LlmParseActionResult llmParseResult = llmParseResponse.parseLlmResponse(derivedActions, llmResponse); + + assertEquals(LlmParseActionResult.ParseResult.SUCCESS, llmParseResult.getParseResult()); + assertEquals("AID_CloseTab", llmParseResult.getActionToExecute().get(Tags.AbstractID)); + } + private static StateStub createState() { StateStub createdState = new StateStub(); createdState.set(WdTags.WebTitle, "Page Title | State"); @@ -256,6 +282,8 @@ private static Set createDefaultDerivedActions(StateStub state) { "CID_combobox_widget", "AID_combobox_widget", "CID_select", "AID_select", "Saab")); derivedActions.add(createAndroidTypeAction(state)); derivedActions.add(createHitEscAction(state, "CID_HitEsc", "AID_HitEsc")); + derivedActions.add(createWdHistoryBackAction(state, "CID_NavBack", "AID_NavBack")); + derivedActions.add(createWdCloseTabAction(state, "CID_CloseTab", "AID_CloseTab")); return derivedActions; } @@ -343,4 +371,18 @@ private static Action createHitEscAction(StateStub parentState, String actionCon return action; } + private static Action createWdHistoryBackAction(StateStub parentState, String actionConcreteId, String actionAbstractId) { + Action action = new WdHistoryBackAction(parentState); + action.set(Tags.ConcreteID, actionConcreteId); + action.set(Tags.AbstractID, actionAbstractId); + return action; + } + + private static Action createWdCloseTabAction(StateStub parentState, String actionConcreteId, String actionAbstractId) { + Action action = new WdCloseTabAction(parentState); + action.set(Tags.ConcreteID, actionConcreteId); + action.set(Tags.AbstractID, actionAbstractId); + return action; + } + } From 2061f168b120e732a55592143843cf83ba79f945 Mon Sep 17 00:00:00 2001 From: ferpasri Date: Mon, 6 Apr 2026 17:10:30 +0200 Subject: [PATCH 5/5] Update TESTAR v2.8.7 --- CHANGELOG | 6 ++++++ VERSION | 2 +- testar/src/org/testar/monkey/Main.java | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 9c9e5b39b..62310f8b4 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,9 @@ +#TESTAR v2.8.7 (6-Apr-2026) +- Bump io.github.bonigarcia:webdrivermanager from 6.3.3 to 6.3.4 +- Fix parse llm selected ESC action +- Add WdDriver configurable user data and profile + + #TESTAR v2.8.6 (24-Mar-2026) - Remove linux AtSpi subproject - Remove unused Tags diff --git a/VERSION b/VERSION index adaf203ac..d45e55c21 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.8.6 \ No newline at end of file +2.8.7 \ No newline at end of file diff --git a/testar/src/org/testar/monkey/Main.java b/testar/src/org/testar/monkey/Main.java index 7a9438729..e7b05bd2b 100644 --- a/testar/src/org/testar/monkey/Main.java +++ b/testar/src/org/testar/monkey/Main.java @@ -65,7 +65,7 @@ public class Main { - public static final String TESTAR_VERSION = "v2.8.6 (24-Mar-2026)"; + public static final String TESTAR_VERSION = "v2.8.7 (6-Apr-2026)"; //public static final String TESTAR_DIR_PROPERTY = "DIRNAME"; //Use the OS environment to obtain TESTAR directory public static final String SETTINGS_FILE = "test.settings";