Skip to content

feat: Improve MenuBarElement #7338

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 30 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
86abfc6
Improve MenuBarElement
TatuLund Apr 23, 2025
af3f231
Create MenuBarButtonElement.java
TatuLund Apr 23, 2025
f22e26e
Create MenuBarItemElement.java
TatuLund Apr 23, 2025
9706c55
Fix test
TatuLund Apr 23, 2025
8f3af82
Add isChecked
TatuLund Apr 23, 2025
e81fff5
Fix test
TatuLund Apr 23, 2025
d99156b
add JavaDoc
TatuLund Apr 23, 2025
8d6d560
add JavaDoc
TatuLund Apr 23, 2025
4beba6a
format
TatuLund Apr 23, 2025
892711c
fix typo
TatuLund Apr 23, 2025
1b453ed
Update MenuBarPageIT.java
TatuLund Apr 23, 2025
b6e3358
include overflow button in submenu search
TatuLund Apr 23, 2025
9035c61
add assert
TatuLund Apr 23, 2025
9f187ff
fix
TatuLund Apr 23, 2025
ce80cc5
Update vaadin-menu-bar-flow-parent/vaadin-menu-bar-testbench/src/main…
TatuLund Apr 30, 2025
6bf4c25
Update vaadin-menu-bar-flow-parent/vaadin-menu-bar-testbench/src/main…
TatuLund Apr 30, 2025
1b28f39
Update vaadin-menu-bar-flow-parent/vaadin-menu-bar-testbench/src/main…
TatuLund Apr 30, 2025
54b53ba
Merge branch 'main' into tb1927and1928
vursen May 1, 2025
a9e0f86
Merge branch 'main' into tb1927and1928
vursen May 1, 2025
f779ee3
replace more occurences with TestBench API
vursen May 1, 2025
86d8f72
fix syntax, typo and format errors
vursen May 1, 2025
a33fae7
add getSubMenuItems to MenuBarButtonElement
TatuLund May 5, 2025
dd2d6c3
add getSubMenuItems to MenuBarItemElement
TatuLund May 5, 2025
2d72ea2
fix JavaDoc
TatuLund May 5, 2025
c5029e5
fix JavaDic
TatuLund May 5, 2025
657a3a9
remove whitespace
TatuLund May 5, 2025
6f8262d
add missing import
TatuLund May 5, 2025
6d0b436
add missing import
TatuLund May 5, 2025
3a71589
Update vaadin-menu-bar-flow-parent/vaadin-menu-bar-testbench/src/main…
vursen May 6, 2025
f9bedea
Update vaadin-menu-bar-flow-parent/vaadin-menu-bar-testbench/src/main…
vursen May 6, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,10 @@
import org.junit.Test;
import org.openqa.selenium.By;

import com.vaadin.flow.component.menubar.testbench.MenuBarButtonElement;
import com.vaadin.flow.component.menubar.testbench.MenuBarElement;
import com.vaadin.flow.component.menubar.testbench.MenuBarItemElement;
import com.vaadin.flow.testutil.TestPath;
import com.vaadin.testbench.TestBenchElement;
import com.vaadin.tests.AbstractComponentIT;

