【问题标题】:Using selenium webdriver, how to click on multiple random links in webpage one after another continuously to detect broken links?使用selenium webdriver,如何连续点击网页中多个随机链接来检测断链?
【发布时间】:2013-07-25 16:08:42
【问题描述】:

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

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

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

【问题讨论】:

    标签: python random selenium-webdriver selenium-ide


    【解决方案1】:

    目前,您无法从 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
    

    【讨论】:

    • 谢谢!这正是我想要的
    • 点击后有一个有效的 url 会导致 401,只有在会话超时或注销时才会导致。我添加了一个工作条件来防止这两种情况的发生,但它仍然给出了 401。关于处理这个问题有什么建议吗?谢谢。
    • 您确定该网址应该允许普通用户访问吗?也许您同时点击了一个注销 url,将您注销。
    • 我创建了一个不会被命中的url列表;该列表包括注销并复制了相同的结果。该特定 url 不包含任何 ID,因此任何登录到应用程序的人都可以访问它。
    • 如果不了解 url 和实际代码,很难判断是什么原因。
    【解决方案2】:

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

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

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

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

    p>

    【讨论】:

      猜你喜欢
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 2013-02-06
      • 2016-09-29
      • 1970-01-01
      • 1970-01-01
      • 2014-12-27
      • 1970-01-01
      相关资源
      最近更新 更多