web-dev-qa-db-fra.com

Impossible de trouver la classe WebDriverWait dans OpenQA.Selenium (C #)

(Migration de Java-Selenium vers C # -Selenium)

Lors de la recherche d'attentes explicites avec Selenium et C #, je trouve plusieurs messages avec un code qui ressemble à Java-Counterpart:

par exemple ici :

WebDriverWait wait = new WebDriverWait(driver, new TimeSpan(0,0,5));
wait.Until(By.Id("login"));

ou ici :

WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("locator")));

WebDriverWait provient de l'espace de noms OpenQA.Selenium.Support.UI et est fourni dans un package distinct appelé Classes de prise en charge Selenium WebDriver

MAIS:
Lorsque j'essaie de coder cela moi-même dans Visual Studio (obtention du package Selenium via NuGet), l'utilisation de WebDriverWait dans mon code affichera le message suivant:

Le nom de type ou d'espace de nom 'WebDriverWait' est introuvable (manque-t-il une directive using ou une référence d'assembly?)

Même si j'inclus la référence Selenium via

using OpenQA.Selenium;

Lorsque vous recherchez documentation pour WebDriverWait vous constaterez qu'il devrait y avoir un espace de noms appelé

OpenQA.Selenium.Support.UI

Mais je ne peux pas y accéder via "using" dans mon code.

Pourquoi cela se produit-il? Où puis-je trouver la classe WebDriverWait?

28
drkthng

Heureusement, je lis parfois aussi les commentaires des réponses, alors je suis tombé sur la solution dans le commentaire le mieux classé ici :

WebDriverWait [est] de l'espace de noms OpenQA.Selenium.Support.UI et est fourni dans un package séparé appelé Selenium WebDriver Support Classes sur NuGet

Merci @Ved!

Dans Visual Studio, cela signifie que vous devez installer DEUX packages:

  • Package NuGet " Selenium.WebDriver " ET AUSSI
  • Package NuGet " Selenium.Support "

Venant de Java avec Maven, ce n'est pas anodin (du moins pour moi ;-), parce que jusqu'à présent, je devais juste inclure une et une seule dépendance pour obtenir "toutes les bonnes choses") comme ça:

<dependency>
    <groupId>org.seleniumhq.Selenium</groupId>
    <artifactId>Selenium-Java</artifactId>
    <version>2.46.0</version>
</dependency>

* Publié ceci comme une question comprenant la réponse, car cela m'a coûté trop de temps et de chance pour trébucher sur la réponse.

57
drkthng

Avez-vous essayé d'ajouter?

using OpenQA.Selenium.Support.UI;

Cela devrait être tout ce dont vous avez besoin. Selon votre IDE, il aura probablement (?) Un assistant qui trouvera et ajoutera les références manquantes. J'utilise Visual Studio. Je tape juste ce que je sais devrait être là. Lorsque le IDE met des gribouillis rouges sur WebDriverWait, je le survole et il montre une info-bulle qui dit que je manque une référence et je clique sur le lien, Afficher les correctifs potentiels. Dans la nouvelle info-bulle il montre plusieurs options, généralement la première consiste à ajouter l'instruction using. Je clique dessus et les gribouillis rouges disparaissent.

J'aime vraiment Visual Studio mais j'utilise Eclipse depuis environ 9 mois et je préfère la façon dont Eclipse gère cela. Je pense que c'est plus intuitif ... mais c'est juste moi.


MODIFIER

Je voulais juste que ce soit clair pour les futurs lecteurs ... Je n'utilise pas NuGet. Je viens de télécharger le package Selenium .Net et de déposer les 4 DLL dans/près de mon projet, puis d'ajouter des références à tous les 4 dans mon projet Visual Studio. Une fois que j'ai fait cela et utilisé les instructions ci-dessus, cela fonctionne pour moi.

3
JeffC