托斯卡谜题 73589 用 RBFW 解决。 (失败:SyntaxError:扫描字符串文字时 EOL (<string>)

Posted

技术标签:

【中文标题】托斯卡谜题 73589 用 RBFW 解决。 (失败:SyntaxError:扫描字符串文字时 EOL (<string>)【英文标题】:Tosca puzzle 73589 solved with RBFW. (failed: SyntaxError: EOL while scanning string literal (<string>) 【发布时间】:2021-11-17 12:37:04 【问题描述】:

为了帮助测试社区了解测试工具的差异,我尝试制作一个系列,就像 Flur-Funk 对 Tosca 所做的那样。 (我在项目中使用了 x 次 Tosca)

所以现在我解决了同样的难题,但后来使用了 Robot Framework。 (我稍后会把它们放到Youtube上)

所以我遇到了这个(困难的)难题: 这是我到目前为止得到的:

    *** Settings ***
# https://robotframework-browser.org/
Library   Browser
Library   DateTime
Library    Collections
Library    String
#Library    SeleniumLibrary
#Library   SeleniumLibrary

# https://robotframework.org/robotframework/latest/libraries/DateTime.html
# pip install DateTime

*** Variables ***
@VALUES   | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |

*** Test Cases ***
Example Test 73589
    Browser.Open Browser      https://obstaclecourse.tricentis.com/Obstacles/73589
    $rijmetgetallen=  GET TEXT    id=array
    LOG TO CONSOLE    $rijmetgetallen
    $stripped=  STRIP STRING     $rijmetgetallen  characters=[,\'n]
    $converted=  CONVERT TO LIST  $stripped
    FOR $var  IN  $stripped
        Run Keyword If  '$var' == '1' Continue For Loop
        Click  id=b1
        LOG TO CONSOLE    $var
        # ELSE  Click  id=tech  
    END
    Click  id=button1
    Click  id=button2
    Get Text         xpath=//body    *=   You solved this automation problem.

# used resources:
# https://www.tutorialspoint.com/robot_framework/robot_framework_working_with_variables.htm

导致日志:

Example Test 73589                                                    3
2
5
1
9
4
8
6
7
| FAIL |
Evaluating expression ''3
2
5
1
9
4
8
6
7' == '1'' failed: SyntaxError: EOL while scanning string literal (<string>, line 1)
------------------------------------------------------------------------------
0012 Test 73589                                                       | FAIL |

你会如何解决这个问题? 如何克服错误?

Tosca 工具的解决方案可以在这里找到:https://www.youtube.com/watch?v=BcsuH8Q1x60

【问题讨论】:

$converted 不是您期望的列表,Convert To List 并没有神奇地将您的数字字符串分解为每个成员都是一个单独的数字的列表。提示 - 为此使用 Split String。你解谜的算法不对;你的循环做什么 - 它运行的次数与数字一样多,然后单击交换(大概,如果 id=b1 是这样) - 如果当前数字不是 1;并停止。这不是冒泡排序(它使用内部循环),也不是如何解决这个 html 页面(使用一个足够高的循环和 2 个条件检查)。最后Get Text 的语法是错误的。 我对@9​​87654328@ 的评论进行了更正,没有意识到您正在使用在关键字中包含断言的浏览器库。 【参考方案1】:

这是一个解决方案 - 不要忘记在视频中感谢我;)

它使用 SeleniumLibrary、xpath 和 css 选择器、FOR 和 IF 块以及直接变量访问($var$var)。

Tosca 73589
    Open Browser        https://obstaclecourse.tricentis.com/Obstacles/73589
    Wait Until Element Is Visible    xpath://div[@class="num"]    # so the page is fully loaded 
    $total numbers=   Get Element Count   xpath://div[@class="num"]
    $iterations=      Evaluate        $total numbers * $total numbers

    $done=    Set Variable    $False
    FOR     $i    IN RANGE    $iterations

        $n1=      Get Text    css:div.bubble > div:nth-child(1)
        $n2=      Get Text    css:div.bubble > div:nth-child(2)

        IF      int($n1) > int($n2)
            Click Element       xpath://button[@id="button1"]
            Wait Until Element Does Not Contain         css:div.bubble > div:nth-child(1)       $n1       # to be sure the UI has redrawn the numbers
            # The list is going to change to ordered only after a swap,
            # just advancing won't ever solve it; thus check for the "done" text value only here.
            $text solved=     Get Text        css:a#sample
            $done=    Run Keyword And Return Status       Should Not Be Equal As Strings      $text solved      KEEP SORTING
        END

        IF  not $done
            Click Element       xpath://button[@id="button2"]
        ELSE
            Exit For Loop
        END
    END
    Run Keyword If      not $done     Fail    The list was not sorted for the maximum iterations!

    [Teardown]      Close Browser

有一个极端情况会导致它无法工作 - 把这个留给你;)

【讨论】:

非常感谢托多!你真好!对于 20 个谜题,我有一个可行的解决方案,有些非常优雅漂亮,有些则可以完成工作,仅此而已。是的,我一定会提到你!我想展示的最重要的事情之一是,在某些情况下,Tosca 非常快并且很容易完成拼图,但在其他情况下,RobotFrameWork 更直接或更快速,这正是我想要指出的出来。 测试了解决方案:这是极端情况吗?:StaleElementReferenceException:消息: 的元素引用已过时;要么元素不再附加到 DOM,它不在当前框架上下文中,要么文档已被刷新 不,不仅仅是@LTL - 这是因为页面触发“加载”,但元素仍然被绘制。上面的“等到”将清除错误。我暗示的极端情况是 - 如果在页面登陆时列表已经订购会发生什么? ;)

以上是关于托斯卡谜题 73589 用 RBFW 解决。 (失败:SyntaxError:扫描字符串文字时 EOL (<string>)的主要内容,如果未能解决你的问题,请参考以下文章

编程谜题:提升你解决问题的训练场

使用 clpfd Prolog 库解决斑马谜题(又名爱因斯坦谜题)

用 Python 解决难题

Spotify 谜题:避免异常处理错误

没有循环的帕斯卡三角形?

用Swift的函数式编程解决硬币问题