【问题标题】:How to find Broken Links using Robot Framework如何使用 Robot Framework 查找断开的链接
【发布时间】:2020-02-18 16:05:33
【问题描述】:

我在网页上查找损坏的链接时遇到了问题。我也在使用 RequestsLibrary。现在我可以找到所有链接,但现在可以根据响应代码验证它们。

Get All Link Tests
    [Tags]    Regression
    [Setup]    Log To Console    Test for total links present on landing page started...
    ${base_url}=    Get Base Url
    open browser  about:blank  ${browser}
    go to  ${base_url}

    ${ALL_LINKS_COUNT}  get element count  xpath://a
    log to console  ${ALL_LINKS_COUNT}

    @{LINK_ITEMS}  create list
    : FOR  ${index}  IN RANGE  1  ${ALL_LINKS_COUNT}+1
    \  log  ${index}
    \  ${link_text}  get text  xpath:(//a)[${index}]
    \  ${href}  Get Element Attribute  xpath:(//a)[${index}]  href
    \  log  ${link_text}
    \  log to console  ("The link text is "${link_text}" & href is "${href}" ${INDEX})
    \  ${link_length}  Get Length  ${link_text}
    \  Run Keyword If  ${linklength}>1  Append To List  ${LinkItems}  ${href}
    Log Many  ${LINK_ITEMS}
    Remove Values From List  ${href}  javascript:void(0)  \#
    ${link_items_length}  Get Length  ${LINK_ITEMS}
    @{errors_msg}    Create List
    : FOR  ${index}  IN RANGE  ${link_items_length}
    \  ${resp}  Get Request  ${LINK_ITEMS[${index}]}
    \  ${code}  Run Keyword And Return Status  Should Be Equal As Strings  ${resp.status_code}  200
    \  Run Keyword Unless  ${code}  Append To List  ${errors_msg}  error :${LINK_ITEMS[${index}]} | ${resp.status_code}
    ${check}  Run Keyword And Return Status  Lists Should Be Equal  ${errors_msg}  ${EMPTY}
    Run Keyword Unless  ${check}  Fail  Link \ assertion Failed with msg:\n@{errors_msg}

我现在遇到的错误是 “RequestsLibrary.Get Request 预期 2 到 7 个参数,得到 1 个。 我也尝试过使用 create session 进行操作,但随后它失败并显示消息 "**Link assertion Failed with msg: []"**

【问题讨论】:

    标签: selenium selenium-webdriver robotframework


    【解决方案1】:

    您需要先执行Create Session,然后将alias 作为Get Request 的第一个参数传递。 RequestsLibrary documentation 说的很清楚。

    另一条错误消息显示您在@{errors_msg} 中有一个空列表。我猜你需要在那里传递索引号。

    【讨论】:

    • 我已经尝试过 Create Session 并且它不起作用。对于错误信息部分,是否可以在不知道断开链接的情况下添加索引号?
    • 嗯,alias 参数是强制性的,它来自 Create Session 关键字。使用Create Session后检查日志/错误消息。
    • 现在它没有捕获任何链接,我已经附上了报告 [链接] (ibb.co/8DgXHLZ)。
    • 您的Open Browser 似乎没有访问您应该访问的 crediwatch.org 页面,对吧?即使您与同一个站点有一个RequestLibrary 会话并不意味着SeleniumLibrary 关键字可以访问该站点。所以你也必须先打开浏览器到同一个站点。然后你可能会得到一些 a 标签,检查应该有 73 个标签。
    • 是的,我尝试仅使用 requests 库进行此操作,但最终,在检查错误消息时再次失败。 link。此外,我还考虑过另一种方式,即创建一个自定义库并为其编写代码并将该库调用到脚本中。在设置中,我可以在 Resource 中导入它,但我不知道我应该在 Test Case 部分使用哪个关键字...
    【解决方案2】:

    试过了,效果很好。但是,现在它仅适用于以https://www.crediwatch.com 开头的链接。此外,href 列表包含一些应该被过滤掉的mailto 链接。

    *** Settings ***
    Library    Collections
    Library    RequestsLibrary
    Library    SeleniumLibrary
    Library    String
    Test Setup    Open Browser    ${BASE_URL}
    Test Teardown    Close Browser
    
    
    *** Variables ***
    ${BASE_URL}    https://www.crediwatch.com
    
    *** Test Cases ***
    Broken links test
        ${element_list}=     get webelements     xpath=//a[@href]
        ${href_list}=  Evaluate  [item.get_attribute('href') for item in $element_list]
        Log    ${href_list}
    
        Create Session    testing    ${BASE_URL}
        FOR    ${element_href}    IN    @{href_list}
            ${uri}=    Remove String    ${element_href}    ${BASE_URL}
            ${contains_base_url}=    Evaluate     "${BASE_URL}" in "${element_href}"
            ${response}=    Run Keyword If    ${contains_base_url}    Get Request    testing    ${uri}
            Run Keyword If    ${contains_base_url}    Should Be Equal As Strings     ${response.status_code}    200
        END
    

    【讨论】:

      猜你喜欢
      • 2017-08-17
      • 2021-11-26
      • 2022-11-30
      • 2019-01-27
      • 1970-01-01
      • 2018-08-22
      • 2016-01-26
      • 2019-05-28
      • 2017-12-31
      相关资源
      最近更新 更多