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, 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");**

работает до выбора главного меню, но не работает с подменю «UserForm»

Не могли бы вы помочь с решением? Я пробовал все возможные решения, доступные в Google, но мне это не помогает.

2 ответа

Я пробовал твой пример (полагаю это ), и, насколько я могу судить, в этом нет ничего принципиально неправильного. Я боюсь Тем не менее, при некоторых обстоятельствах могут быть немного нестабильными, и обычно это очень незначительные проблемы с синхронизацией.

Вы можете попробовать щелкать элементы по одному, а не в группе, и если это тоже не помогает, добавьте небольшую задержку между каждым вызовом.

Точно так же, если вы пытаетесь вызвать несколько путей меню подряд, небольшая задержка или, например, перемещение фокуса на какой-то совершенно другой элемент (например, метку) после каждого выбора, запускающего команду, может стабилизировать тест. Особенно, если ваши команды тяжелые.

Один из подходов к более глубокому пониманию того, как создаются тесты TestBench, - это изучение самих интеграционных тестов Vaadin Framework. Например, вот ссылка на интеграционный тест MebuBar.

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

Вы видите, что есть три основных способа найти пункт меню.

Вы можете установить идентификатор для MenuBar в своем Java-коде, и вы можете найти элемент меню, используя идентификатор и номер индекса (индекс элемента в порядке создания)

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

Или по имени класса, n-е вхождение

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

Или текст подписи, если подписи уникальны

      findElement(By.vaadin("#Sub item"))
Другие вопросы по тегам