Python &引用;等待关键字成功";不';不要执行整个关键字

Python &引用;等待关键字成功";不';不要执行整个关键字,python,robotframework,Python,Robotframework,这有点像一堵文字墙,但我尽量让它尽可能短 情况: 我正在打开一个网站,其中显示一个任务和一个加载栏。加载栏可以显示0-100%的数字,完成或停止为0-100%。 这个想法: 我使用“获取文本”来读取加载条,并检查它是“完成”还是“停止”。要忽略百分比,我只需要文本的第一部分(例如仅“stopped”)。 我用“等待关键字成功”重复关键字,直到文本停止或完成 守则: Observe Task Wait Until Keyword Succeeds 120 min 60 sec

这有点像一堵文字墙,但我尽量让它尽可能短

情况: 我正在打开一个网站,其中显示一个任务和一个加载栏。加载栏可以显示0-100%的数字,完成或停止为0-100%。 这个想法: 我使用“获取文本”来读取加载条,并检查它是“完成”还是“停止”。要忽略百分比,我只需要文本的第一部分(例如仅“stopped”)。 我用“等待关键字成功”重复关键字,直到文本停止或完成

守则:

Observe Task
    Wait Until Keyword Succeeds    120 min     60 sec    Check Progress Status    ${task_progress_bar}

Check Progress Status
    [Arguments]    ${task_progress_bar}
    ${task_status} =    Get Text    ${task_progress_bar}
    Log to Console    \n ${task_status}
    @{words} =    Split String    ${test_string}    ${SPACE}
    ${first_word} =     @{words}[1]
    Log to Console    \n ${first_word}
    Log to Console     'this is a test message' 
我记录状态以检查它是否工作。是的。控制台显示0%、0%、停止在0%等 但这是我得到的唯一输出。它既不显示第一个单词变量,也不显示测试消息。 它似乎在断绳时断了

我试图解决的问题是:

    ${test_string}    Set Variable    'Robot is not working'
    Log to Console    \n ${test_string}
    @{words} =    Split String    ${test_string}    ${SPACE}
    ${first_word} =     @{words}[1]
    Log to Console    \n ${first_word}
如果读取的文本有问题,我使用了一个简单的字符串。控制台上只显示“机器人不工作”

    #${split} =    Fetch From Left    ${test_text}    ${SPACE}
    #Log to Console    \n ${split}
使用从左取。同样的错误。 我试着用另一套测试服去拿和分开。两者都起作用,因此语法应该是正确的

    Run Keyword And Ignore Error    Wait Until Keyword Succeeds    120 min     120 sec    Check Progress Status    ${task_progress_bar}
忽略错误并将时间间隔增加到2分钟

无论我做什么,控制台都只显示:

'Robot is not working'

'Robot is not working'

'Robot is not working'
或分别“停止在0%”。 我的猜测是,“等待关键字成功”在整个“检查进度状态”执行之前以某种方式循环。或者字符串拆分会破坏关键字,但我不知道为什么会发生这种情况。 我真的很感谢你的帮助。多谢各位

编辑:正如我所建议的,这里是我正在使用的缺少的XPath。因为我用一个简单的字符串替换了它们(请参见修复尝试2),但它也不起作用,所以我认为这不是问题的一部分。无论如何:

direct xpath: 
//*[@id="app"]/div/main/div/section/div[2]/div[2]/table/tbody/tr/td[2]/div/a/div/div[2]/span
xpath im using: 
xpath=//tr[contains(., '${task_name}')]/td[2]/div/a/div/div[2]/span
Code snippet to read the text: 
${task_progress_bar} =    Set Variable    xpath=//tr[contains(., '${task_name}')]/td[2]/div/a/div[2]/span

由于${task_name}只是一个名称,它显示在进度条的左侧(例如流程1)

我认为可能会有一些小问题,这些问题可能会滚到一个不起作用的关键字上。我不能百分之百肯定我的改变会解决整个问题,但我会从它们开始,看看我能从哪里得到

当我执行:

*** Test Cases *** 
Split Example
    ${test_string}    Set Variable    'Robot is not working'
    @{words} =    Split String    ${test_string}    ${SPACE}
    ${first_word} =     @{words}[1]
    Log to Console    \n ${first_word}
我有一个错误:

找不到名为“@{words}[1]”的关键字

所以我修正了这个问题:

${first_word} =     Set Variable    @{words}[1]
并再次执行相同的测试用例。现在我得到两个警告:

[警告]不推荐使用“@{words}[1]”语法访问变量项。改用“${words}[1]”。
[警告]不推荐使用“\n”后忽略空格。有关更多信息,请参阅:

我使用的是RF 3.2.1,它可能在这里发挥作用

我再次修复了这两个问题,因此整个测试用例如下所示:

*** Test Cases *** 
Split Example
    ${test_string}    Set Variable    'Robot is not working'
    @{words} =    Split String    ${test_string}    ${SPACE}
    ${first_word} =     Set Variable    ${words}[1]
    Log to Console    \n${first_word}
现在我将
is
放入控制台,这似乎是一个理想的输出

我在你的例子中也注意到:

Check Progress Status
    [Arguments]    ${task_progress_bar}
    ${task_status} =    Get Text    ${task_progress_bar}
    Log to Console    \n ${task_status}
    @{words} =    Split String    ${test_string}    ${SPACE}
    ${first_word} =     @{words}[1]
    Log to Console    \n ${first_word}
    Log to Console     'this is a test message' 

${test\u string}
来自哪里?它在关键字的任何地方都没有初始化,也不是参数。确保变量存在。

在关键字中,此语法:

${first_word} =     @{words}[1] 
无效-要进行变量赋值,必须有一个返回值的关键字调用。因此,将其更改为:

${first_word} =     Get From List    ${words}    1
,或


顺便说一句,列表是基于0的,因此索引1将获得其中的第二个元素-我希望这是您的意图。

您操作的元素的html代码是什么?请不要添加它的图片,这是一个糟糕的做法,没有人会为您编写代码。目前,post只缺少元素或页面的html代码。这是无效的robot语法:
${first_word}=@{words}[1]
。要进行变量赋值,你必须调用一个关键字。我使用的是RF 3.1.2,并更改了你的建议($words和Set Var),但它不起作用。奇怪的是,我没有收到任何错误消息。另外,当我在一个空的测试用例中使用split时,它也能工作。列表问题不应该是问题所在,因为从左侧获取也不起作用。谢谢你的快速帮助。我真的很感激。编辑:在我的第一次修复尝试中使用了test_字符串。我目前正在使用简单字符串来排除任何与读取相关的错误,因此我的答案不是真正的答案。至少我帮助它改进了一点,但主要问题仍然存在。如果我有其他想法,我会在这里编辑我的答案。@Saccarine:如果您做了这些更改,请更新您的问题以包含更正的代码。
${first_word} =     Set Variable    ${words[1]}