首页 > 解决方案 > 如果为 2 个不同的页面运行关键字 - 始终未检测到第二个元素并且失败

问题描述

正在测试的应用程序具有以下页面流可能性:

- app launch -> PAGE1 (input pin1) -> DONE
or
- app launch -> PAGE1 (input pin1) -> PAGE2 (input pin2) -> DONE
or
- app launch -> PAGE2 (input pin2) -> PAGE1 (input pin1) -> DONE

我已经编写了测试用例来等待元素然后执行不同的关键字。

*** Settings ***
Library    AppiumLibrary
Resource   ../Resources/nine-res-work.robot
Resource   ../Resources/common-mobile.robot

*** Variables ***
${LOGIN-BUTTON-NUMBER-1}   ${ANDROID-WIDGET-TEXT-VIEW}\[@resource-id="${PREFIX-ID}btn_number" and @text="1"]
${LOGIN-BUTTON-NUMBER-2}   ${ANDROID-WIDGET-TEXT-VIEW}\[@resource-id="${PREFIX-ID}btn_number" and @text="2"]

${LOGIN-PAGE1}         ${ANDROID-WIDGET-TEXT-VIEW}\[@resource-id="${PREFIX-ID}headerText" and @text="Enter your PIN."]
${LOGIN-PAGE2}         ${ANDROID-WIDGET-TEXT-VIEW}\[@resource-id="${PREFIX-ID}headerText" and @text="Enter your passcode."]


*** Keywords ***
Input PAGE1 Passcode
    Tap     ${LOGIN-BUTTON-NUMBER-1}

Input PAGE2 Passcode
    Tap     ${LOGIN-BUTTON-NUMBER-2}

*** Test Cases ***
Launch App
    Launch Application
    Sleep   5s

Input Password
    ${PAGE1}=  Run Keyword And Return Status   Page Should Contain Element    ${LOGIN-PAGE1}
    ${PAGE2}=  Run Keyword And Return Status   Page Should Contain Element    ${LOGIN-PAGE2}
    Run Keyword If      ${PAGE1}      Input PAGE1 Passcode
    Sleep   15s
    Run Keyword If      ${PAGE2}      Input PAGE2 Passcode

错误发生在

Page Should Contain Element ${LOGIN-PAGE2} but screenshot is page 1

标签: robotframework

解决方案


在这篇文章中:

${PAGE1}=  Run Keyword And Return Status   Page Should Contain Element    ${LOGIN-PAGE1}
${PAGE2}=  Run Keyword And Return Status   Page Should Contain Element    ${LOGIN-PAGE2}

,您正在检查此 LOGIN-PAGE1,然后立即 - 是 2。
假设它是 1,并且变量设置为 True - 在检查 LOGIN-PAGE2 之前您没有采取任何行动,这会立即发生。阅读您的描述,它可能只是其中之一 - 因此您所说的错误实际上是预期的状态,屏幕截图来自第 1 页。

为了实现这个逻辑:

- app launch -> PAGE1 (input pin1) -> PAGE2 (input pin2) -> DONE
or
- app launch -> PAGE2 (input pin2) -> PAGE1 (input pin1) -> DONE

,这段代码应该做:

Run Keyword If      ${PAGE1} and not ${PAGE2}    Run Keywords    Input PAGE1 Passcode    AND    Sleep    15s    AND    Input PAGE2 Passcode 
  ...    ELSE IF    not ${PAGE1} and ${PAGE2}    Run Keywords    Input PAGE2 Passcode    AND    Sleep    15s    AND    Input PAGE1 Passcode 
  ...    ELSE     Fail    Unexpected state.    # both variables are false, or both - true, which is not by design

推荐阅读