Cypress: дочерняя команда субъекта, кажется, не является элементом - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть функция fillInput(), которая принимает селектор и значение в качестве параметров, затем:

  • очистить вход с помощью cy.get(selector).clear()

  • затем заполняет входное значение с помощью cy.get(selector).type(value)

Насколько я знаю, это действительно своего рода анти-паттерн и команда кипариса должен быть путь.

Итак, читая о дочерних командах , я вышел с этой командой, которая должна выполнять ту же функцию, что и моя служебная функция fillInput():

Cypress.Commands.add('fillInput', {prevSubject: 'element'}, (subject, value) => {
  subject.clear();
  subject.type(value);
});

Однако, когда я пытаюсь сделать это в спецификации через:

cy.get('#my-selector').fillInput('my-value');

, я получаю эту ошибку в консоли браузера Cypress:

TypeError: subject.clear is not a function

В документации cy.get()говорят, что он дает элемент DOM, и {prevSubject: 'element'} должен сделать subject того же типа (насколько я понимаю).

Однако subject, похоже, другого типа иметоды, которые работают с такими элементами, как type() или 'clear () or ' should(), не работают с дочерними объектами команд.

Как я могу заставить subject моей дочерней команды действовать какДом Элемент?

1 Ответ

0 голосов
/ 21 декабря 2018

Разрабатывая вопрос, я решил найти простое решение этой проблемы.subject - это объект, который имеет selector, так что вы можете использовать этот селектор с cy.get(subject.selector), чтобы получить элемент Dom:

Cypress.Commands.add('fillInput', {prevSubject: 'element'}, (subject, value) => {
  cy.get(subject.selector).clear().type(value);
});

Я думаю, что это не так много ясно и болеелюди могут иметь эту проблему, поэтому я оставляю свое решение здесь.

...