Sabe quando você não consegue se lembrar de algo que seu cônjuge acha que é realmente importante, mas consegue se lembrar de todas as falas engraçadas daquele filme que viu quando tinha 17 anos? É assim que me sinto depois de meses escrevendo testes selenium usando o framework Intern – esqueci muitas coisas importantes do front-end, mas descobri muitos problemas com o selenium e técnicas para contorná-los.
Inicialmente, escrevi meus testes usando o Firefox como navegador de teste. Em seguida, abri meus testes para o Chrome e precisei ajustar um monte de coisas porque o Chrome não faz coisas como o Firefox de forma confiável, como pressionar a tecla `click` vs. `enter`. E não me pergunte sobre o problemas de concorrência. Então, hoje tive a brilhante ideia de adicionar o Safari à mistura. Em uma palavra: ….f*ck. Surgiu um mundo totalmente novo de problemas.
Um problema que o Selenium + Safari tem (um entre dezenas) é o histórico / problemas de URL. Depois de fazer muitas pesquisas e implementar todos os hack que pude imaginar, tive esse momento:
Se houver um problema com o Selenium em um determinado navegador que impossibilite a conclusão adequada de um teste, não há por que lutar contra isso – nesse caso, é preciso simplesmente passar no teste em vez de lidar com o incômodo de ver uma falha devido a um erro do Selenium. Mas como o senhor obtém informações sobre o navegador em um teste?
// From within a test function console.log(this.remote.session.capabilities); { 'webdriver.remote.sessionid': 'f4dffffc-8d40-4e21-a862-459109ffabfc', browserName: 'safari', takesScreenshot: true, javascriptEnabled: true, version: '8.0.8', cssSelectorsEnabled: true, platform: 'MAC', secureSsl: true, remoteFiles: true, nativeEvents: false, rotatable: false, locationContextEnabled: false, webStorageEnabled: false, applicationCacheEnabled: false, supportsNavigationDataUris: true, supportsCssTransforms: true, supportsExecuteAsync: true, mouseEnabled: true, touchEnabled: false, dynamicViewport: true, shortcutKey: '', brokenDeleteCookie: false, brokenExecuteElementReturn: false, brokenExecuteUndefinedReturn: false, brokenElementDisplayedOpacity: false, brokenElementDisplayedOffscreen: false, brokenSubmitElement: true, brokenWindowSwitch: true, brokenDoubleClick: false, brokenCssTransformedSize: true, fixedLogTypes: false, brokenHtmlTagName: false, brokenNullGetSpecAttribute: false, brokenNavigation: true, brokenMouseEvents: true, brokenWindowPosition: true, brokenSendKeys: true, brokenCookies: true }
O objeto de sessão no controle remoto fornece informações sobre a sessão do navegador, incluindo o nome (mais importante), bem como as correções fornecidas pela Intern.
Em um mundo ideal, o senhor pode escrever todos os seus testes Selenium em um único formato e ele funciona em cada navegador….mas não vivemos em um mundo ideal, da mesma forma que precisamos de hacks de navegador em nosso JavaScript do lado do cliente. No entanto, a possibilidade de obter o nome do navegador e outras informações em um teste é apenas mais uma informação muito útil exposta pela Intern!