2 Stimmen

C# Wie man Methode und Selektor aus der NoSuchElementException erhält

Ich benutze C#.NET 4 und Selenium WebDriver 2.44.0.0 sowie ChromeDriver. Wenn es ein Element nicht finden kann, wirft Selenium einen Fehler:

no such element
(Session info: chrome=38.0.2125.104)
(Driver info: chromedriver=2.10.267521,platform=Windows NT 6.1 SP1 x86_64)

Aber ich möchte wissen, welches Element fehlt. Ich habe gelesen, dass es Details wie diese anzeigen kann:

OpenQA.Selenium.NoSuchElementException: Unable to locate element: {"method":"id","selector":"hello"}

Könnte mir jemand sagen, wie ich die Methode und den Selektor aus der NoSuchElementException bekomme?

Hier ist mein Code

try
{
     for(int i=0; i<10; i++)
     {
          string className = "items-" + i;
          IWebElement t = Driver.FindElement(By.CssSelector("[class$='" + className + "'] > span"));
          t.Click();
     }
}
catch (NoSuchElementException ex)
{
     Logger.Error("Fehler: " + ex.Message);
     Debug.WriteLine(ex.Message);
}

2voto

John O. Punkte 708

Die Methode .ToString() des By Locator gibt zurück, was du anfragst.

Soweit ich weiß, enthält die Ausnahme selbst nicht die Information. Es ist jedoch einfach, die Ausnahme zu behandeln und sie mit der Locator-Funktion zu verknüpfen, die im FindElement() Methode verwendet wurde, die sie ausgelöst hat.

Zum Beispiel, wenn das Element in der 5. Iteration nicht gefunden werden kann, wird der folgende Code diese Meldung ausgeben

Fehler: kein solches Element

Fehler: Element kann nicht gefunden werden mit der Funktion By.CssSelector: [class$='items-4'] > span

By locator;     // das muss außerhalb des try-Blocks deklariert werden
                // damit es im catch-Block darauf zugegriffen werden kann
try
{
     for(int i=0; i<10; i++)
     {
          string className = "items-" + i;
          locatorFunction = By.CssSelector("[class$='" + className + "'] > span")
          IWebElement t = Driver.FindElement(locatorFunction);
          t.Click();
     }
}
catch (NoSuchElementException ex)
{
     Logger.Error("Fehler: " + ex.Message);
     Logger.Error("Fehler: Element kann nicht gefunden werden mit der Funktion " + locatorFunction.ToString());
}

1voto

Saifur Punkte 16081

Verweisen Sie auf das Selenium-API-Dokument für .NET, das hier gefunden wurde. Aber ich glaube nicht, dass es Ihnen das geben wird, was Sie in Bezug auf die Ausnahmeverfolgung wollen. Drucken Sie stattdessen den Selektor aus, den Sie verwenden, um das Element zu identifizieren, das den Fehler wirft.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X