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!