c#
  • selenium-webdriver
  • 2017-07-13 76 views 0 likes 
    0

    我正試圖瀏覽頁面上有多個標籤頁的系統,每個標籤頁上都有多個頁面鏈接。我知道這與DOM中刪除的元素有關,但我不確定如何解決這個問題。陳舊的元素引用:元素沒有附加到帶有循環的頁面文檔

     //Get all the elements in the top tab section 
         IList<IWebElement> tabIndex = driver.FindElements(By.XPath("//*[@class='TabList ClearFix']//a[@tabindex=-1]")); 
         //The first page of the frist tab is already accessed 
         //Get all the page links that are in the left navigation bar, click on the page and then move onto the next one 
         //Once the last page is accessed, move to the next tab and repeat. 
         foreach (IWebElement element in tabIndex) 
         { 
          Console.WriteLine(element.Text.ToString()); 
          IList<IWebElement> leftIndex = driver.FindElements(By.XPath("//*[@id='LeftMenu']//a[@tabindex=-1]")); 
          foreach (IWebElement lElement in leftIndex) 
          { 
           Console.WriteLine(lElement.Text.ToString()); 
          } 
          element.Click(); 
         } 
    

    ,我發現了例外的:Console.WriteLine(element.Text.ToString()); 任何幫助將不勝感激。

    +0

    什麼是例外? – FortyTwo

    +0

    @Forty Two:OpenQA.Selenium.StaleElementReferenceException:陳舊的元素引用:元素沒有附加到頁面文檔 – Derpafox

    回答

    1

    陳舊元素:您正在查找導致對象>頁面更改/重新加載>的元素,您正嘗試使用該對象。

    您的主要問題是您在foreach循環中對先前找到的對象列表執行click操作,這些元素對象在頁面更改/重新加載時丟失。

    您需要確保頁面在查找元素和將其用於操作之間不發生變化。

    不要做在一個循環的動作,可以使用對象的頁面從環

    選項外部改變:
    - 計數標籤和索引
    使用發現在環 - 找到所有將一些attributes保存在列表中,並使用這些屬性來查找循環中的每個選項卡
    - 使用選擇器根據當前選項卡識別選項卡,就像下一個未打開的選項卡的選擇器一樣

    +0

    因此,而不是在循環內工作,保存列表中每個標籤/頁面的hrefs,然後遍歷這些列表? – Derpafox

    0

    只要做一些簡單的事情,像移動元素集合刮入循環應該修復它。這種方式在循環的頂部,頁面被再次抓取。

    // Get all the elements in the top tab section 
    //The first page of the frist tab is already accessed 
    //Get all the page links that are in the left navigation bar, click on the page and then move onto the next one 
    //Once the last page is accessed, move to the next tab and repeat. 
    foreach (IWebElement element in driver.FindElements(By.XPath("//*[@class='TabList ClearFix']//a[@tabindex=-1]"))) 
    { 
        Console.WriteLine(element.Text.ToString()); 
        foreach (IWebElement lElement in driver.FindElements(By.XPath("//*[@id='LeftMenu']//a[@tabindex=-1]"))) 
        { 
         Console.WriteLine(lElement.Text.ToString()); 
        } 
        element.Click(); 
    } 
    
    相關問題