首页 > 解决方案 > 如果错误语法无效则运行关键字(,第 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

标签: robotframework

解决方案


您收到语法错误,因为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 在页面上。truePage Should Contain Element


推荐阅读