From 5d62c4f6daaa4226126339b2d7674979d6119d98 Mon Sep 17 00:00:00 2001 From: Tatu Lund Date: Fri, 23 Jan 2026 10:50:25 +0200 Subject: [PATCH 01/19] Add ButtonView with click and focus event handling --- .../java/com/vaadin/testUI/ButtonView.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 vaadin-testbench-integration-tests/src/main/java/com/vaadin/testUI/ButtonView.java diff --git a/vaadin-testbench-integration-tests/src/main/java/com/vaadin/testUI/ButtonView.java b/vaadin-testbench-integration-tests/src/main/java/com/vaadin/testUI/ButtonView.java new file mode 100644 index 000000000..bf3059abf --- /dev/null +++ b/vaadin-testbench-integration-tests/src/main/java/com/vaadin/testUI/ButtonView.java @@ -0,0 +1,40 @@ +/** + * Copyright (C) 2000-2026 Vaadin Ltd + * + * This program is available under Vaadin Commercial License and Service Terms. + * + * See for the full + * license. + */ +package com.vaadin.testUI; + +import com.vaadin.flow.component.html.NativeButton; +import com.vaadin.flow.component.html.Span; +import com.vaadin.flow.component.orderedlayout.VerticalLayout; +import com.vaadin.flow.router.Route; + +@Route("button-view") +public class ButtonView extends VerticalLayout { + + public ButtonView() { + NativeButton button = new NativeButton("Click me"); + button.setId("test-button"); + button.addSingleClickListener(event -> { + Span newSpan = new Span("Button single clicked: " + event.getClickCount()); + newSpan.setId("single-click"); + add(newSpan); + }); + button.addDoubleClickListener(event -> { + Span newSpan = new Span("Button double clicked: " + event.getClickCount()); + newSpan.setId("double-click"); + add(newSpan); + }); + button.addFocusListener(event -> { + Span newSpan = new Span("Button focused"); + newSpan.setId("focus-event"); + add(newSpan); + }); + add(button); + } + +} From cf3118c005ff1a0f26547fa741a524fc877494bf Mon Sep 17 00:00:00 2001 From: Tatu Lund Date: Fri, 23 Jan 2026 10:54:02 +0200 Subject: [PATCH 02/19] Add ButtonIT integration tests for single and double clicks Implement integration tests for button click actions. --- .../com/vaadin/tests/elements/ButtonIT.java | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 vaadin-testbench-integration-tests/src/test/java/com/vaadin/tests/elements/ButtonIT.java diff --git a/vaadin-testbench-integration-tests/src/test/java/com/vaadin/tests/elements/ButtonIT.java b/vaadin-testbench-integration-tests/src/test/java/com/vaadin/tests/elements/ButtonIT.java new file mode 100644 index 000000000..87d5b8a2c --- /dev/null +++ b/vaadin-testbench-integration-tests/src/test/java/com/vaadin/tests/elements/ButtonIT.java @@ -0,0 +1,47 @@ +/** + * Copyright (C) 2000-2026 Vaadin Ltd + * + * This program is available under Vaadin Commercial License and Service Terms. + * + * See for the full + * license. + */ +package com.vaadin.tests.elements; + +import org.junit.Test; + +import com.vaadin.flow.component.html.testbench.NativeButtonElement; +import com.vaadin.flow.component.html.testbench.SpanElement; +import com.vaadin.tests.AbstractTB6Test; + +public class ButtonIT extends AbstractTB6Test { + + @Override + protected Class getTestView() { + return ButtonView.class; + } + + @Before + public void openAndFindElement() { + openTestURL(); + } + + @Test + public void buttonClick_singleClick() { + $(NativeButtonElement.class).id("test-button").click(); + assertEquals("Button single clicked: 1", + $(SpanElement.class).id("single-click").getText()); + assertEquals("Button focused", + $(SpanElement.class).id("focus-event").getText()); + } + + @Test + public void buttonClick_doubleClick() { + $(NativeButtonElement.class).id("test-button").doubleClick(); + assertEquals("Button double clicked: 2", + $(SpanElement.class).id("double-click").getText()); + assertEquals("Button focused", + $(SpanElement.class).id("focus-event").getText()); + } + +} From 673d510d658ce14920b888bf1b7faaddc5fa1f6d Mon Sep 17 00:00:00 2001 From: Tatu Lund Date: Fri, 23 Jan 2026 11:02:53 +0200 Subject: [PATCH 03/19] Update click handling to use MouseEvent dispatch Replaced callFunction with executeScript to create a MouseEvent for clicking to ensure correct click count. --- .../java/com/vaadin/testbench/TestBenchElement.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/vaadin-testbench-shared/src/main/java/com/vaadin/testbench/TestBenchElement.java b/vaadin-testbench-shared/src/main/java/com/vaadin/testbench/TestBenchElement.java index 1d528dce1..de67b2d6e 100644 --- a/vaadin-testbench-shared/src/main/java/com/vaadin/testbench/TestBenchElement.java +++ b/vaadin-testbench-shared/src/main/java/com/vaadin/testbench/TestBenchElement.java @@ -195,7 +195,16 @@ public void click() { focus(); try { // Avoid strange "element not clickable at point" problems - callFunction("click"); + executeScript(""" + const clickEvent = new MouseEvent('click', { + view: window, + bubbles: true, + cancelable: true, + button: 0, + detail: 1 + }); + arguments[0].dispatchEvent(clickEvent); + """, this); } catch (Exception e) { if (e.getMessage() .contains("Inspected target navigated or closed")) { From e1a00b56b04b1c480240807e638fecf0f42a53ef Mon Sep 17 00:00:00 2001 From: Tatu Lund Date: Fri, 23 Jan 2026 11:12:58 +0200 Subject: [PATCH 04/19] Format --- .../com/vaadin/testbench/TestBenchElement.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/vaadin-testbench-shared/src/main/java/com/vaadin/testbench/TestBenchElement.java b/vaadin-testbench-shared/src/main/java/com/vaadin/testbench/TestBenchElement.java index de67b2d6e..e81ee6936 100644 --- a/vaadin-testbench-shared/src/main/java/com/vaadin/testbench/TestBenchElement.java +++ b/vaadin-testbench-shared/src/main/java/com/vaadin/testbench/TestBenchElement.java @@ -196,15 +196,15 @@ public void click() { try { // Avoid strange "element not clickable at point" problems executeScript(""" - const clickEvent = new MouseEvent('click', { - view: window, - bubbles: true, - cancelable: true, - button: 0, - detail: 1 - }); - arguments[0].dispatchEvent(clickEvent); - """, this); + const clickEvent = new MouseEvent('click', { + view: window, + bubbles: true, + cancelable: true, + button: 0, + detail: 1 + }); + arguments[0].dispatchEvent(clickEvent); + """, this); } catch (Exception e) { if (e.getMessage() .contains("Inspected target navigated or closed")) { From 695e9bd4abf2aa1276f6d66e26b9e750510b52b1 Mon Sep 17 00:00:00 2001 From: Tatu Lund Date: Fri, 23 Jan 2026 11:18:08 +0200 Subject: [PATCH 05/19] Format --- .../src/main/java/com/vaadin/testUI/ButtonView.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/vaadin-testbench-integration-tests/src/main/java/com/vaadin/testUI/ButtonView.java b/vaadin-testbench-integration-tests/src/main/java/com/vaadin/testUI/ButtonView.java index bf3059abf..ea16017aa 100644 --- a/vaadin-testbench-integration-tests/src/main/java/com/vaadin/testUI/ButtonView.java +++ b/vaadin-testbench-integration-tests/src/main/java/com/vaadin/testUI/ButtonView.java @@ -20,12 +20,14 @@ public ButtonView() { NativeButton button = new NativeButton("Click me"); button.setId("test-button"); button.addSingleClickListener(event -> { - Span newSpan = new Span("Button single clicked: " + event.getClickCount()); + Span newSpan = new Span( + "Button single clicked: " + event.getClickCount()); newSpan.setId("single-click"); add(newSpan); }); button.addDoubleClickListener(event -> { - Span newSpan = new Span("Button double clicked: " + event.getClickCount()); + Span newSpan = new Span( + "Button double clicked: " + event.getClickCount()); newSpan.setId("double-click"); add(newSpan); }); From f5d942526715e0f17f3ba2e99b0bb0fb5af06365 Mon Sep 17 00:00:00 2001 From: Tatu Lund Date: Fri, 23 Jan 2026 11:18:32 +0200 Subject: [PATCH 06/19] Format --- .../src/test/java/com/vaadin/tests/elements/ButtonIT.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vaadin-testbench-integration-tests/src/test/java/com/vaadin/tests/elements/ButtonIT.java b/vaadin-testbench-integration-tests/src/test/java/com/vaadin/tests/elements/ButtonIT.java index 87d5b8a2c..1cb67602d 100644 --- a/vaadin-testbench-integration-tests/src/test/java/com/vaadin/tests/elements/ButtonIT.java +++ b/vaadin-testbench-integration-tests/src/test/java/com/vaadin/tests/elements/ButtonIT.java @@ -14,7 +14,7 @@ import com.vaadin.flow.component.html.testbench.SpanElement; import com.vaadin.tests.AbstractTB6Test; -public class ButtonIT extends AbstractTB6Test { +public class ButtonIT extends AbstractTB6Test { @Override protected Class getTestView() { From 5172c5f12e89b627e82dd19be2cb555cbf1444fb Mon Sep 17 00:00:00 2001 From: Tatu Lund Date: Fri, 23 Jan 2026 11:24:42 +0200 Subject: [PATCH 07/19] Refactor ButtonView to extend Div Changed ButtonView class to extend Div instead of VerticalLayout. --- .../src/main/java/com/vaadin/testUI/ButtonView.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vaadin-testbench-integration-tests/src/main/java/com/vaadin/testUI/ButtonView.java b/vaadin-testbench-integration-tests/src/main/java/com/vaadin/testUI/ButtonView.java index ea16017aa..19de81e17 100644 --- a/vaadin-testbench-integration-tests/src/main/java/com/vaadin/testUI/ButtonView.java +++ b/vaadin-testbench-integration-tests/src/main/java/com/vaadin/testUI/ButtonView.java @@ -8,13 +8,13 @@ */ package com.vaadin.testUI; +import com.vaadin.flow.component.html.Div; import com.vaadin.flow.component.html.NativeButton; import com.vaadin.flow.component.html.Span; -import com.vaadin.flow.component.orderedlayout.VerticalLayout; import com.vaadin.flow.router.Route; @Route("button-view") -public class ButtonView extends VerticalLayout { +public class ButtonView extends Div { public ButtonView() { NativeButton button = new NativeButton("Click me"); From 10ea0b9adea57f7cc1cac74115cde2119fa6bbfd Mon Sep 17 00:00:00 2001 From: Tatu Lund Date: Fri, 23 Jan 2026 11:25:20 +0200 Subject: [PATCH 08/19] Rename route from 'button-view' to 'ButtonView' --- .../src/main/java/com/vaadin/testUI/ButtonView.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vaadin-testbench-integration-tests/src/main/java/com/vaadin/testUI/ButtonView.java b/vaadin-testbench-integration-tests/src/main/java/com/vaadin/testUI/ButtonView.java index 19de81e17..e13f81a25 100644 --- a/vaadin-testbench-integration-tests/src/main/java/com/vaadin/testUI/ButtonView.java +++ b/vaadin-testbench-integration-tests/src/main/java/com/vaadin/testUI/ButtonView.java @@ -13,7 +13,7 @@ import com.vaadin.flow.component.html.Span; import com.vaadin.flow.router.Route; -@Route("button-view") +@Route("ButtonView") public class ButtonView extends Div { public ButtonView() { From 16604936a22a88f7f90cafac34b2fa300d759ad8 Mon Sep 17 00:00:00 2001 From: Tatu Lund Date: Fri, 23 Jan 2026 11:26:17 +0200 Subject: [PATCH 09/19] Add import for ButtonView in ButtonIT test --- .../src/test/java/com/vaadin/tests/elements/ButtonIT.java | 1 + 1 file changed, 1 insertion(+) diff --git a/vaadin-testbench-integration-tests/src/test/java/com/vaadin/tests/elements/ButtonIT.java b/vaadin-testbench-integration-tests/src/test/java/com/vaadin/tests/elements/ButtonIT.java index 1cb67602d..58b79243f 100644 --- a/vaadin-testbench-integration-tests/src/test/java/com/vaadin/tests/elements/ButtonIT.java +++ b/vaadin-testbench-integration-tests/src/test/java/com/vaadin/tests/elements/ButtonIT.java @@ -12,6 +12,7 @@ import com.vaadin.flow.component.html.testbench.NativeButtonElement; import com.vaadin.flow.component.html.testbench.SpanElement; +import com.vaadin.testUI.ButtonView; import com.vaadin.tests.AbstractTB6Test; public class ButtonIT extends AbstractTB6Test { From 84ddbfb6197484b51fdf223e9dd32fd09121a8d3 Mon Sep 17 00:00:00 2001 From: Tatu Lund Date: Fri, 23 Jan 2026 12:00:13 +0200 Subject: [PATCH 10/19] Refactor button tests to use findElement method Replaced usage of NativeButtonElement and SpanElement with findElement for better element retrieval. --- .../test/java/com/vaadin/tests/elements/ButtonIT.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/vaadin-testbench-integration-tests/src/test/java/com/vaadin/tests/elements/ButtonIT.java b/vaadin-testbench-integration-tests/src/test/java/com/vaadin/tests/elements/ButtonIT.java index 58b79243f..e7babc4f5 100644 --- a/vaadin-testbench-integration-tests/src/test/java/com/vaadin/tests/elements/ButtonIT.java +++ b/vaadin-testbench-integration-tests/src/test/java/com/vaadin/tests/elements/ButtonIT.java @@ -10,8 +10,6 @@ import org.junit.Test; -import com.vaadin.flow.component.html.testbench.NativeButtonElement; -import com.vaadin.flow.component.html.testbench.SpanElement; import com.vaadin.testUI.ButtonView; import com.vaadin.tests.AbstractTB6Test; @@ -31,18 +29,18 @@ public void openAndFindElement() { public void buttonClick_singleClick() { $(NativeButtonElement.class).id("test-button").click(); assertEquals("Button single clicked: 1", - $(SpanElement.class).id("single-click").getText()); + findElement(By.id("single-click")).getText()); assertEquals("Button focused", - $(SpanElement.class).id("focus-event").getText()); + findElement(By.id("focus-event")).getText()); } @Test public void buttonClick_doubleClick() { $(NativeButtonElement.class).id("test-button").doubleClick(); assertEquals("Button double clicked: 2", - $(SpanElement.class).id("double-click").getText()); + findElement(By.id("double-click")).getText()); assertEquals("Button focused", - $(SpanElement.class).id("focus-event").getText()); + findElement(By.id("focus-event")).getText()); } } From c2fd10135751a75d92a91a156a554e7e371cbf54 Mon Sep 17 00:00:00 2001 From: Tatu Lund Date: Fri, 23 Jan 2026 12:06:55 +0200 Subject: [PATCH 11/19] Add Selenium By import to ButtonIT test class --- .../src/test/java/com/vaadin/tests/elements/ButtonIT.java | 1 + 1 file changed, 1 insertion(+) diff --git a/vaadin-testbench-integration-tests/src/test/java/com/vaadin/tests/elements/ButtonIT.java b/vaadin-testbench-integration-tests/src/test/java/com/vaadin/tests/elements/ButtonIT.java index e7babc4f5..4eb5404d1 100644 --- a/vaadin-testbench-integration-tests/src/test/java/com/vaadin/tests/elements/ButtonIT.java +++ b/vaadin-testbench-integration-tests/src/test/java/com/vaadin/tests/elements/ButtonIT.java @@ -9,6 +9,7 @@ package com.vaadin.tests.elements; import org.junit.Test; +import org.openqa.selenium.By; import com.vaadin.testUI.ButtonView; import com.vaadin.tests.AbstractTB6Test; From b7947b1744f694e34e24d5fc1319b0888273d319 Mon Sep 17 00:00:00 2001 From: Tatu Lund Date: Fri, 23 Jan 2026 12:11:20 +0200 Subject: [PATCH 12/19] Add import for assertEquals in ButtonIT test --- .../src/test/java/com/vaadin/tests/elements/ButtonIT.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/vaadin-testbench-integration-tests/src/test/java/com/vaadin/tests/elements/ButtonIT.java b/vaadin-testbench-integration-tests/src/test/java/com/vaadin/tests/elements/ButtonIT.java index 4eb5404d1..1757413d5 100644 --- a/vaadin-testbench-integration-tests/src/test/java/com/vaadin/tests/elements/ButtonIT.java +++ b/vaadin-testbench-integration-tests/src/test/java/com/vaadin/tests/elements/ButtonIT.java @@ -8,6 +8,8 @@ */ package com.vaadin.tests.elements; +import static org.junit.Assert.assertEquals; + import org.junit.Test; import org.openqa.selenium.By; From d43710d417033b5640c1a59839fe65d2c9844ee0 Mon Sep 17 00:00:00 2001 From: Tatu Lund Date: Fri, 23 Jan 2026 12:35:21 +0200 Subject: [PATCH 13/19] Reorder import statements in ButtonIT.java --- .../src/test/java/com/vaadin/tests/elements/ButtonIT.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vaadin-testbench-integration-tests/src/test/java/com/vaadin/tests/elements/ButtonIT.java b/vaadin-testbench-integration-tests/src/test/java/com/vaadin/tests/elements/ButtonIT.java index 1757413d5..d85feb4bc 100644 --- a/vaadin-testbench-integration-tests/src/test/java/com/vaadin/tests/elements/ButtonIT.java +++ b/vaadin-testbench-integration-tests/src/test/java/com/vaadin/tests/elements/ButtonIT.java @@ -8,14 +8,14 @@ */ package com.vaadin.tests.elements; -import static org.junit.Assert.assertEquals; - import org.junit.Test; import org.openqa.selenium.By; import com.vaadin.testUI.ButtonView; import com.vaadin.tests.AbstractTB6Test; +import static org.junit.Assert.assertEquals; + public class ButtonIT extends AbstractTB6Test { @Override From f824bf13a3daf6116d1d0a7c6907eb738346bbf9 Mon Sep 17 00:00:00 2001 From: Tatu Lund Date: Fri, 23 Jan 2026 12:40:44 +0200 Subject: [PATCH 14/19] Add import statements for JUnit and Component --- .../src/test/java/com/vaadin/tests/elements/ButtonIT.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/vaadin-testbench-integration-tests/src/test/java/com/vaadin/tests/elements/ButtonIT.java b/vaadin-testbench-integration-tests/src/test/java/com/vaadin/tests/elements/ButtonIT.java index d85feb4bc..565df9d36 100644 --- a/vaadin-testbench-integration-tests/src/test/java/com/vaadin/tests/elements/ButtonIT.java +++ b/vaadin-testbench-integration-tests/src/test/java/com/vaadin/tests/elements/ButtonIT.java @@ -8,9 +8,11 @@ */ package com.vaadin.tests.elements; +import org.junit.Before; import org.junit.Test; import org.openqa.selenium.By; +import com.vaadin.flow.component.Component; import com.vaadin.testUI.ButtonView; import com.vaadin.tests.AbstractTB6Test; From 919eb9675e8ddb82b1d48899d5cbc5c58b01c3bc Mon Sep 17 00:00:00 2001 From: Tatu Lund Date: Tue, 27 Jan 2026 15:31:27 +0200 Subject: [PATCH 15/19] Refactor click method and add isElementInViewport --- .../vaadin/testbench/TestBenchElement.java | 88 +++++++++++++------ 1 file changed, 61 insertions(+), 27 deletions(-) diff --git a/vaadin-testbench-shared/src/main/java/com/vaadin/testbench/TestBenchElement.java b/vaadin-testbench-shared/src/main/java/com/vaadin/testbench/TestBenchElement.java index e81ee6936..0ea6a0dbe 100644 --- a/vaadin-testbench-shared/src/main/java/com/vaadin/testbench/TestBenchElement.java +++ b/vaadin-testbench-shared/src/main/java/com/vaadin/testbench/TestBenchElement.java @@ -191,32 +191,9 @@ public boolean isFocused() { @Override public void click() { - // JS call to click does not focus element, hence ensure focus - focus(); - try { - // Avoid strange "element not clickable at point" problems - executeScript(""" - const clickEvent = new MouseEvent('click', { - view: window, - bubbles: true, - cancelable: true, - button: 0, - detail: 1 - }); - arguments[0].dispatchEvent(clickEvent); - """, this); - } catch (Exception e) { - if (e.getMessage() - .contains("Inspected target navigated or closed")) { - // This happens with chromedriver although e.g. navigation - // succeeds - return; - } - // SVG elements and maybe others do not have a 'click' method - autoScrollIntoView(); - waitForVaadin(); - wrappedElement.click(); - } + autoScrollIntoView(); + waitForVaadin(); + new Actions(getDriver()).click(wrappedElement).build().perform(); } @Override @@ -372,12 +349,20 @@ public void click(int x, int y, Keys... modifiers) { actions.build().perform(); } + /** + * Performs a double-click action on this element. + * + * @see click() + */ public void doubleClick() { autoScrollIntoView(); waitForVaadin(); new Actions(getDriver()).doubleClick(wrappedElement).build().perform(); } + /** + * Performs a context-click (right click) action on this element. + */ public void contextClick() { autoScrollIntoView(); waitForVaadin(); @@ -544,7 +529,7 @@ public void scrollIntoView() { private void autoScrollIntoView() { try { if (getCommandExecutor().isAutoScrollIntoView()) { - if (!wrappedElement.isDisplayed()) { + if (!isElementInViewport()) { scrollIntoView(); } } @@ -552,6 +537,55 @@ private void autoScrollIntoView() { } } + private boolean isElementInViewport() { + try { + Boolean result = (Boolean) executeScript( + """ + function isVisible(elem) { + // Check if element has zero dimensions (truly hidden) + if (!elem.offsetParent && elem.offsetWidth === 0 && elem.offsetHeight === 0) { + return false; + } + + var rect = elem.getBoundingClientRect(); + if (rect.width === 0 || rect.height === 0) { + return false; + } + + // Check if element intersects with viewport + var windowHeight = window.innerHeight || document.documentElement.clientHeight; + var windowWidth = window.innerWidth || document.documentElement.clientWidth; + if (rect.bottom < 0 || rect.top > windowHeight || rect.right < 0 || rect.left > windowWidth) { + return false; + } + + // Check if clipped by any scrollable ancestor + var parent = elem.parentElement; + while (parent && parent !== document.body) { + var style = window.getComputedStyle(parent); + var overflow = style.overflow + style.overflowX + style.overflowY; + + if (overflow.includes('hidden') || overflow.includes('scroll') || overflow.includes('auto')) { + var parentRect = parent.getBoundingClientRect(); + // Check if element is outside parent's visible area + if (rect.bottom < parentRect.top || rect.top > parentRect.bottom || + rect.right < parentRect.left || rect.left > parentRect.right) { + return false; + } + } + parent = parent.parentElement; + } + return true; + } + return isVisible(arguments[0]); + """, + this); + return result != null && result; + } catch (Exception e) { + return true; // Assume visible on error + } + } + /** * Waits the given number of seconds for the given condition to become * neither null nor false. {@link NotFoundException}s are ignored by From 5dbd395d31a916aeb6142d4a96227c2baf0a1794 Mon Sep 17 00:00:00 2001 From: Tatu Lund Date: Mon, 2 Feb 2026 08:59:40 +0200 Subject: [PATCH 16/19] Enhance scrollIntoView to use parameters --- .../src/main/java/com/vaadin/testbench/TestBenchElement.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/vaadin-testbench-shared/src/main/java/com/vaadin/testbench/TestBenchElement.java b/vaadin-testbench-shared/src/main/java/com/vaadin/testbench/TestBenchElement.java index 0ea6a0dbe..f0c9e8bba 100644 --- a/vaadin-testbench-shared/src/main/java/com/vaadin/testbench/TestBenchElement.java +++ b/vaadin-testbench-shared/src/main/java/com/vaadin/testbench/TestBenchElement.java @@ -518,7 +518,8 @@ public boolean compareScreen(BufferedImage reference, String referenceName) * Scrolls the element into the visible area of the browser window */ public void scrollIntoView() { - callFunction("scrollIntoView"); + var params = Map.of("block", "end", "inline", "end"); + callFunction("scrollIntoView", params); } /** From 5445317afdede4173aac1b305f94bb00dd8a0e01 Mon Sep 17 00:00:00 2001 From: Tatu Lund Date: Mon, 2 Feb 2026 09:01:55 +0200 Subject: [PATCH 17/19] Fix formatting --- .../src/main/java/com/vaadin/testbench/TestBenchElement.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vaadin-testbench-shared/src/main/java/com/vaadin/testbench/TestBenchElement.java b/vaadin-testbench-shared/src/main/java/com/vaadin/testbench/TestBenchElement.java index f0c9e8bba..948ce34d3 100644 --- a/vaadin-testbench-shared/src/main/java/com/vaadin/testbench/TestBenchElement.java +++ b/vaadin-testbench-shared/src/main/java/com/vaadin/testbench/TestBenchElement.java @@ -518,7 +518,7 @@ public boolean compareScreen(BufferedImage reference, String referenceName) * Scrolls the element into the visible area of the browser window */ public void scrollIntoView() { - var params = Map.of("block", "end", "inline", "end"); + var params = Map. of("block", "end", "inline", "end"); callFunction("scrollIntoView", params); } From c604c7f11feda532a46f73909c922c06e4cdbc25 Mon Sep 17 00:00:00 2001 From: Tatu Lund Date: Mon, 2 Feb 2026 10:20:55 +0200 Subject: [PATCH 18/19] Refactor scrollIntoView to accept parameters Updated scrollIntoView method to accept parameters for scrolling behavior. --- .../vaadin/testbench/TestBenchElement.java | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/vaadin-testbench-shared/src/main/java/com/vaadin/testbench/TestBenchElement.java b/vaadin-testbench-shared/src/main/java/com/vaadin/testbench/TestBenchElement.java index 948ce34d3..7eb7ebc2c 100644 --- a/vaadin-testbench-shared/src/main/java/com/vaadin/testbench/TestBenchElement.java +++ b/vaadin-testbench-shared/src/main/java/com/vaadin/testbench/TestBenchElement.java @@ -514,14 +514,23 @@ public boolean compareScreen(BufferedImage reference, String referenceName) (TakesScreenshot) this, (HasCapabilities) getDriver()); } - /*** + /** * Scrolls the element into the visible area of the browser window + * + * @param params + * the parameters for scrolling into view */ - public void scrollIntoView() { - var params = Map. of("block", "end", "inline", "end"); + public void scrollIntoView(Map params) { callFunction("scrollIntoView", params); } + /** + * Scrolls the element into the visible area of the browser window + */ + public void scrollIntoView() { + callFunction("scrollIntoView"); + } + /** * Scrolls the element into the visible area of the browser window if * {@link TestBenchCommands#isAutoScrollIntoView()} is enabled and the @@ -529,10 +538,11 @@ public void scrollIntoView() { */ private void autoScrollIntoView() { try { - if (getCommandExecutor().isAutoScrollIntoView()) { - if (!isElementInViewport()) { - scrollIntoView(); - } + if (getCommandExecutor().isAutoScrollIntoView() + && !isElementInViewport()) { + var params = Map. of("block", "end", "inline", + "end"); + scrollIntoView(params); } } catch (Exception e) { } From e98532da2866faa0e7c7f33337dcba6989ddff7d Mon Sep 17 00:00:00 2001 From: Tatu Lund Date: Mon, 2 Feb 2026 12:52:19 +0200 Subject: [PATCH 19/19] Improve scrollIntoView method docs Updated the scrollIntoView method to use 'options' parameter instead of 'params' and added additional documentation. --- .../java/com/vaadin/testbench/TestBenchElement.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/vaadin-testbench-shared/src/main/java/com/vaadin/testbench/TestBenchElement.java b/vaadin-testbench-shared/src/main/java/com/vaadin/testbench/TestBenchElement.java index 7eb7ebc2c..a3e8d2310 100644 --- a/vaadin-testbench-shared/src/main/java/com/vaadin/testbench/TestBenchElement.java +++ b/vaadin-testbench-shared/src/main/java/com/vaadin/testbench/TestBenchElement.java @@ -515,13 +515,16 @@ public boolean compareScreen(BufferedImage reference, String referenceName) } /** - * Scrolls the element into the visible area of the browser window + * Scrolls the element into the visible area of the browser window with the + * given options. Check + * https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView + * for more information on the options. * - * @param params + * @param options * the parameters for scrolling into view */ - public void scrollIntoView(Map params) { - callFunction("scrollIntoView", params); + public void scrollIntoView(Map options) { + callFunction("scrollIntoView", options); } /**