托斯卡谜题 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
的语法是错误的。
我对@987654328@ 的评论进行了更正,没有意识到您正在使用在关键字中包含断言的浏览器库。
【参考方案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>)的主要内容,如果未能解决你的问题,请参考以下文章