<p>cucumber-js não encontra definições de passos</p>

Criado em 11 jan. 2017  ·  48Comentários  ·  Fonte: cucumber/cucumber-js

Olá, sou um novato que está tentando há horas fazer o cucumber-js encontrar minhas definições de etapas. Eu vim com este exemplo simples.

Em features / foo.feature:

Feature: Foo
  Scenario: Bar
    Given FooBar

Em features / step_definitions / step_defs.js:

var {defineSupportCode} = require('cucumber');

defineSupportCode(function({Given}) {
    Given('FooBar', function () {
      return 'pending';
    });    
});

Eu obtenho este resultado:

Feature: Foo

  Scenario: Bar
  ? Given FooBar

Warnings:

1) Scenario: Bar - features\foo.feature:2
   Step: Given FooBar - features\foo.feature:3
   Message:
     Undefined. Implement with the following snippet:

       Given('FooBar', function (callback) {
         // Write code here that turns the phrase above into concrete actions
         callback(null, 'pending');
       });

1 scenario (1 undefined)
1 step (1 undefined)
0m00.000s
help wanted

Comentários muito úteis

Tudo bem. Eu acredito que descobri isso.

Ao usar uma instalação global do cucumber para executar os testes de recursos, você ainda está definindo o código de suporte exigindo a instalação local do cucumber. O fato de que essas são duas instâncias diferentes resulta em nenhuma definição de etapa sendo carregada.

Existe algum motivo pelo qual você não pode usar a instalação local para executar o comando? Eu faço isso no mac adicionando "./node_modules/.bin" ao meu caminho.

Não gosto da ideia de tentar fazer isso funcionar fazendo com que a instalação global tente exigir a instalação local para obter as definições de etapas. Eu também não gosto da instalação global, pois faz com que você tenha que especificar coisas como compilar módulos por seu caminho absoluto.

Se isso for possível no Windows, prefiro apenas atualizar a documentação para mencionar que não pode ser usado como uma instalação global.

Todos 48 comentários

Eu sei que o cucumber-js está encontrando o arquivo de definições de etapas, porque quando eu injeto um erro de sintaxe nele, o cucumber-js relata o erro corretamente.

Qual versão do cucumber-js você está usando?

Diz 2.0.0-rc.6

Também é um novato e tem o mesmo problema ao executar a mesma versão do cucumber.js
Eu estava seguindo outro tutorial, mas fiquei preso neste ponto.

/features/add-item.feature

