Как я могу очистить поле редактора Codemirror от Cypress - PullRequest
2 голосов
/ 26 мая 2020

Я уже пробовал что-то подобное из другого ответа SO Как набирать с помощью cypress .type () внутри редактора codemirror?

Если это помогает, это сайт, над которым я работаю Cypress с https://testing-playground.com/

  // CodeMirror's editor doesn't let us clear it from the
    // textarea, but we can read the Window object and then
    // invoke `setValue` on the editor global
    cy.window().then(win => {
      win.editor.setValue("")
    })

Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь реализовать это, я получаю undefined для редактора. Я попытался еще раз покопаться в объекте Window и не нашел ничего похожего на редактор Codemirror. Запуск .clear({force: true}) на любом из других элементов Codemirror не дает результатов, только .type({force: true}) в текстовом поле, добавляя новое содержимое к старому.

Ответы [ 2 ]

2 голосов
/ 26 мая 2020

Решение, которое я в итоге использовал, выглядело похожим на блок кода в вопросе с некоторыми изменениями.

  • Я не получаю объект окна от Cypress; Редактора CodeMirror там не было.

  • Я использовал идею, которую дал мне Эван Плейс, связанную с экземпляром Editor, находящимся в DOM, а затем вручную проверил иерархию CodeMirror DOM, чтобы найти его.

Полученный код очистит специальный c редактор, их два, поэтому [0] для этого необходим.

  cy.get('.CodeMirror')
      .first()
      .then((editor) => {
        editor[0].CodeMirror.setValue('');
      });
1 голос
/ 26 мая 2020

Очень неинтуитивно, но вы можете обновить содержимое, заменив его в новом экземпляре документа CodeMirror

editor.swapDoc(CodeMirror.Doc([contents],[language]));

Вот как я обрабатываю обновления содержимого на w c -codemirror

...