2016-03-16 98 views
0

我有下面這段代碼:找不到元素

if browser.ul(:class => "page-list").present? && browser.ul(:class => "page-list").lis.last.text.to_i > 1 
    pages = Nokogiri::HTML.fragment(browser.ul(:class => "page-list").html).css("a").map { |link| link.text } 

if語句使true,但在接下來的行browser.ul(:class => "page-list")返回:

unable to locate element, using {:class=>\"page-list\", :tag_name=>\"ul\"}". 

HTML:

<div class="page-nav"> 
    <a class="prev disabled" onclick="return false" href="#"> 
    <span><i></i></span> 
    </a> 
    <ul class="page-list"> 
    <li><span>1</span></li> 
    <li><a href="javascript:submitCustomPagination('page', 2)">2</a></li> 
    <li><a href="javascript:submitCustomPagination('page', 3)">3</a></li> 
    </ul> 
    <a class="next" href="javascript:submitCustomPagination('nextPage')"> 
    <span>Next<i></i> </span> 
    </a> 
</div> 

請解釋這是如何可能的以及如何解決它。

+0

這或許會幫助你可能會顯示觸發此錯誤的HTML ;-) – Carpetsmoker

+0

已添加HTML代碼 –

+1

是否正在重新加載ul元素?例如,您點擊其中一個分頁鏈接,檢查是否存在'ul',開始重新加載'ul',然後嘗試在重新加載完成之前再次檢索它? –

回答

0

客戶端可能會重新呈現頁面或列表元素(正如Justin Ko在評論中所建議的那樣)。我可以建議您嘗試解決此問題的幾件事。

1)在IRB中一次輸入一行代碼。使用IRB啓動瀏覽器,手動將其導航到所需的頁面,然後將代碼粘貼到IRB命令行中。由於這比運行腳本慢,這可能會暴露出很多時間問題,並且如果仔細觀察,您有時可以看到重繪等等。典型的代碼在IRB中一次執行較慢但在腳本中不執行時運行一個時間/同步問題的標誌。

2)添加一些調試代碼來觀察該元素的狀態。的兩行代碼,你之間,也許添加像

30 times do 
    puts "is the page-list present?: #{browser.ul(:class => "page-list").present?}" 
    wait .1 
end 

的東西,如果這樣的代碼顯示了什麼,但所有trues,那麼客戶端的JavaScript可更新DOM仍然