RanorexPath属性不匹配

时间:2017-06-26 15:36:27

标签: xpath ranorex

问题:属性与指定值不匹配:

Validation Failure: Attribute 'Text' of element for item 'CommonRepository.MyApp.InfoTab.StatusWaitingForNewRound' does not match the specified value (actual='Status: Waiting for start', expected='Status: Waiting for a new round').

此回购项目的路径:.//text[@automationid='textGameStatus' and @text='Status: Waiting for a new round' or @text='Status: Waiting for start']

如你所见,我正在使用“或”,因此我希望它能接受其中一种或另一种,如果不存在,那么它应该失败,但实际上它不会这样。

我在这里做错了什么?谢谢。

2 个答案:

答案 0 :(得分:0)

Ranorex路径只搜索应用程序中的元素。 Ranorex找到该元素,以防它具有文本值"状态:等待新一轮"或者"状态:等待开始"。在验证步骤中,您将根据特定值进行验证(状态:等待新一轮)。在我看来,等待开始并等待新一轮是两种不同的情况。

答案 1 :(得分:0)

如果您认为'状态:等待'是正确的值,为什么不使用带有(>)符号的开头:

//text[@automationid='textGameStatus' and @text~'Status: Waiting for.+']

或者您可以使用正则表达式(〜)符号:

#include "stdafx.h"
#include <Windows.h>
#include <cstdio>
#include <string>


using namespace std;

void NewProcess(LPWSTR cmd) {

    printf("Argv Inside funcion: %s\n", cmd[1]);
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    ZeroMemory(&pi, sizeof(pi));

    if (!CreateProcess(NULL, 
        cmd,      
        NULL,  
        NULL,  
        FALSE,    
        0,             
        NULL,      
        NULL,      
        &si,         
        &pi)          
        )
    {
        printf("CreateProcess failed (%d).\n", GetLastError());
        return;
    }

    printf("Process ID: %d Started", pi.dwProcessId);

    WaitForSingleObject(pi.hProcess, INFINITE);
    printf("\nProcess ID: %d Terminated!", pi.dwProcessId);


    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
}

void main(int argc, TCHAR *argv[])
{   
    char text[] = "calc.exe";
    wchar_t wtext[20];
    mbstowcs(wtext, text, strlen(text) + 1);
    LPWSTR ptr = wtext;

    NewProcess(ptr); 
    getchar();
}

或者您可以使用// text [@ automationid ='textGameStatus']创建一个repo项并读取其@text属性,然后将其与预定义的字符串列表(或用户代码中的正则表达式)进行比较。

不要忘记使用间谍验证您的回购项目是否适用于所有受支持的案例。

如果您正确映射了repo项目,它应该按预期工作。

希望它有所帮助!