Transferidor definir variables ​​globais

Eu estou tentando definir uma variável global no transferidor para usar em todos os blocos de descrição.

var glob = 'test'; describe('glob test', function () { it('should set glob', function () { browser.get('http://example.com/test'); browser.executeScript(function () { window.glob = glob; }); }); }); 

Mas isso me retorna o seguinte erro:

 Message: [firefox #2] UnknownError: glob is not defined 

Eu também olhei para esta questão: variables ​​globais angularJS do transferidor

então eu tentei definir a variável glob em conf.js desta maneira:

 exports.config = { ..., onPrepare: function () { global.glob = 'test'; } }; 

Ainda assim, com o mesmo erro.

Como posso adicionar variables ​​globais corretamente em testes de transferidor?

É possível definir globais a partir do arquivo de configuração do Protractor com a ajuda da propriedade params :

 exports.config = { // ... params: { glob: 'test' } // ... }; 

E você pode acessá-lo nas especificações usando o browser.params.glob .

Veja o arquivo de configuração de referência .

O object params será transmitido diretamente para a instância do Protractor e pode ser acessado a partir do seu teste como browser.params. É um object arbitrário e pode conter qualquer coisa que você possa precisar no seu teste. Isso pode ser alterado através da linha de comando como:

protractor conf.js --params.glob 'other test'

Atualizar:

Nos documentos para browser.executeScript :

Se o script for fornecido como um object de function, essa function será convertida em uma string para injeção na janela de destino. Quaisquer argumentos fornecidos além do script serão incluídos como argumentos de script e podem ser referenciados usando o object arguments.

Portanto, o escopo do JavaScript, neste caso, não funciona, a function que é passada para o browser.executeScript não terá nenhuma variável de fechamento da especificação, como o browser . Mas você pode passar essas variables ​​explicitamente:

 browser.executeScript(function (glob) { // use passed variables on the page console.log(glob); }, browser.params.glob); 

Você também pode definir variables ​​globais em onPrepare() usando global :

 onPrepare: function () { global.myVariable = "test"; }, 

Então, você apenas usaria myVariable durante os testes como está.

Na verdade, é como o protractor , o browser e outras variables ​​globais incorporadas foram disponibilizadas globalmente :

 Runner.prototype.setupGlobals_ = function(browser_) { // Export protractor to the global namespace to be used in tests. global.protractor = protractor; global.browser = browser_; global.$ = browser_.$; global.$$ = browser_.$$; global.element = browser_.element; global.by = global.By = protractor.By; // ... } 

Observe que com essa abordagem você está poluindo seu escopo / namespace global, tenha cuidado.

Eu sei que estou um pouco atrasado para a resposta, mas aqui está outra maneira de configurar variables ​​globais que podem ser usadas em todo o arquivo

 describe("Some Global most outer describe", function(){ var glob = "some global variable"; var blob = "some other global variable"; it('should test glob', function(){ expecte(glob).toEqual("some global variable"); }); it('should test blob', function(){ expecte(glob).toEqual("some other global variable"); }); describe('Some inner describe', function(){ //Some other inner tests can also see glob and blob }); });