@TestPath("vaadin-menu-bar/menu-bar-class-names")
Expand All @@ -42,7 +43,7 @@ public void init() {

@Test
public void toggleMenuItemClassName_classNameIsToggled() {
TestBenchElement menuButton1 = menuBar.getButtons().get(0);
MenuBarButtonElement menuButton1 = menuBar.getButtons().get(0);
Assert.assertFalse(menuButton1.hasAttribute("class"));
click("toggle-item1-class-name");
menuButton1 = menuBar.getButtons().get(0);
Expand All @@ -56,7 +57,7 @@ public void toggleMenuItemClassName_classNameIsToggled() {

@Test
public void setMenuItemClassName_classNameIsSet() {
TestBenchElement menuButton1 = menuBar.getButtons().get(0);
MenuBarButtonElement menuButton1 = menuBar.getButtons().get(0);
Assert.assertFalse(menuButton1.hasAttribute("class"));
click("toggle-item1-class-name");
menuButton1 = menuBar.getButtons().get(0);
Expand All @@ -72,7 +73,7 @@ public void setMenuItemClassName_classNameIsSet() {

@Test
public void toggleMenuItemClassNameWithSetClassName_classNameIsToggled() {
TestBenchElement menuButton1 = menuBar.getButtons().get(0);
MenuBarButtonElement menuButton1 = menuBar.getButtons().get(0);
Assert.assertFalse(menuButton1.hasAttribute("class"));
click("set-unset-item1-class-name");
menuButton1 = menuBar.getButtons().get(0);
Expand All @@ -86,7 +87,7 @@ public void toggleMenuItemClassNameWithSetClassName_classNameIsToggled() {

@Test
public void toggleMultipleItemClassName_classNamesAreToggled() {
TestBenchElement menuButton1 = menuBar.getButtons().get(0);
MenuBarButtonElement menuButton1 = menuBar.getButtons().get(0);
Assert.assertFalse(menuButton1.hasAttribute("class"));
click("add-remove-multiple-classes");
menuButton1 = menuBar.getButtons().get(0);
Expand Down Expand Up @@ -178,7 +179,7 @@ public void menuItemWithClassNameInOverflow_changeClassName_classNameIsChanged()
menuBar.getOverflowButton().click();
click("change-item2-class-name");
menuBar.getOverflowButton().click();
TestBenchElement menuItem = menuBar.getSubMenuItems().get(0);
MenuBarItemElement menuItem = menuBar.getSubMenuItems().get(0);
Assert.assertEquals(
Set.of(MenuBarClassNamesPage.MENU_ITEM_SECOND_CLASS_NAME),
menuItem.getClassNames());
Expand All @@ -192,7 +193,7 @@ public void menuItemWithClassNameInOverflow_removeClassName_classNameIsRemoved()
menuBar.getOverflowButton().click();
click("remove-item2-class-name");
menuBar.getOverflowButton().click();
TestBenchElement menuItem = menuBar.getSubMenuItems().get(0);
MenuBarItemElement menuItem = menuBar.getSubMenuItems().get(0);
Assert.assertEquals(Set.of(), menuItem.getClassNames());
}

Expand All @@ -205,7 +206,7 @@ public void menuItemWithClassNameInOverflow_menuItemLeavesOverflow_classNameCanB
click("reset-width");
waitForResizeObserver();
click("change-item2-class-name");
TestBenchElement menuItem = menuBar.getButtons().get(1);
MenuBarButtonElement menuItem = menuBar.getButtons().get(1);
Assert.assertEquals(
Set.of(MenuBarClassNamesPage.MENU_ITEM_SECOND_CLASS_NAME),
menuItem.getClassNames());
Expand Down Expand Up @@ -246,7 +247,7 @@ private void waitForResizeObserver() {
private void verifySubMenuItemClassNames(boolean containsClassNames,
String... classNames) {
openSubMenu();
TestBenchElement subMenuItem = menuBar.getSubMenuItems().get(2);
MenuBarItemElement subMenuItem = menuBar.getSubMenuItems().get(2);
var subMenuItemClassNames = subMenuItem.getClassNames();
for (String className : classNames) {
if (containsClassNames) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@
import org.junit.Test;
import org.openqa.selenium.By;

import com.vaadin.flow.component.menubar.testbench.MenuBarButtonElement;
import com.vaadin.flow.component.menubar.testbench.MenuBarElement;
import com.vaadin.flow.testutil.TestPath;
import com.vaadin.testbench.TestBenchElement;
import com.vaadin.tests.AbstractComponentIT;

@TestPath("vaadin-menu-bar/detach-reattach")
Expand Down Expand Up @@ -55,7 +55,7 @@ public void setI18n_i18nIsUpdated() {

waitForResizeObserver();

TestBenchElement overflowButton = menuBar.getOverflowButton();
MenuBarButtonElement overflowButton = menuBar.getOverflowButton();

Assert.assertEquals("More options",
overflowButton.getDomAttribute("aria-label"));
Expand All @@ -74,7 +74,7 @@ public void setI18n_detach_attach_i18nIsPersisted() {

click("set-i18n");

TestBenchElement overflowButton = menuBar.getOverflowButton();
MenuBarButtonElement overflowButton = menuBar.getOverflowButton();

Assert.assertEquals("more-options",
overflowButton.getDomAttribute("aria-label"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@
import org.junit.Test;
import org.openqa.selenium.By;

import com.vaadin.flow.component.menubar.testbench.MenuBarButtonElement;
import com.vaadin.flow.component.menubar.testbench.MenuBarElement;
import com.vaadin.flow.component.menubar.testbench.MenuBarItemElement;
import com.vaadin.flow.testutil.TestPath;
import com.vaadin.testbench.TestBenchElement;
import com.vaadin.tests.AbstractComponentIT;
Expand Down Expand Up @@ -99,9 +101,9 @@ public void openSubSubMenu_clickCheckableItem_checkableStateChanges() {
hoverOn(menuBar.getSubMenuItems().get(1));

waitUntil(driver -> menuBar.getAllSubMenus().size() == 2);
TestBenchElement checkableItem = menuBar
MenuBarItemElement checkableItem = menuBar
.getSubMenuItems(menuBar.getAllSubMenus().get(1)).get(1);
Assert.assertTrue(checkableItem.hasAttribute("menu-item-checked"));
Assert.assertTrue(checkableItem.isChecked());

checkableItem.click();
verifyClosed();
Expand All @@ -110,16 +112,16 @@ public void openSubSubMenu_clickCheckableItem_checkableStateChanges() {
openSubSubMenu();
checkableItem = menuBar.getSubMenuItems(menuBar.getAllSubMenus().get(1))
.get(1);
Assert.assertFalse(checkableItem.hasAttribute("menu-item-checked"));
Assert.assertFalse(checkableItem.isChecked());
}

@Test
public void setCheckedExternally_openSubMenu_itemChecked() {
click("toggle-checked");
openSubSubMenu();
TestBenchElement checkableItem = menuBar
MenuBarItemElement checkableItem = menuBar
.getSubMenuItems(menuBar.getAllSubMenus().get(1)).get(1);
Assert.assertTrue(checkableItem.hasAttribute("menu-item-checked"));
Assert.assertTrue(checkableItem.isChecked());
}

@Test
Expand Down Expand Up @@ -160,7 +162,7 @@ public void buttonsOverflow_itemsMovedToOverflowSubMenu() {
click("set-width");
waitForResizeObserver();
click("add-root-item");
TestBenchElement overflowButton = menuBar.getOverflowButton();
MenuBarButtonElement overflowButton = menuBar.getOverflowButton();
Assert.assertNotNull("Expected the overflow button to be rendered",
overflowButton);
assertButtonContents("item 1");
Expand Down Expand Up @@ -200,8 +202,10 @@ public void changeItems_clickRootItemWithClickListener_clickListenerCalledOnce()
public void buttonWithClickListenerOverflows_clickListenerWorksInSubMenu() {
click("set-width");
waitForResizeObserver();
menuBar.getOverflowButton().click();
menuBar.getSubMenuItems().get(0).click();
var overflowButton = menuBar.getOverflowButton();
overflowButton.click();
Assert.assertNotNull(menuBar.getSubMenu());
menuBar.getSubMenuItems(overflowButton.getSubMenu()).get(0).click();
assertMessage("clicked item 2");
}

Expand Down Expand Up @@ -243,7 +247,7 @@ public void buttonsReflectDisabledStateOfMenuItems() {
@Test
public void disableButton_removeDisabledAttribute_click_listenerNotCalled() {
click("toggle-disable");
TestBenchElement button2 = menuBar.getButtons().get(1);
MenuBarButtonElement button2 = menuBar.getButtons().get(1);
executeScript("arguments[0].disabled=false;"
+ "arguments[0].querySelector('vaadin-menu-bar-item').disabled=false;",
button2);
Expand Down Expand Up @@ -417,7 +421,7 @@ private String[] getOverlayMenuItemContents(TestBenchElement overlay) {
}

private String[] getOverlayMenuItemContents(
List<TestBenchElement> menuItems) {
List<MenuBarItemElement> menuItems) {
return menuItems.stream().map(item -> item.getDomProperty("innerHTML"))
.toArray(String[]::new);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@
import org.junit.Test;
import org.openqa.selenium.By;

import com.vaadin.flow.component.menubar.testbench.MenuBarButtonElement;
import com.vaadin.flow.component.menubar.testbench.MenuBarElement;
import com.vaadin.flow.testutil.TestPath;
import com.vaadin.testbench.TestBenchElement;
import com.vaadin.tests.AbstractComponentIT;

@TestPath("vaadin-menu-bar/menu-bar-theme")
Expand Down Expand Up @@ -50,7 +50,7 @@ public void toggleMenuBarTheme_themeIsToggled() {

@Test
public void toggleMenuItemTheme_themeIsToggled() {
TestBenchElement menuButton1 = menuBar.getButtons().get(0);
MenuBarButtonElement menuButton1 = menuBar.getButtons().get(0);
Assert.assertFalse(menuButton1.hasAttribute("theme"));
click("toggle-item-1-theme");
menuButton1 = menuBar.getButtons().get(0);
Expand All @@ -66,7 +66,7 @@ public void setMenuItemTheme_toggleVisibility_themeIsPreserved() {
click("toggle-item-1-theme");
click("toggle-item-1-visibility");
click("toggle-item-1-visibility");
TestBenchElement menuButton1 = menuBar.getButtons().get(0);
MenuBarButtonElement menuButton1 = menuBar.getButtons().get(0);
Assert.assertEquals(menuButton1.getDomAttribute("theme"),
MenuBarThemePage.MENU_ITEM_THEME);
}
Expand All @@ -77,7 +77,7 @@ public void setMenuItemTheme_hide_resetTheme_show_themeIsUnset() {
click("toggle-item-1-visibility");
click("toggle-item-1-theme");
click("toggle-item-1-visibility");
TestBenchElement menuButton1 = menuBar.getButtons().get(0);
MenuBarButtonElement menuButton1 = menuBar.getButtons().get(0);
Assert.assertFalse(menuButton1.hasAttribute("theme"));
}

Expand Down Expand Up @@ -112,7 +112,7 @@ public void toggleMenuBarTheme_toggleMenuItemTheme_themeIsOverridden() {
click("toggle-theme");
click("toggle-item-1-theme");

TestBenchElement menuButton1 = menuBar.getButtons().get(0);
MenuBarButtonElement menuButton1 = menuBar.getButtons().get(0);
Assert.assertEquals(MenuBarThemePage.MENU_ITEM_THEME,
menuButton1.getDomAttribute("theme"));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import org.junit.Before;
import org.junit.Test;

import com.vaadin.flow.component.menubar.testbench.MenuBarButtonElement;
import com.vaadin.flow.component.menubar.testbench.MenuBarElement;
import com.vaadin.flow.testutil.TestPath;
import com.vaadin.testbench.TestBenchElement;
Expand Down Expand Up @@ -58,7 +59,7 @@ public void hide_disableMenuItem_show_buttonIsDisabled() {
Assert.assertTrue(menuBar.isDisplayed());

// Check that the menu item is disabled.
TestBenchElement button = menuBar.getButtons().get(0);
MenuBarButtonElement button = menuBar.getButtons().get(0);
Assert.assertTrue(button.getPropertyBoolean("disabled"));
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
/*
* Copyright 2000-2025 Vaadin Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.vaadin.flow.component.menubar.testbench;

import java.util.List;

import org.openqa.selenium.support.ui.ExpectedConditions;

import com.vaadin.testbench.TestBenchElement;
import com.vaadin.testbench.elementsbase.Element;

/**
* A TestBench element representing a {@code <vaadin-menu-bar-button>} element.
*/
@Element("vaadin-menu-bar-button")
public class MenuBarButtonElement extends TestBenchElement {

/**
* Get the sub menu overlay element linked to this menu button.
*
* @return TestBenchElement for the open sub menu.
*/
public TestBenchElement getSubMenu() {
waitForSubMenu();
return getPropertyElement("__overlay");
}

/**
* Get TestBenchElements representing sub menu items under this button.
*
* @return List of MenuBarItemElement representing sub menu items.
*/
public List<MenuBarItemElement> getSubMenuItems() {
return getSubMenu().$(MenuBarItemElement.class).all();
}

/**
* Check if the button has open sub menu.
*
* @return True if there is sub menu open
*/
public boolean isExpanded() {
return hasAttribute("expanded");
}

private void waitForSubMenu() {
waitUntil(ExpectedConditions.attributeToBe(this, "aria-expanded",
"true"));
}

}
Loading