机器人框架中的 for 循环问题

时间:2021-04-23 07:54:49

标签: python-3.x robotframework

我是 Robot Framework 的新手,我正在尝试实现一个 for 循环,我想在其中循环并存储所有 a 标签的所有文本值。

但我只能获取一个标签的文本。

这是我的代码:

*** Settings ***
Library    SeleniumLibrary


*** Variables ***
${url}  http://www.practiceselenium.com/practice-form.html


*** Test Cases ***
ExtractLinks
    alllinks

    close browser


*** Keywords ***
allLinks
    open browser    ${url}

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


    FOR     ${i}     IN      1  ${allLinksCount}

    ${linkText}     get text    xpath:(//a)[${i}]

    log to console    ${linkText}

    END

这是输出:

==============================================================================
getAllLinks
==============================================================================
ExtractLinks                                                          10
More

ExtractLinks                                                          | PASS |
------------------------------------------------------------------------------
getAllLinks                                                           | PASS |
1 test, 1 passed, 0 failed
==============================================================================

因此页面上有 10 个 a 标签,但在控制台的输出中只显示了一个“更多”。

是否可以在列表中收集所有链接文本?

1 个答案:

答案 0 :(得分:2)

FOR ${i} IN 1 ${allLinksCount} 等价于 python 代码 for i in (1, 10)。换句话说,它将恰好循环两次。

如果您想遍历 1${allLinksCount} 之间的范围数字,您应该使用 IN RANGE

因为 xpath 从 1 开始计数而不是从 0 开始,您需要稍微调整数字:

FOR     ${i}     IN RANGE     1  ${allLinksCount}+1
    ${linkText}     get text    xpath:(//a)[${i}]
    log to console   ${linkText}
END

-或-

FOR     ${i}     IN RANGE     ${allLinksCount}
    ${linkText}     get text    xpath:(//a)[${i+1}]
    log to console   ${linkText}
END