使用selenium webdriver,如何连续点击网页中的多个随机链接来检测断开的链接?

时间:2013-07-25 16:08:43

标签: python random selenium-webdriver selenium-ide

我正在尝试编写一个测试脚本,它本质上会在登录时在网页中随机测试所有可见链接,而不是明确指定它们。这可能在Selenium IDE / Webdriver中,如果是这样,我该怎么做?

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

以上内容将获取第一页中的所有链接,但如何在不为每个链接/页面手动添加上述代码的情况下测试所有或尽可能多的链接?我想我正在尝试做的是找到导致500 / 404s 的断开链接。这样做有效吗?感谢。

2 个答案:

答案 0 :(得分:2)

目前,您无法从selenium合法获取状态代码。您可以使用selenium来抓取网址,以及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

答案 1 :(得分:1)

在测试错误页面时,我通常会测试标题/网址。 如果您正在测试一个自包含的站点,那么您应该找到/创建一个不好的链接,并查看标题/ URL中的唯一内容,然后执行以下操作:

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

如果您不知道标题/网址的外观,可以检查标题是否包含“500”/“404”/“错误”/“未找到网页”,或者网页来源是否包含好。

这可能会导致一堆坏页面并不是很糟糕(特别是如果您检查页面源代码),并且需要您浏览每一页,并验证它们确实是坏的