robotframework - 如果错误语法无效则运行关键字(,第 1 行)
问题描述
我是这个 run 关键字 if 方法的新手。
我想根据特定页面输入不同的数字。
例如,如果检测到 page1 元素,则输入数字 1,如果检测到 page2,则输入数字 2。
*** Settings ***
Library Selenium2Library
Library Collections
Resource ../Resources/nine-res-work.robot
*** Variables ***
${LOGIN-BUTTON-NUMBER-1} ${ANDROID-WIDGET-TEXT-VIEW}\[@resource-id="com.test.abc.work.cac:id/btn_number" and @text="1"]
${LOGIN-BUTTON-NUMBER-2} ${ANDROID-WIDGET-TEXT-VIEW}\[@resource-id="com.test.abc.work.cac:id/btn_number" and @text="2"]
${LOGIN-BUTTON-NUMBER-3} ${ANDROID-WIDGET-TEXT-VIEW}\[@resource-id="com.test.abc.work.cac:id/btn_number" and @text="3"]
${LOGIN-PAGE-HEARDER-page1} ${ANDROID-WIDGET-TEXT-VIEW}\[@resource-id="com.test.abc.work.cac:id/headerText" and @text="Enter your PIN."]
${LOGIN-PAGE-HEARDER-page2} ${ANDROID-WIDGET-TEXT-VIEW}\[@resource-id="com.test.abc.work.cac:id/headerText" and @text="Enter your passcode."]
*** Keywords ***
Smart Card Login
Run Keyword If ${LOGIN-PAGE-HEARDER-page1} == 'PASS' Tap ${LOGIN-BUTTON-NUMBER-1}
Run Keyword If ${LOGIN-PAGE-HEARDER-page2} == 'PASS' Tap ${LOGIN-BUTTON-NUMBER-2}
*** Test Cases ***
Test 1
Launch Application
Smart Card Login
错误
Test 1 | FAIL |
Evaluating expression '//android.widget.TextView[@resource-id="com.test.abc.work.cac:id/headerText" and @text="Enter your PIN."] == 'PASS'' failed: SyntaxError: invalid syntax (<string>, line 1)
我尝试了另一种方法,这次没有错误,但没有执行点击操作。
*** Variables ***
${LOGIN-BUTTON-NUMBER-1} ${ANDROID-WIDGET-TEXT-VIEW}\[@resource-id="com.test.abc.work.cac:id/btn_number" and @text="1"]
${LOGIN-BUTTON-NUMBER-2} ${ANDROID-WIDGET-TEXT-VIEW}\[@resource-id="com.test.abc.work.cac:id/btn_number" and @text="2"]
${LOGIN-BUTTON-NUMBER-3} ${ANDROID-WIDGET-TEXT-VIEW}\[@resource-id="com.test.abc.work.cac:id/btn_number" and @text="3"]
${LOGIN-PAGE-HEARDER-page1} ${ANDROID-WIDGET-TEXT-VIEW}\[@text="Enter your PIN."]
${LOGIN-PAGE-HEARDER-page2} ${ANDROID-WIDGET-TEXT-VIEW}\[@text="Enter your passcode."]
*** Keywords ***
Input App Passcode
Tap ${LOGIN-BUTTON-NUMBER-2}
*** Test Cases ***
Launch App
Open Nine Folders Application
Sleep 5s
Input Password
${Page1} = Page Should Contain Element ${LOGIN-PAGE-HEARDER-page1}
Run Keyword If '${Page1}' == 'PASS' Input App Passcode
解决方案
您收到语法错误,因为Run Keyword If
需要一个有效的 Python 条件作为第一个参数。您的代码中不是这种情况。在你的情况下,这就是发生的事情,假设${ANDROID-WIDGET-TEXT-VIEW}
只是view
在这个例子中:
Run Keyword If ${LOGIN-PAGE-HEARDER-page1} == 'PASS' Tap ${LOGIN-BUTTON-NUMBER-1}
这是
Run Keyword If view\[@resource-id="com.test.abc.work.cac:id/headerText" and @text="Enter your PIN."] == 'PASS' Tap ${LOGIN-BUTTON-NUMBER-1}
这与以下 Python 代码等效:
if view\[@resource-id="com.test.abc.work.cac:id/headerText" and @text="Enter your PIN."] == 'PASS':
call_tap_function(LOGIN_BUTTON_NUMBER_1)
那里有一堆无效字符,因为字符串没有包含在'
. 所以正确的应该是:
Run Keyword If '${LOGIN-PAGE-HEARDER-page1}' == 'PASS' Tap ${LOGIN-BUTTON-NUMBER-1}
这将转化为:
if 'view\[@resource-id="com.test.abc.work.cac:id/headerText" and @text="Enter your PIN."]' == 'PASS':
call_tap_function(LOGIN_BUTTON_NUMBER_1)
请注意,这永远不会等于PASS
。
至于你的第二种方法,Page Should Contain Element
没有返回值,它会失败或像往常一样继续执行。为了实现你想要的,你应该使用运行关键字和返回状态,如果调用的关键字通过或失败,它将返回。
Input Password
${Page1} = Run Keyword And Return Status Page Should Contain Element ${LOGIN-PAGE-HEARDER-page1}
Run Keyword If ${Page1} Input App Passcode
如果通过了这里${Page1}
变量,也就是如果登录页面标题 page1 在页面上。true
Page Should Contain Element
推荐阅读
- python - 合并重叠段上的两个 Pandas 数据帧
- javascript - Javascript 中的控制流和迭代
- angular - 如何在 Angular 6+(国家 <--> 城市)中创建相互级联下拉列表
- react-native - Expo web AuthSession错误:TypeError:无法读取未定义的属性“startsWith”
- c++ - 向量上的线性搜索
- pyspark - Spark Structured Streaming 中的多重聚合和 Distinct 函数
- firefox - 将“Chrome 跟踪器”结果转换为 Firefox 分析器格式
- jenkins - 如何在下游推广构建中使用 Jenkins 凭证?
- django - 我如何创建一个显示所有用户发布给用户和其他用户的个人资料页面
- bash - 使用带引号的文件名列表作为输入并行调用 shell 函数