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:


Foda-se


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!