2016-04-15 6 views
1

私はすべてのリンクを見つけて、自分のコンソールアプリケーションでそれらをナビゲートしようとしたとき、私は次のコードを持っており、昨日それを修正するために一日中しようとしたStaleElementReferenceExceptionのエラーを取得維持を確認しますしかしなしの結果で:C#のセレンは、それらすべてをナビゲートとのリンクStaleElementReferenceExceptionコンソールアプリケーション

{ 

    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(); 
     } 
    } 
} 

}

答えて

1

driver.FindElements(By.TagName( "A"))あなたのためのページ上のすべてのリンクを見つけることです。

は、その後、あなたは最初のリンク使用して別のページに移動されていますitem.Clickを();

最後に、driver.Navigate()に戻ります。

しかし、それは(セレンの意見による)初期ページではありません。あなたの最初のページがなくなったため、最初のステップで保存されたすべてのリンクがなくなりました。だからこそ、その2番目をクリックすることはできません。 。

あなたは)(戻る各driver.Navigate(後にすべてのリンクを)REFind関数する必要があります。

また、すべてのhrefをリストに保存すると便利です。linksList.Add(Item.getAttribute( "href"));と保存されたhrefを使用してください。

+0

私のためにそれを固定おかげで、:) –