Vaadin TestBench поиск многослойных теневых элементов

У меня вопрос по Vaadin TestBench. Поскольку наш интерфейс написан на Vaadin, мы решили использовать Testbench для тестов пользовательского интерфейса. Мы решили использовать объектную модель страницы для веб-элементов, однако я столкнулся с проблемой, поскольку в проекте присутствуют теневые корневые элементы. На первом слое теневого элемента нет проблем с поиском элемента, однако на нескольких слоях я не могу так легко найти элементы. FE: чтобы найти элемент DOM, мне пришлось использовать JS-скрипт.

      js.executeScript("document.querySelector('#overlay')" +
                ".shadowRoot.querySelector('#content')" +
                ".shadowRoot.querySelector('#confirm')" +
                ".shadowRoot.querySelector('#button')" +
                ".click()");

Поиск таких элементов будет действительно раздражающим, поскольку в DOM есть элементы, которые находятся даже на нескольких слоях. Есть ли хороший способ найти теневые элементы DOM в TestBench? Я ожидал, что TestBench окажется проще, поскольку это инструмент тестирования, разработанный Vaadin.

1 ответ

Допустим, вы ищете сообщение об ошибке проверки Vaadin TextField. Вы можете найти его в теневой DOM vaadin-text-field в части "error-message". Например, учитывая следующий HTML:

      <vaadin-text-field id="fedex" tabindex="2" required="" has-label="" invalid="" has-error-message=""></vaadin-text-field>
  [Shadow Content (open)]
    <div class="vaadin-text-field-container" style="">
      <label part="label" style="" id="vaadin-text-field-label-1">Fedex Tracking #</label>
      <div part="input-field" style="" id="vaadin-text-field-input-1">...</div>
      <div part="helper-text" style="" id="vaadin-text-field-helper-1">...</div>
      <div part="error-message" aria-live="assertive" aria-hidden="false" style="" id="vaadin-text-field-error-1">
        FedEx shipment tracking id is Required
      </div>
    </div>
</vaadin-text-field>

чтобы получить доступ к части "сообщение об ошибке", сначала запросите TextField, а затем запросите его часть "сообщение об ошибке" следующим образом:

      $(TextFieldElement.class).id("fedex")
  .$(DivElement.class)
    .attribute("part", "error-message")
    .first()
    .getText();

Если вам нужно начать запрос исходного элемента в теле страницы, не забудьте использовать «.onPage ()».

Другие вопросы по тегам