2017-06-23 16 views
0

これはおそらく私のコードのロジックの誤りです。 は、第一に、私は何をしようとしていることである: セレンとC言語を使ってページを渡す方法#

  • は、この場合linkである私のウェブサイトのそれぞれのページに移動し、私の公共のボイドGDataPickerで、データを収集します。

  • は今、私はあなたが私を助けたい。ここで、iは、それはそれぞれのデータだが、いつも私に同じエラーを与えるボタンは、次のWebページに存在するかどうかを確認し、収集するために、次のコードを使用し、次のとおりです。

OpenQA.Selenium.StaleElementReferenceException: 'stale element reference: element is not attached to the page document (Session info: chrome=58.0.3029.110) (Driver info: chromedriver=2.30.477700 (0057494ad8732195794a7b32078424f92a5fce41),platform=Windows NT 10.0.15063 x86_64)' , i think it's probably because i don´t update my NextButtonElement.

コード:

​​

答えて

0

私はC#のお手伝いを傾ける、しかしStaleElementReferenceExceptionはあなたに作用する要素は、DOMにまだある場合に発生するが、同じOに置き換えられましたne。私は何だろうと、持っている私は、動的待機機能のセレンとExpectedConditions.ElementToBeClickableを使用することになり、その例外をキャッチし、再び

catch (StaleElementReferenceException i) 
    { 

     IWebElement NextButtonElement = Gdriver.FindElement(By.XPath("/html/body/div[4]/div/div/div[2]/ul/li[13]/a")); 

    } 

http://www.seleniumhq.org/exceptions/stale_element_reference.jsp

0

を要素を見つけることです。

var wait = new WebDriverWait(GDriver, TimeSpan.FromSeconds(5)); 
IWebElement NextButtonElement = wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath("/html/body/div[4]/div/div/div[2]/ul/li[13]/a"))); 

ExpectedConditions.ElementToBeClickableは、要素が表示され、古くなっていないされるまで少し待って、あなたはそれが何をしたい正確に何を行います。 https://github.com/SeleniumHQ/selenium/blob/master/dotnet/src/support/UI/ExpectedConditions.cs

から

 /// <summary> 
    /// An expectation for checking an element is visible and enabled such that you 
    /// can click it. 
    /// </summary> 
    /// <param name="locator">The locator used to find the element.</param> 
    /// <returns>The <see cref="IWebElement"/> once it is located and clickable (visible and enabled).</returns> 
    public static Func<IWebDriver, IWebElement> ElementToBeClickable(By locator) 
    { 
     return (driver) => 
     { 
      var element = ElementIfVisible(driver.FindElement(locator)); 
      try 
      { 
       if (element != null && element.Enabled) 
       { 
        return element; 
       } 
       else 
       { 
        return null; 
       } 
      } 
      catch (StaleElementReferenceException) 
      { 
       return null; 
      } 
     }; 
    } 

関連する問題