2015-09-18 4 views
22

(Migration von Java-Selen zu C# -Selen)Kann nicht WebDriverWait Klasse in OpenQA.Selenium (C#)

finden, wenn für explizite wartet mit Selen und C# Suche finde ich mehrere Beiträge mit Code, der ähnlich sieht das Java-Gegenstück:

zum Beispiel here:

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

oder here:

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

WebDriverWait sind aus dem OpenQA.Selenium.Support.UI Namespace und kommen in einem separaten Paket namens Selen WebDriver Unterstützung Klassen

ABER:
Wenn ich versuche, das selbst in Visual Studio zu kodieren (immer Selen-Paket über NuGet), WebDriverWait in meinem Code verwendet, wird die Meldung an:

der Typ oder Namespace-Name ‚WebDriverWait‘ konnte nicht gefunden werden (sind Sie fehlt eine using-Direktive oder eine Baugruppe beziehen ENCE?)

Auch wenn ich über

using OpenQA.Selenium; 

Wenn aufzublicken die Selenium Referenz bin auch documentation for WebDriverWait werden Sie feststellen, dass sollte es einen Namensraum

OpenQA.Selenium genannt werden .Support.UI

Aber ich kann nicht über "verwenden" in meinem Code zugreifen.

Warum passiert das? Wo finde ich die WebDriverWait-Klasse?

Antwort

50

Zum Glück habe ich manchmal auch die Kommentare Antworten lesen, so dass ich auf die Lösung innerhalb der am höchsten eingestuften Kommentar gestolpert here:

WebDriverWait [ist] aus dem OpenQA.Selenium.Support.UI Namespace und kommt in einem separaten Paket namens Selen WebDriver Unterstützung Klassen auf NuGet

Dank @Ved!

In Visual Studio bedeutet dies, dass Sie zwei Pakete installieren müssen:

  • NuGet Paket "Selenium.WebDriver" UND AUCH
  • NuGet Paket "Selen.Unterstützung "

Von Java mit Maven, ist dies nicht trivial (zumindest für mich ;-), denn bis jetzt nur brauchte ich eine und nur eine Abhängigkeit schließen, um‚all die guten Sachen‘ wie folgt aus:

<dependency> 
    <groupId>org.seleniumhq.selenium</groupId> 
    <artifactId>selenium-java</artifactId> 
    <version>2.46.0</version> 
</dependency> 

* Posted dies als eine Frage einschließlich der Antwort, weil es mir zu viel Zeit und Glück über die Antwort zu stolpern kosten

+0

Haben Sie das C# /. Net-Paket auf der Selenium-Site heruntergeladen? Dort sollten 4 DLLs sein. Wenn Sie einen Verweis auf alle 4 von ihnen hinzufügen, sollten Sie gut sein. Das ist alles was ich tue und es funktioniert für mich. Ich benutze NuGet nie. – JeffC

+0

@JeffC nein, ich benutze NuGet - thx für den Hinweis, werde meine Frage aktualisieren! – drkthng

+0

Sie sollten Ihre eigene Antwort akzeptieren, da Sie wissen, dass es funktioniert. Es macht denjenigen, die diese Frage lesen, klarer, dass sie versuchen, eine Lösung für sich selbst zu finden. –

2

Haben Sie versucht, indem

using OpenQA.Selenium.Support.UI; 
.?

Das sollte alles sein, was Sie brauchen. Je nach Ihrer IDE wird es wahrscheinlich (?) Einen Helfer geben, der fehlende Referenzen finden und hinzufügen wird. Ich benutze Visual Studio. Ich tippe einfach was ich weiß sollte da sein. Wenn die IDE rote Kreise auf WebDriverWait setzt, halte ich den Mauszeiger darüber und es wird eine QuickInfo angezeigt, die besagt, dass mir eine Referenz fehlt und ich auf den Link "Mögliche Fehlerbehebungen anzeigen" klicke. Im neuen Tooltip werden mehrere Optionen angezeigt, von denen die erste die using-Anweisung enthält. Ich klicke auf dieses und die roten Schnörkel gehen weg.

Ich mag Visual Studio wirklich, aber ich habe Eclipse für die letzten 9 Monate oder so verwendet, und ich bevorzuge die Art, wie Eclipse dies behandelt. Ich denke, es ist intuitiver ... aber das bin nur ich.


EDIT

Ich wollte nur für zukünftige Leser klar machen ... Ich weiß nicht NuGet verwenden. Ich lade nur das Selenium .Net-Paket herunter und lasse die 4 DLLs in/nahe meinem Projekt fallen und füge dann alle 4 Referenzen zu meinem Visual Studio-Projekt hinzu. Sobald ich das tue und die obigen Anweisungen benutze, funktioniert es für mich.

+0

nein das funktioniert nicht, wenn du NuGet benutzt -> suchst du nach Selen und fügst das erste Paket hinzu, das Selenium ist. WebDriver, und das schließt die Support-Klassen nicht ein, deshalb müssen Sie, wie in meiner Antwort, einen anderen NuGet Packag mit der Bezeichnung "Selenium Support" laden – drkthng

+0

Ich hatte keine zusätzlichen Anweisungen für die Installation des Selenium .Net-Pakets seit ich Verwenden Sie NuGet nicht aus unserer Konversation unten für Klarheit ... – JeffC

+0

yeah, ohne NuGet Ich denke, man ist mehr verwendet, um "mehrere" Verweise hinzuzufügen, aber mit NuGet, wie das gleiche mit Maven ist, fügen Sie normalerweise nur eine Abhängigkeit hinzu/Paket, das sehr praktisch ist. So praktisch und gewohnt, dass ich die Lösung nicht finden konnte, warum ich nicht auf WebDriverWait zugreifen kann ;-) – drkthng

0

Selenium.WebDriver.WaitExtentions.

+0

https://github.com/SeleniumHQ/selenium/issues/4864 –

+0

IWebDriver driver = new ChromeDriver(); driver.Manage(). Timeouts(). ImplicitlyWait (TimeSpan.FromSecound (1)); driver.FindElement (By.Id ("Login")); –

Verwandte Themen