J'ai essayé les deux et voici mes premières impressions...
WatiN
Les points positifs
- Exécution rapide.
- Les outils de création de scripts sont des projets indépendants; il y en a 2 que je connais : Wax (basé sur Excel, hébergé sur CodePlex) et WatiN Test Record (hébergé sur SourceForge). Aucun n'est aussi robuste que Selenium IDE.
- Très bon support pour IE. Peut se rattacher et se détacher des instances en cours d'exécution. Peut accéder à des poignées de fenêtres natives etc. (Voir exemple de script ci-dessous).
- Emballé dans NuGet, facile à utiliser dans des environnements .NET, style Visual Studio et à garder mis à jour.
Les points négatifs
- En cherchant WatiN (watin xyz), Google recommande souvent "watir xyz" à la place. Pas tant de documentation disponible.
- Ce qui existe en documentation est confus; par exemple : à première vue, il semblerait qu'il n'y ait pas de support natif pour les sélecteurs CSS. Surtout qu'il y a des bibliothèques d'extensions comme 'WatiNCssSelectorExtensions' et de nombreux articles de blog sur les techniques alternatives (comme injecter jQuery/sizzle dans la page). Sur Stack Overflow, j'ai trouvé un commentaire de Jeroen van Menen qui suggère qu'il y a un support natif. Au moins, le développeur principal passe du temps sur Stack Overflow :)
- Aucun support natif pour XPath.
- Aucune exécution à distance/prise en charge basée sur la grille prête à l'emploi.
Exemple de script (C#). Vous ne pouvez pas faire cela avec Selenium (pas que je sache, en tout cas) :
class IEManager
{
IE _ie = null;
object _lock = new object();
IE GetInstance(string UrlFragment)
{
lock (_lock)
{
if (_ie == null)
{
var instances = new IECollection(true); //Trouver toutes les instances existantes d'IE
var match = instances.FirstOrDefault(ie=>ie.Url.Contains(UrlFragment));
_ie = match ?? new IE();
if (match==null) //nous avons créé une nouvelle instance, nous devrions donc le nettoyer quand c'est fait !
_ie.AutoClose = true;
}
}
return _ie;
}
}
Selenium
- Plus lent que WatiN (surtout parce qu'un nouveau processus doit être créé).
- Support natif pour les sélecteurs CSS/XPath.
- Selenium IDE est bon (je ne dirais pas excellent, mais c'est le meilleur de sa catégorie !).
- Paraît plus Java-ish que .NET-ish...mais en réalité, il est indépendant du langage de programmation ; toutes les commandes sont envoyées à un 'Driver' hors processus. Le pilote est en réalité un processus hôte pour l'instance du navigateur. Toute communication doit être sérialisée dans et hors des limites du processus, ce qui pourrait expliquer les problèmes de vitesse par rapport à WatiN.
- Processus découplés - "Driver" et "Control" signifient plus de robustesse, plus de complexité, etc., mais aussi plus facile à créer des grilles/environnements de tests distribués. J'aurais vraiment aimé si le mécanisme de "distribution" (c'est-à-dire la communication entre le pilote et le contrôle) se faisait à travers WebSphere ou un autre gestionnaire de files d'attente de messages existant et robuste.
- Prise en charge de Chrome et d'autres navigateurs prête à l'emploi.
Malgré tout, j'ai finalement opté pour WatiN ; j'ai principalement l'intention d'écrire de petites applications de scraping d'écran et je veux utiliser LINQPad pour le développement. Se connecter à une instance IE distante (que je n'ai pas moi-même démarrée) est un gros avantage. Je peux bidouiller dans une instance existante...puis exécuter un peu de script...puis bidouiller à nouveau etc. C'est plus difficile à faire avec Selenium, bien que je suppose que des "pauses" pourraient être intégrées dans le script pendant lesquelles je pourrais bidouiller directement avec le navigateur.