Feature: Shopper can add an item to their Grocery List
  As a grocery shopper
  I want to add an item to my grocery list
  So that I can remember to buy that item at the grocery store

  Scenario: Item added to grocery list
    Given I have an empty grocery list
    When I add an item to the list
    Then The grocery list contains a single item

  Scenario: Item accessible from grocery list
    Given I have an empty grocery list
    When I add an item to the list
    Then I can access that item from the grocery list`

/features/step_definitions/add-item.steps.js
'use strict';

module.exports = function() {

    Given('I have an empty grocery list', function (callback) {
         // Write code here that turns the phrase above into concrete actions
         callback(null, 'pending');
       });


    When('I add an item to the list', function (callback) {
         // Write code here that turns the phrase above into concrete actions
         callback(null, 'pending');
       });

    Then('The grocery list contains a single item', function (callback) {
         // Write code here that turns the phrase above into concrete actions
         callback(null, 'pending');
       });

    Then('I can access that item from the grocery list', function (callback) {
         // Write code here that turns the phrase above into concrete actions
         callback(null, 'pending');
       });

}

$ node_modules/.bin/cucumber-js retorna

Feature: Shopper can add an item to their Grocery List

    As a grocery shopper
    I want to add an item to my grocery list
    So that I can remember to buy that item at the grocery store

  Scenario: Item added to grocery list
  ? Given I have an empty grocery list
  ? When I add an item to the list
  ? Then The grocery list contains a single item

  Scenario: Item accessible from grocery list
  ? Given I have an empty grocery list
  ? When I add an item to the list
  ? Then I can access that item from the grocery list

Warnings:

1) Scenario: Item added to grocery list - features/add-item.feature:6
   Step: Given I have an empty grocery list - features/add-item.feature:7
   Message:
     Undefined. Implement with the following snippet:

       Given('I have an empty grocery list', function (callback) {
         // Write code here that turns the phrase above into concrete actions
         callback(null, 'pending');
       });

2) Scenario: Item added to grocery list - features/add-item.feature:6
   Step: When I add an item to the list - features/add-item.feature:8
   Message:
     Undefined. Implement with the following snippet:

       When('I add an item to the list', function (callback) {
         // Write code here that turns the phrase above into concrete actions
         callback(null, 'pending');
       });

3) Scenario: Item added to grocery list - features/add-item.feature:6
   Step: Then The grocery list contains a single item - features/add-item.feature:9
   Message:
     Undefined. Implement with the following snippet:

       Then('The grocery list contains a single item', function (callback) {
         // Write code here that turns the phrase above into concrete actions
         callback(null, 'pending');
       });

4) Scenario: Item accessible from grocery list - features/add-item.feature:11
   Step: Given I have an empty grocery list - features/add-item.feature:12
   Message:
     Undefined. Implement with the following snippet:

       Given('I have an empty grocery list', function (callback) {
         // Write code here that turns the phrase above into concrete actions
         callback(null, 'pending');
       });

5) Scenario: Item accessible from grocery list - features/add-item.feature:11
   Step: When I add an item to the list - features/add-item.feature:13
   Message:
     Undefined. Implement with the following snippet:

       When('I add an item to the list', function (callback) {
         // Write code here that turns the phrase above into concrete actions
         callback(null, 'pending');
       });

6) Scenario: Item accessible from grocery list - features/add-item.feature:11
   Step: Then I can access that item from the grocery list - features/add-item.feature:14
   Message:
     Undefined. Implement with the following snippet:

       Then('I can access that item from the grocery list', function (callback) {
         // Write code here that turns the phrase above into concrete actions
         callback(null, 'pending');
       });

2 scenarios (2 undefined)
6 steps (6 undefined)
0m00.000s

Um arquivo world.js não foi incluído neste ponto.

@ dunlop-ben, por favor, veja o changelog sobre a diferença entre 1.0 e 2.0. A maneira de definir as etapas mudou e seu exemplo parece estar usando a sintaxe 1.0.

@jeffmath nada parece errado para mim. Temos testes de recursos que verificam algo como o seu exemplo simples funciona. Reproduzindo em um mac, funciona como esperado para mim. Qual versão do nó você está executando? E pelos caminhos parece que você está na máquina Windows, correto?

@charlierudolph - obrigado. Eu olhei para isso e tentei alguns exemplos diferentes com um resultado semelhante. Também tentei usar a definição de recurso e etapa aqui: http://cucumber.github.io/cucumber-js/

Sinto que devo estar faltando uma etapa e / ou arquivos. Se houver algum lugar que você possa me indicar seria ótimo. Não tive muita sorte ao ler a documentação do Github.

@charlierudolph Node 6.4.0 no Windows 7

@charlierudolph Tenho um problema semelhante. Eu sigo exatamente https://github.com/cucumber/cucumber-js/blob/master/docs/nodejs_example.md e o problema ainda ocorre.

Minha configuração é

  • NÓ 7.4.0
  • SO: Windows 10
  • Pepino 2.0.0 -rc.6

@jeffmath @TheAdamW, desculpe, mas eu não tenho uma máquina Windows e, portanto, não posso rastrear isso. Estamos usando o appveyor para executar nossos testes na máquina Windows e não sei qual seria a diferença. Um de vocês poderia, por favor, tentar aprofundar isso? Fico feliz em fornecer qualquer assistência que puder

Para mim, funciona se estou escrevendo ./node_modules/.bin/cucumberjs mas não se eu escrevo apenas cucumberjs globalmente instalado (mesma versão 2.0.0-rc.6 ).

O mesmo erro aqui: não há como o pepino encontrar as definições dos passos. Ter a mesma estrutura de pastas funciona no Linux.

  • NÓ. 4.4.0 e 4.6
  • SO: Windows 10
  • Pepino 2.0.0 -rc.6

Existe alguma maneira de forçar o caminho / pasta / padrão das definições de etapas?
BTW, o truque de @MartinDelille não funcionou para mim.

Estou enfrentando o mesmo problema de repente, o pepino estava bem executando os scripts até hoje de manhã. Não tenho ideia do que há de errado com isso.

Eu executo o recurso clicando com o botão direito no ruby ​​mine e na linha de comando usando o comando cucumber -r features/chatstep.feature e obtenho o mesmo resultado.

Alguém pode por favor ajudar

Dado (/ ^ I launch "([^"] *) "$ /) do | arg1 |
pendente # Escreva aqui o código que transforma a frase acima em ações concretas
fim

Eu tive que fazer o downgrade para 1.3.1 para fazer funcionar.
Não funciona nem em centos.

Em 25 de janeiro de 2017 21:32, "Mrityunjeyan S" [email protected] escreveu:

Estou enfrentando o mesmo problema de repente, o pepino estava bem
executando os scripts até hoje de manhã. Eu não tenho ideia do que está errado
com isso.

Eu executo o recurso clicando com o botão direito no ruby ​​mine e na linha de comando usando
o comando cucumber -r features / chatstep.feature obtenho o mesmo resultado.

Alguém pode por favor ajudar

-
Você está recebendo isso porque comentou.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/cucumber/cucumber-js/issues/718#issuecomment-275224435 ,
ou silenciar o tópico
https://github.com/notifications/unsubscribe-auth/ALjDKMNdggk1Gh-x_q3KRuvlpN5f_0cOks5rV7E9gaJpZM4LhJZO
.

@jbgraug : o que você fez downgrade? Qual era a sua versão anterior antes do downgrade

Tentei com RC 2.0.6 e RC 2.0.0. Não consegui fazer funcionar no linux ou
windows as cucumber não foi capaz de encontrar as definições dos passos, nem mesmo com
a opção -r.

Na quinta-feira, 26 de janeiro de 2017 às 6h18, Mrityunjeyan S [email protected]
escreveu:

@jbgraug https://github.com/jbgraug : o que você fez downgrade? O que era Ur
versão anterior antes do downgrade

-
Você está recebendo isso porque foi mencionado.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/cucumber/cucumber-js/issues/718#issuecomment-275310070 ,
ou silenciar o tópico
https://github.com/notifications/unsubscribe-auth/ALjDKGbyYXvsjlLv-dlz6bnHMfPK7t05ks5rWCypgaJpZM4LhJZO
.

@jbgraug Eu acho que o pepino descontinuou o gherkin empacotado com ele da versão 2.0? No momento, estou instalando 1.3.14 e diz fetching gherkin que nunca percebi ao instalar versões acima de 2.0

@ reach2jeyan baseado em sua linha de comando e trechos de teste, eu acredito que você está falando sobre pepino-rubi . Embora esses dois projetos estejam relacionados na tentativa de implementar a estrutura do pepino para suas respectivas linguagens, eles têm uma série de diferenças.

@charlierudolph Obrigado por

A propósito, agora funciona!

@charlierudolph exatamente o que @MartinDelille disse, funciona bem via npm -S com ./node_modules/.bin/cucumber.js , mas não via npm -g com /usr/local/bin/cucumber.js , ele encontra e executa as etapas, mas de alguma forma os esquece depois.

macOS + Node.js 7.5.0 + Cucumber.js 2.0.0-rc.7
windows specific rótulo

@kozhevnikov obrigado pela atualização. Todos os relatórios até agora foram em um windows (e eu não consegui recriar no meu mac local com a instalação local). É difícil imaginar que a instalação global seja diferente, mas pelo menos agora posso investigar.

Eu recebo os mesmos problemas no Windows usando o prompt de comando através do cygwin. Talvez seja esse o problema? Eu até copiei o código diretamente do exemplo.

Característica: matemática simples
Para fazer matemática
Como desenvolvedor
Eu quero incrementar variáveis

Cenário: matemática fácil
Dada uma variável definida como 1
Quando eu incremento a variável em 1
Então a variável deve conter 2

Esboço do cenário: coisas muito mais complexas
Dado um conjunto de variáveis ​​para

Examples:
  | var | increment | result |
  | 100 |         5 |    105 |
  |  99 |      1234 |   1333 |
  |  12 |         5 |     18 |

Cucumber.defineSupportCode (function (context) {
var setWorldConstructor = context.setWorldConstructor;
var Dado = contexto.Dado
var Quando = contexto.Quando
var Then = context.Then

///// Seu mundo /////
//
// Chame 'setWorldConstructor' com para seu mundo personalizado (opcional)
//

var CustomWorld = function () {};

CustomWorld.prototype.variable = 0;

CustomWorld.prototype.setTo = função (número) {
this.variable = parseInt (número);
};

CustomWorld.prototype.incrementBy = function (number) {
this.variable + = parseInt (número);
};

setWorldConstructor (CustomWorld);

///// Suas definições de etapa /////
//
// use 'Dado', 'Quando' e 'Então' para declarar definições de etapas
//

Dado (/ ^ uma variável definida como (\ d +) $ /, função (número) {
this.setTo (número);
});

Quando (/ ^ eu incremento a variável em (\ d +) $ /, função (número) {
this.incrementBy (número);
});

Então (/ ^ a variável deve conter (\ d +) $ /, função (número) {
if (this.variable! = parseInt (número))
lançar um novo erro ('Variável deve conter' + número +
'mas contém' + this.variable + '.');
});
})

eu recebo este erro "ReferenceError: given is not defined"
Eu executo o cucumber.js e ~ / node_modules / .bin / cucumber.js com o nome do arquivo específico e sempre gera um erro. Posso trabalhar pepino com rubi sem problemas, mas não consigo fazer pepino funcionar

Tudo bem. Eu acredito que descobri isso.

Ao usar uma instalação global do cucumber para executar os testes de recursos, você ainda está definindo o código de suporte exigindo a instalação local do cucumber. O fato de que essas são duas instâncias diferentes resulta em nenhuma definição de etapa sendo carregada.

Existe algum motivo pelo qual você não pode usar a instalação local para executar o comando? Eu faço isso no mac adicionando "./node_modules/.bin" ao meu caminho.

Não gosto da ideia de tentar fazer isso funcionar fazendo com que a instalação global tente exigir a instalação local para obter as definições de etapas. Eu também não gosto da instalação global, pois faz com que você tenha que especificar coisas como compilar módulos por seu caminho absoluto.

Se isso for possível no Windows, prefiro apenas atualizar a documentação para mencionar que não pode ser usado como uma instalação global.

Dois pontos menores sobre a remoção da instalação global:

  1. Todos os documentos precisariam ser atualizados, e não apenas os oficiais, mas muitos outros frameworks populares construídos no topo. Eu estava acompanhando quando me deparei com isso e foi frustrante depurar para alguém que apenas começou com JavaScript / Node.js / Cucumber.js

  2. Muitos IDEs e plug-ins são codificados permanentemente para apontar para global. Além disso, adicionar uma variável de ambiente fora do perfil bash (ou seja, iniciar o WebStorm por meio do Spotlight) no macOS é complicado e muda de versão para versão.

Hmm. Podemos adicionar uma opção CLI que permite ao usuário especificar onde está a instância local do pepino? Podemos ter o padrão process.cwd() + /node_modules/cucumber que deve abranger a maioria dos casos.

@charlierudolph Após relatar o erro originalmente, percebi que precisava usar o Cucumber-JVM, de qualquer maneira, já que o código que eu precisava testar foi escrito em Scala.js. Mas quando eu precisar testar o Javascript, sua solução alternativa parece fácil de implementar. Obrigado por descobrir o problema.

Vai ser complicado, pelo que eu entendo, o Node tem muitos casos extremos , então, no mínimo, ele teria que atravessar os pais até encontrar o pacote local ou acessar a raiz da unidade, e eu não sei o quão popular é usar pastas globais na comunidade Node.

@jeffmath @kozhevnikov aqui estão minhas idéias atualizadas sobre isso

  1. Estou bem com a opção CLI que permite ao usuário especificar o caminho para o pepino local. Se não for fornecido, ele usa a instância executada.
  2. O uso desta opção faria a validação da versão para garantir que a instalação local / global seja exatamente a mesma versão, caso contrário, as coisas podem não funcionar como esperado. Caso contrário, ele gerará um erro informando ao usuário para alinhar as versões.
  3. Esta opção seria imediatamente descontinuada e viria com um aviso para interromper o uso da instalação global e, em vez disso, usar apenas a instalação local.
  4. Esta opção será removida na próxima versão principal.

Encontrei um problema semelhante ao tentar construir uma biblioteca de testes comuns. Minha ideia é reutilizar testes em diferentes projetos.

Eu construí um pacote de testes comum chamado _roi-Functional-tests_ que gostaria de usar em outros projetos. Até agora, eu ter ligado o pacote com link_ _npm e depois tentar ponto de pepino para os recursos do _roi-functional-tests_, algo como isto:

./node_modules/.bin/cucumberjs ./node_modules/roi-functional-tests/features

Mas eu entendo:

Warnings:

1) Scenario: Curl request - node_modules/roi-functional-tests/features/home.feature:3
   Step: Given I make curl request to "/" - node_modules/roi-functional-tests/features/home.feature:4
   Message:
     Undefined. Implement with the following snippet:

       Given('I make curl request to {arg1:stringInDoubleQuotes}', function (arg1, callback) {
         // Write code here that turns the phrase above into concrete actions
         callback(null, 'pending');
       });

O pepino pode importar definições de fora do diretório de trabalho?

@jramcast sim. Mas você precisaria usar o sinalizador --require cli.

Já tentei usar a sinalização --require :

./node_modules/.bin/cucumberjs --require ./node_modules/roi-functional-tests/features ./node_modules/roi-functional-tests/features

Mas obtenho o mesmo resultado.

É possível que npm link esteja fazendo com que o pepino não encontre as definições?

Então, fiz o mesmo teste sem npm link . Publiquei e instalei o pacote e tudo está funcionando bem apenas chamando:

./node_modules/.bin/cucumberjs ./node_modules/roi-functional-tests/features

Meu palpite é que, ao vincular o pacote, require carrega o pepino instalado dentro do diretório do pacote vinculado ( node_modules/roi-functional-tests/node_modules/cucumber ). No entanto, se _roi-functions-tests_ estiver instalado, o npm nivela a árvore de dependências e usa a instância do pepino instalada logo abaixo dos node_modules do projeto ( node_modules/cucumber )

Tenho o mesmo problema.

Versão do pepino: "pepino": "^ 2.0.0-rc.9"
Versão do Windows: 10
Versão do nó: 6.10.3 LTS e 7.10

Não funciona em IDE ou instância global de pepino, nunca encontra as etapas, embora elas sejam implementadas corretamente.

Se eu chamar o cucumber.js de dentro do diretório node_modules do projeto, ele funciona.

Alguém tem alguma sugestão sobre como resolver esse problema?

Isso também está acontecendo no MacOS Sierra 10.12.4
Node versão 7.10

Voltei para a versão 1.3.0 do Cucumber, agora funciona bem chamando-o via cmd usando a instância global E funciona no IDE.

Olá @charlierudolph ,
Estou na próxima etapa. (Avançar da edição 60 para aqui)
Eu executo apenas com instância local, mas minhas definições de etapa não são reconhecidas durante a execução do arquivo de recurso
image
O arquivo de feição e os arquivos de definição de etapa estão no lugar certo (captura de tela em anexo)
Por que minhas etapas não são identificadas?

Eu tinha a referência do Cucumber para as versões 1.X em package-lock.json
"wdio-cucumber-framework":

    "cucumber": {
      "version": "1.3.3",
      "resolved": "https://registry.npmjs.org/cucumber/-/cucumber-1.3.3.tgz",
      "integrity": "sha1-Za+2Xy+T9y2teN8qterPFGCf7C8=",
      "dev": true
    },

"webdriverio-cucumber-js":  

   "cucumber": {
      "version": "1.2.2",
      "resolved": "https://registry.npmjs.org/cucumber/-/cucumber-1.2.2.tgz",
      "integrity": "sha1-KEZJEf8arfwOZjTXY2q69mHGaJI="
    },

Mudei essas duas versões para 2,3,1
Minha versão do nó é 8.0.0
Mas ainda assim a definição da etapa não é reconhecida
Qualquer ideia?

@vvedachalam

Se você estiver usando webdriverIO com seu executor de teste em vez de no modo autônomo, você PRECISA usar o cucumber-js versão 1.x, de preferência 1.3.3 em vez de 2.x, pois o executor de teste NÃO suporta a nova versão e uma nova maneira como as definições de etapas são implementadas.

Voltei para o antigo [email protected] porque estou usando o executor de teste necessário para o modelo de objeto de página e garantindo que todos os comandos sejam executados de forma síncrona.

@GeeChao
Obrigado pela resposta. Eu reverti e executei o teste, mas a definição da etapa não foi reconhecida

Quando tentei o comando com -r, recebo um erro de syntex no arquivo de recurso ...
C: /webdriverio-test/node_modules/.bin/cucumber-js -r features / customer-validation.feature

C: \ webdriverio-testfeatures \ customer-validation. característica: 2
Como dono
^^

Erro de Sintaxe: Identificador inesperado
em createScript (vm.js: 74: 10)
em Object.runInThisContext (vm.js: 116: 10)
em Module._compile (module.js: 533: 28)
em Object.Module._extensions..js (module.js: 580: 10)
em Module.load (module.js: 503: 32)
em tryModuleLoad (module.js: 466: 12)
em Function.Module._load (module.js: 458: 3)
em Module.require (module.js: 513: 17)
em require (internal / module.js: 11: 18)
em C: \ webdriverio-test \ node_modules \ cucumberlib \ cliindex.js: 135: 16
em Array.forEach (nativo)
em Cli.getSupportCodeLibrary (C: \ webdriverio-test \ node_modules \ cucumberlib \ cliindex.js: 134: 24)
em Cli.(C: \ webdriverio-test \ node_modules \ cucumberlib \ cliindex.js: 144: 39)
em Generator.next ()
em Generator.tryCatcher (C: \ webdriverio-test \ node_modules \ bluebird \ js \ release \ util.js: 16: 23)
em PromiseSpawn._promiseFulfilled (C: \ webdriverio-test \ node_modules \ bluebird \ js \ release \ generators.js: 97: 49)

@vvedachalam Você poderia criar e enviar para o seu repositório para que eu possa replicá-lo?

@GeeChao
Por favor, dê uma olhada
https://github.com/vvedachalam/Ruffer-Test

@vvedachalam

Mova sua pasta step_definitions dentro de sua pasta de recursos e ela começará a funcionar e reconhecer as definições de etapas. O único problema lançado depois é que a localização do arquivo txtdetails.txt está incorreta.

@GeeChao
ahh, sry, eu não forcei essa mudança.
Se você vir minha captura de tela acima, a definição da etapa está apenas dentro da pasta de recursos.
Espero que o conteúdo seja:
Content = fs.readFileSync ('../../ txndetails.txt', 'utf8');

Então, por que não consigo colar a definição da etapa ao arquivo de feições no meu local?
Minha configuração não está correta?

@vvedachalam

Funciona para mim.

A única coisa que fiz foi mover step_definitions para o diretório de recursos

também fiz um npm install [email protected] --save-dev

em seguida, executei node_modules / cucumber / bin / cucumber.js features /

@GeeChao Tudo funcionou bem. Fiz um loop For dentro da instrução Then que criou o problema. É possível usar o loop For dentro da definição da etapa?
Não quero usar o Exemplo, pois preciso executar a etapa Then com base em dados de arquivo de texto (teste orientado a dados)
Eu sei que esta pergunta não está relacionada a este tópico, mas apenas pensei se posso conseguir alguma ajuda.

@GeeChao Ok, novamente é meu erro bobo. A variável de loop não foi configurada corretamente (esqueci de comparar o comprimento). Obrigado novamente pelo seu apoio

Para mim, como um novato, o erro foi causado por eu passar uma string em vez de um regex nas etapas;

Then('I log in as (.*)', ...)

ao invés de

Then(/I log in as (.*)', ...)

Erro simples, mas espero que seja útil para alguém que está começando.

@vvedachalam Você

@ sancy2017 Mudei para a ferramenta TestCafe do WDIO. Portanto, posso não ser capaz de lhe dizer a solução imediatamente. Deixe-me saber exatamente qual é o problema que você está enfrentando

A solução simples para este erro é npm install [email protected] --save-dev
em seguida, execute seu teste ..npm test

Eu encontrei o mesmo problema "As definições da etapa do pepino não foram reconhecidas". Alterar o nome do diretório de "steps" para "step_definitions" funcionou para mim.

Estou vendo que a maioria das pessoas tem step_definitions no diretório de recursos, acredito que uma prática melhor é ter a implementação de etapas em um diretório separado, ou seja, src / step_definitions em vez de manter as etapas no diretório de recursos.

Esta página foi útil?
0 / 5 - 0 avaliações