2016-04-15 10 views
1

Ich bekomme immer eine StaleElementReferenceException Fehler, wenn ich versuche, alle Links zu finden und durch sie in meiner Konsolenanwendung zu navigieren, habe ich den folgenden Code und versuchte den ganzen Tag, um es gestern zu beheben aber ohne Ergebnis:C# selen Verify alle Links mit Navigieren durch sie StaleElementReferenceException Konsolenanwendung

{ 

    static void Main(string[] args) 
    { 
     try 
     { 
      Console.WriteLine("Starting the browser..."); 
      IWebDriver driver = new FirefoxDriver(); 
      driver.Navigate().GoToUrl("http://www.site.ro"); 
      System.Threading.Thread.Sleep(2000); 
      Console.WriteLine("Gathering the Links..."); 
      List<IWebElement> links = new List<IWebElement>(); 
      try 
      { 
       foreach (IWebElement item in driver.FindElements(By.TagName("a"))) 
       { 
        try 
        { 
         if (item.Displayed == true) 
         { 
          item.Click(); 
          Console.WriteLine("Item is displayed \a\n" + "Navigating to link..."); 
         } else 
         { 
          continue; 
         } 
         Random r1 = new Random(); 
         Random r2 = new Random(); 
         Random r3 = new Random(); 
         var last = r3.Next(1, 10) * 700; 
         var mseconds = r2.Next(1, 10) * 500; 
         var time = mseconds + r1.Next(1, 10) * 300; 
         Console.WriteLine("Waiting for " + (time + last) + " miliseconds before next link"); 
         System.Threading.Thread.Sleep(time + last); 
         driver.Navigate().Back(); 
         System.Threading.Thread.Sleep(2000); 
        } 
        catch (Exception e2) 
        { 
         Console.WriteLine(e2); 
         Console.ReadLine(); 
        } 
        } 
       } 
      catch (Exception e1) 
      { 
       Console.WriteLine(e1); 
       Console.ReadLine(); 
      } 
      Console.WriteLine("Test finished."); 
      driver.Quit(); 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e); 
      Console.ReadLine(); 
     } 
    } 
} 

}

Antwort

1

driver.FindElements (By.TagName ("a")) findet für Sie alle Links auf der Seite.

Dann gehen Sie auf die andere Seite mit dem ersten Link: item.Click();

Schließlich gehen Sie zurück driver.Navigate(). Back();

Aber das ist nicht die erste Seite (nach Selen Meinung). Und alle Links, die im ersten Schritt gespeichert wurden, sind weg, weil deine erste Seite weg ist. Deshalb können Sie nicht auf die zweite klicken.

Sie müssen alle Verbindungen nach jedem driver.Navigate() zurückfinden. Back();

Oder besser speichern Sie alle hrefs zu einer Liste wie linksList.Add (Item.getAttribute ("href")); und verwende gespeicherte hrefs.

+0

Danke, das reparierte es für mich :) –