A equipe do Selenium lançou recentemente o Selenium 2, também conhecido como Selenium WebDriver. O Selenium é um framework para testes de aplicações web que suporta diversos navegadores e linguagens de programação. A principal novidade do Selenium 2 é a integração do WebDriver, outro framework para testes na web que competia com o Selenium 1 (ou Selenium RC). Enquanto o Selenium RC executa uma aplicação JavaScript dentro do navegador, o WebDriver usa extensões ou recursos nativos oferecidos pelo próprio navegador para controlá-lo diretamente.
O texto Breve História do Projeto Selenium explica que os desenvolvedores do Selenium e do WebDriver viam vantagens em ambas as ferramentas, e concordaram que juntá-las daria origem a um framework mais poderoso. O Selenium 1 já é um framework de testes popular e bem estabelecido, oferecendo uma interface que, por ser implementada em JavaScript, fuciona em um grande número de navegadores. Também permite escrever testes em diversas linguagens de programação (de Java a Erlang, passando por C# e PHP). O WebDriver resolve as deficiências do Selenium 1, evitando as restrições impostas pelo JavaScript e oferecendo um rápido simulador de browsers, que é leve e dispensa uma interface gráfica. Simon Stewart, o criador do WebDriver, detalhou os motivos da fusão dos projetos em um e-mail enviado às comunidades do WebDriver e do Selenium (em 2009):
Por que os projetos estão se juntando? Em parte porque o WebDriver tem solução para algumas deficiências do Selenium (evitando as limitações inerentes ao JavaScript, por exemplo, e oferecendo uma API elegante). Em parte porque o Selenium tem solução para algumas deficiências do WebDriver (como o suporte a um grande número de navegadores); e ainda porque os principais desenvolvedores do Selenium e eu sentimos que esta seria a melhor forma de oferecer aos usuários o melhor framework possível.
O Selenium 2 também inclui o Selenium Server, que suporta testes distribuídos através do Selenium Grid. O novo Selenium Grid suporta testes escritos tanto com a API original do Selenium RC quanto com a nova API do WebDriver. O Selenium IDE 1.1.0 também vai oferecer suporte à nova API do WebDriver, inclusive permitindo exportar para todas as linguagens suportadas pelo WebDriver (Ruby, Python, C# e Java). Infelizmente, isto também significa que o Selenium IDE está excluindo oficialmente do código principal de lançamento os plugins para Groovy, Perl e PHP.
O WebDriver é desenvolvido independentemente para cada navegador, e substitui o JavaScript que era embutido nas aplicações testadas. Essa integração mais forte com o navegador permite criar testes mais avançados e remove as restrições impostas pelo modelo de segurança do JavaScript. Além disso, o WebDriver também permite simular entradas do usuário usando chamadas no nível do sistema operacional. O WebDriver é suportado no Firefox (FirefoxDriver), IE (InternetExplorerDriver), Opera (OperaDriver) e Chrome (ChromeDriver). O suporte ao Safari não foi incluído neste lançamento devido a restrições técnicas, mas pode ser simulado usando o SeleneseCommandExecutor. Também funciona no Android (AndroidDriver) e iPhone (IPhoneDriver), para teste de aplicações web para dispositivos móveis. Existe ainda uma implementação baseada no HtmlUnit que não depende de navegadores em si, chamada HtmlUnitDriver. As APIs do WebDriver podem ser acessadas a partir de código Python, Ruby, Java e C#, permitindo que os desenvolvedores criem testes usando sua linguagem de programação preferida.
A última versão estável do Selenium foi a 1.0.3, lançada em fevereiro de 2010. O Selenium 2 mantém a compatibilidade com o Selenium 1, mas é recomendável que usuários que estiverem adotando o Selenium agora usem a API do WebDriver, que também abrange a API e a tecnologia do Selenium RC. O Selenium 1 ainda é suportado, oferecendo algumas funcionalidades que não estão disponíveis no Selenium 2. Entre elas estão suporte a outras linguagens, como JavaScript, PHP e Perl, e a todos os navegadores que trabalham com JavaScript. Para verificar como atualizar testes já existentes, uma boa referênca é Migrando do Selenium RC para o Selenium WebDriver.
Quando o InfoQ.com perguntou a Simon Stewart porque o lançamento do Selenium 2 só ocorreu quase dois anos depois da decisão de combinar o Selenium 1 com o WebDriver, ele respondeu:
Acho que o principal motivo é que só lançamos a versão 2.0 quando achamos que estava pronta. Até pouco tempo atrás, a API do WebDriver não estava totalmente concluída: nas versões candidatas, pode-se notar que alguns métodos foram marcados para exclusão ou excluídos. Havia também muitos chamados pendentes, a serem classificados e validados. Grande parte do meu trabalho nos últimos meses foi estabilizar o WebDriver e corrigir problemas, em vez de desenvolver funcionalidades novas. Embora soubéssemos que a versão 2.0 não sairia sem bugs, queríamos que fosse o mais estável e eficiente possível.
Para mais informações sobre Selenium 2 e WebDriver, consulte a documentação disponível em Selenium 2.0 e WebDriver e o FAQ do WebDriver.