Por exemplo, definir exatamente quais botões ou quais elementos de um formulário devem ser clicados ou preenchidos, fará com que seu Gherkin tenha que ser reescrito caso a interface se altere.
Veja os exemplos abaixo.
Modo imperativo:
Funcionalidade: Receber email ao preencher formulário de cadastro
Dado que o usuário clicou em "Fazer novo cadastro"
Quando preenche os campos "Nome", "E-mail", "Senha"
E clica no campo de "Aceito os termos do contrato"
Então ele recebe um email confirmando seu novo cadastro
Modo declarativo para a mesma funcionalidade:
Dado que o usuário deseja fazer um novo cadastro
Devemos manter por padrão a forma declarativa, a intenção da linguagem Gherkin é explicitar casos de uso em linguagem de negócio. Detalhes da interface devem ser encapsulados por frameworks como PageObject e detalhes de navegação por frameworks como Capybara. Esse frameworks ficam para um próximo post...
Modo declarativo para a mesma funcionalidade:
Dado que o usuário deseja fazer um novo cadastro
Quando preenche os campos obrigatórios
E aceita os termos do contrato
Então ele recebe um email confirmando seu novo cadastroDevemos manter por padrão a forma declarativa, a intenção da linguagem Gherkin é explicitar casos de uso em linguagem de negócio. Detalhes da interface devem ser encapsulados por frameworks como PageObject e detalhes de navegação por frameworks como Capybara. Esse frameworks ficam para um próximo post...