2013-07-25 59 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;这是一个很好的方法,我想要的 –

相关问题