2013-07-25 79 views
0

我試圖編寫一個測試腳本,在本質上測試所有可見的鏈接,而不是明確地指定它們,在登錄時在網頁上。這可能在Selenium IDE/Webdriver中,如果有的話,我該如何做到這一點?使用硒webdriver,如何連續點擊網頁中的多個隨機鏈接來檢測斷開的鏈接?

links = driver.find_element_by_tag_name("a") 
list = links[randint(0, len(links)-1)] 

以上將獲取在第一頁的所有鏈接,但我怎麼去測試全部或儘可能多的聯繫可能沒有手動添加上述代碼爲每個鏈接/頁?我想我想要做的是找到將導致500/404s損壞的鏈接。任何有效的方法來做到這一點?謝謝。

回答

2

目前,您無法從硒合法獲取狀態代碼。你可以使用硒抓取的網址以及其他類似的庫來requests檢查這樣的鏈路的狀態(或使用與@MrTi提出的標題檢查溶液):

import requests 

def find_broken_links(root, driver): 
    visited = set() 
    broken = set() 
    # Use queue for BFS, list/stack for DFS. 
    elements = [root] 
    session = requests.session() 

    while len(elements): 
     el = elements.pop() 
     if el in visited: 
      continue 

     visited.add(el) 

     resp = session.get(el) 
     if resp.status_code in [500, 404]: 
      broken.add(el) 
      continue 

     driver.get(el) 
     links = driver.find_element_by_tag_name("a") 
     for link in links: 
      elements.append(link.get_attribute('href')) 

    return broken 
+0

謝謝!這正是我所尋找的 –

+0

點擊後有一個有效的URL導致401只會在會話超時或註銷時纔會導致。我添加了一個工作條件來防止這兩種情況的發生,但它仍然給出了一個401.任何處理這個問題的建議?謝謝。 –

+0

你確定網址應該被允許被普通用戶訪問嗎?也許您在此期間點擊註銷網址會將您註銷。 –

1

當測試一個不好的頁面時,我通常會測試標題/網址。 如果您正在測試一個獨立的網站,那麼你應該找到/創建一個鏈接,是壞的,看到的是在標題/ URL獨特的,然後做一些事情,如:

assert(!driver.getTitle().contains("500 Error")); 

如果你不不知道標題/網址會是什麼樣子,你可以檢查標題是否包含「500」/「404」/「錯誤」/「找不到網頁」或頁面源是否包含這些內容。

這可能會導致一堆不很糟糕的壞頁面(尤其是如果您檢查頁面源),並且會要求您瀏覽其中的每個頁面,並驗證它們確實很糟糕

+0

感謝Mrti;這是一個很好的方法,我想要的 –

相關問題