0

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

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

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

4

2 回答 2

2

目前,您无法从 selenium 合法地获取状态码。您可以使用 selenium 来抓取 url,以及其他库(如请求检查链接状态的请求)(或使用@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
于 2013-07-25T18:05:23.223 回答
1

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

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

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

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

于 2013-07-25T16:15:13.710 回答