Se duas ou mais pessoas / máquinas executam webdriverio-tests conectados à mesma conta Browserstack simultaneamente, todos, exceto o último teste executado, começam a falhar. O motivo parece ser a colisão do porto.
Há uma observação sobre a falta de suporte de localIdentifier
para o Browserstack:
http://webdriver.io/guide/services/browserstack.html#Known -Issues
Não tenho certeza se essa nota implica diretamente que não é possível executar testes de várias máquinas simultaneamente, usando uma conta Browserstack. Daí este relatório de problema.
Duas máquinas iniciam os testes usando a mesma conta Browserstack. Um deles começará a falhar. As capturas de tela do Browserstack mostram o navegador exibindo uma mensagem "Não foi possível conectar ao host local: 12345 ".
'browserstack.local': true
está na configuração.
Definir localIdentifier
não ajuda.
onPrepare: (config, capabilities) => new Promise((resolve, reject) => {
exports.bs_local = new browserstack.Local()
exports.bs_local.start(
{
key: BROWSERSTACK_KEY,
localIdentifier: `foobar_${Date.now()}`
},
error => {
if (error) return reject(error)
// Start test
// ...
resolve()
}
)
})
Resultado:
ERROR: [browserstack.local] is set to true but local testing through BrowserStack is not connected.
Error: [browserstack.local] is set to true but local testing through BrowserStack is not connected.
ERROR: [browserstack.local] is set to true but local testing through BrowserStack is not connected.
[...]
Obrigado pelo esclarecimento. Eu não tinha certeza se isso era um bug e / ou falha de documentação ou não, daí o problema.
Conseguimos resolver esse problema. Para qualquer um que venha do Google etc., aqui está uma versão minimizada de nosso arquivo de configuração com todos os detalhes relevantes:
const localIdentifier = `foobar_${Date.now()}`
exports.config = {
user: BROWSERSTACK_USER,
key: BROWSERSTACK_KEY,
capabilities: [
{
browser: 'Chrome',
browser_version: '58.0',
'browserstack.local': true,
'browserstack.localIdentifier': localIdentifier
}
],
onPrepare: (config, capabilities) => new Promise((resolve, reject) => {
exports.bs_local = new browserstack.Local()
exports.bs_local.start({ localIdentifier, key: BROWSERSTACK_KEY }, error => {
if (error) return reject(error)
// Start server and tests
// ...
resolve()
})
}),
onComplete: exitCode => {
exports.bs_local.stop(() => ({}))
}
}
Uma vez que não está documentado e está altamente relacionado a este tíquete:
WebdriverIO oferece suporte a uma forma mais elegante de conexão local à pilha de navegadores -> http://webdriver.io/guide/services/browserstack.html
. Basicamente, você apenas define browserstackLocal
em exports.config
para fazê-lo funcionar (sem um identificador). Se você deseja adicionar um identificador, você precisa fazê-lo por meio de browserstackOps
:
const localIdentifier = `foobar_${Math.round(Math.random() * 100)}_${Date.now()}`;
export.configs = {
user,
key,
// use of wdio-browserstack-service for automated local tunneling
browserstackLocal: true,
browserstackOpts: {
localIdentifier,
},
...
@Chaoste , tentei a solução escrita acima e obtive:
ERROR: [browserstack.local] is set to true but local testing through BrowserStack is not connected.
Qualquer ideia ?
@ckurban Significa simplesmente que sua conexão de túnel não foi estabelecida. Verifique os logs de rede na pilha de navegadores
@ckurban
wdio-browserstack-service não inicia browserstackLocal quando definido como true. Tive que iniciar meu túnel local antes de executar meus testes.
Conseguimos resolver esse problema. Para qualquer um que venha do Google etc., aqui está uma versão minimizada de nosso arquivo de configuração com todos os detalhes relevantes:
const localIdentifier = `foobar_${Date.now()}` exports.config = { user: BROWSERSTACK_USER, key: BROWSERSTACK_KEY, capabilities: [ { browser: 'Chrome', browser_version: '58.0', 'browserstack.local': true, 'browserstack.localIdentifier': localIdentifier } ], onPrepare: (config, capabilities) => new Promise((resolve, reject) => { exports.bs_local = new browserstack.Local() exports.bs_local.start({ localIdentifier, key: BROWSERSTACK_KEY }, error => { if (error) return reject(error) // Start server and tests // ... resolve() }) }), onComplete: exitCode => { exports.bs_local.stop(() => ({})) } }
Você utiliza um arquivo local.runner.js?
Comentários muito úteis
Conseguimos resolver esse problema. Para qualquer um que venha do Google etc., aqui está uma versão minimizada de nosso arquivo de configuração com todos os detalhes relevantes: