Vaadin TestBench MenuBarElement - 无法通过集成测试选择子菜单

问题描述

我正在为菜单项实施 Vaadin 集成测试用例,如下所示

 MenuBar.MenuItem homeMenu = menuItem.addItem("Home",null,null);
        homeMenu.addItem("Dashboard",homeMenuCommand);
        homeMenu.addItem("UserForm",homeMenuCommand);

        MenuBar.MenuItem studentsAdmissionYear = menuItem.addItem("Admission Year",null);
        studentsAdmissionYear.addItem("2018",myCommand);
        studentsAdmissionYear.addItem("2019",myCommand);
        studentsAdmissionYear.addItem("2020",myCommand);
        studentsAdmissionYear.addItem("2021",myCommand);
        studentsAdmissionYear.addItem("2022",myCommand);

我的测试班是

package org.example;


import com.vaadin.testbench.TestBenchTestCase;
import com.vaadin.testbench.elements.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

    import java.net.MalformedURLException;
    import java.net.URL;
    
    import static org.junit.Assert.assertEquals;
    
    public class ApplicationFullIT extends TestBenchTestCase {

    WebDriver webDriver;

    @Before
    public void setUp() throws Exception {
        setDriver(new ChromeDriver());
        getDriver().get("http://localhost:8082/");
    }

    @Test
    public void testMenu() throws MalformedURLException {
        URL userFormUrl = new URL("http://localhost:8082/#!UserForm");
        MenuBarElement menuBarElement = $(MenuBarElement.class).first();
        menuBarElement.clickItem("Home","UserForm");

      //  assertEquals(getDriver().getcurrenturl(),userFormUrl);
    }

    @After
    public void tearDown(){
        getDriver().quit();
    }
}

代码

**MenuBarElement menuBarElement = $(MenuBarElement.class).first();
            menuBarElement.clickItem("Home","UserForm");**

工作直到选择主菜单但不使用子菜单用户窗体”

你能帮忙解决一下吗?我尝试了谷歌搜索提供的所有可能的解决方案,但没有帮助我。

解决方法

我试过你的例子(我假设 menuItem 是一个 MenuBar),据我所知,它没有什么根本性的错误。不过,我担心 clickElement 在某些情况下可能会有点不稳定,而且它们通常是非常小的时间问题。

您可以尝试一次点击一个项目,而不是成组点击,如果这也不起作用,请在每次调用之间添加一个小延迟。

同样,如果您尝试连续调用多个菜单路径,会有一点延迟或例如在触发命令的每个选择之后将焦点移动到一些完全不同的元素(例如标签)可以稳定测试。尤其是当你的命令很重的时候。

,

深入了解如何创建 TestBench 测试的一种方法是研究 Vaadin 框架本身的集成测试。例如这里是 MebuBar 集成测试的链接

https://github.com/vaadin/framework/blob/master/uitest/src/test/java/com/vaadin/tests/components/menubar/MenuBarIconsTest.java

你看,基本上有三种方法可以找到菜单项

你可以在你的java代码中为MenuBar设置id,通过id和索引号可以找到菜单项(项索引按创建顺序)

findElement(By.id("fontIcon-4"))

或者按类名,第n次出现

findElements(By.className("v-menubar-menuitem")).get(4);

如果标题是唯一的,或者标题文本

findElement(By.vaadin("#Sub item"))