TypeError: невозможно прочитать свойство createElement со значением null

Я пытаюсь щелкнуть боковую панель со следующей структурой:

<div class=“sidebar”>
  <nav class=“subnav”>
    <ul>
      <li>
    <a class=“subnav-toggle”></a>
    <div>
      <ul>
        <li class=subnav-item>…</li>
        <li class=subnav-item>…</li>
        <li class=subnav-item>…</li>
      </ul>
    </div>
      </li>
      <li>…</li>
      <li>…</li>
      <li>…</li>
      <li>…</li>
    </ul>
  </nav>
</div>

и я создал следующую модель страницы:

(Примечание: я хочу, чтобы элементы меню более высокого уровня отображались на панели навигации, а не на втором уровне <li>)

import { Selector } from 'testcafe';

export class PageModel {
  constructor () {
    this.firstItem = Selector('.subnav > ul > li').nth(0);
    this.secondItem = Selector('.subnav > ul > li').nth(1);
    ...
  }
}

наконец, мой тестовый сценарий выглядит следующим образом:

import { PageModel } from 'myclass';

const a_item = new PageModel();
...
test ('Sample test', async t => {
  await t
    .hover(a_item.firstItem);
});

Testcafe успешно нависает над выбранным мной элементом. Однако я получаю сообщение об ошибке TypeError: Cannot read property 'createElement' of null.

Как мне решить эту проблему?

** Обновлять **

Я обновил свой запрос на основе запроса, который я поместил на консоль.

document.querySelectorAll('.subnav > ul > li')
NodeList(8) [li, li, li, li, li, li, li, li]

person Community    schedule 06.03.2019    source источник
comment
Похоже, что нет «второго элемента», соответствующего этому селектору.   -  person Meg    schedule 06.03.2019
comment
@Meg Я могу найти элементы с помощью консоли. Я обновил свой вопрос, чтобы отразить запрос, но появляется та же ошибка   -  person    schedule 06.03.2019
comment
Итак, я вижу, что в вашем консольном запросе у вас есть .subnav, но в вашем тестовом коде у вас нет.; Это так просто, как опечатка?   -  person Meg    schedule 06.03.2019
comment
К сожалению, нет, это была опечатка   -  person    schedule 06.03.2019
comment
Хорошо. Можете ли вы выбрать ДРУГОЕ на странице, не получая этой ошибки? Я начинаю подозревать, что это не связано напрямую с этими строками, поскольку само наведение действительно работает. Проверьте это: stackoverflow.com/questions/37360202/ и stackoverflow.com/questions/30014090/   -  person Meg    schedule 06.03.2019
comment
Похоже, проблема с TestCafe. Не могли бы вы поделиться примером, который я могу воспроизвести на моей машине?   -  person mlosev    schedule 07.03.2019


Ответы (1)


С помощью селектора

Selector('subnav').find('li > a').nth(0);

вы выбираете первый A, который является непосредственным потомком LI, находящегося где-то под «subnav».

Я думаю, что вам действительно нужно найти элементы li "внешнего" списка, например:

 Selector('.subnav > ul > li').nth(0);
person Meg    schedule 06.03.2019
comment
Этот ответ отражал вопрос перед редактированием - я обновлю или удалю, если не смогу ответить должным образом. - person Meg; 06.03.2019
comment
Я могу выбрать элемент с помощью этого селектора, но все равно получаю сообщение об ошибке. Я также пробовал создать селектор и использовать querySelectorAll(), но получаю ту же ошибку. - person ; 06.03.2019
comment
Ошибка связана с кнопкой, которую я нажимал на своей странице. Я разберусь, но нажатие на другие кнопки на навигационной панели работают - person ; 06.03.2019