|
Example Program #07
This program illustrates the eValid EPI interface
by implementing PARTIALLY (top and bottom actions only), entirely in CPP, the script-based
Gmail Example which is done entirely with index commands.
The program invocation would be as follows (there are no arguments): example07.exe
Program Source
Here is the CPP for the EPI program for this example.
The EPI program generates the complete event log, similar to other
EPI examples in this set.
#include "stdafx.h" #include "epi.h" using namespace std; void TraceEvalidLog(IEvalid * p) { if (p == NULL) return; IEvalidLogCollection * pColl; if (SUCCEEDED(p->get_LastPlaybackLog(&pColl))) { long numItems; pColl->get_length(&numItems); for(long i = 0; i < numItems; ++i) { IEvalidLog * pLog; pColl->item(i, &pLog); long seq, cmd, line, a, f, t; CComBSTR date, time, prj, grp, tst, stat, msg; pLog->get_accumTime(&a); pLog->get_cmdNum(&cmd); pLog->get_date(&date); pLog->get_fineTime(&f); pLog->get_groupName(&grp); pLog->get_lineNum(&line); pLog->get_message(&msg); pLog->get_projectName(&prj); pLog->get_seqNum(&seq); pLog->get_status(&stat); pLog->get_testName(&tst); pLog->get_time(&time); pLog->get_totalCmdTime(&t); pLog->Release(); cout << CString(date) << " " << CString(time) << "\t" << seq << "\t" << cmd << "\t" << line << "\t" << CString(prj) << "\t" << CString(grp) << "\t" << CString(tst) << "\t" << CString(stat) << "\t" << a << "\t" << f << "\t" << t << "\t" << CString(msg) << endl; } pColl->Release(); } } int main() { long index; ::CoInitialize(NULL); IEvalid * pEvalid = NULL; HRESULT hr = CoCreateInstance(CLSID_Evalid, NULL, CLSCTX_INPROC_SERVER, IID_IEvalid, (void**)&pEvalid); if (SUCCEEDED(hr)) { // ---------------------------------------------------------------------------- // Step 1: Start at www.google.com, then navigate to gmail and log in... // Natural timings remain in script here. The password is encrypted. pEvalid->InitLink(CComBSTR("http://www.google.com")); TraceEvalidLog(pEvalid); pEvalid->Wait(5016); TraceEvalidLog(pEvalid); pEvalid->IndexSet(0); TraceEvalidLog(pEvalid); pEvalid->IndexFindElement(0, CComBSTR("DOWN"), CComBSTR("innerText"), CComBSTR("Gmail"), CComBSTR(""), &index); TraceEvalidLog(pEvalid); pEvalid->IndexMove(+2); TraceEvalidLog(pEvalid); pEvalid->IndexFollowLink(0, NULL); TraceEvalidLog(pEvalid); pEvalid->Wait(2079); TraceEvalidLog(pEvalid); pEvalid->SyncOnText( 0, CComBSTR("Username"), CComBSTR("")); TraceEvalidLog(pEvalid); pEvalid->Wait(2516); TraceEvalidLog(pEvalid); pEvalid->IndexSet(0); TraceEvalidLog(pEvalid); pEvalid->IndexFindElement(0, CComBSTR("DOWN"), CComBSTR("id"), CComBSTR("Email"), CComBSTR(""), &index); TraceEvalidLog(pEvalid); pEvalid->IndexInputValue(0, CComBSTR("TEXT"), CComBSTR("evalidinc"), CComBSTR(""), NULL); TraceEvalidLog(pEvalid); pEvalid->Wait(2542); TraceEvalidLog(pEvalid); pEvalid->IndexFindElement(0, CComBSTR("DOWN"), CComBSTR("id"), CComBSTR("Passwd"), CComBSTR(""), &index); TraceEvalidLog(pEvalid); pEvalid->IndexInputValue(0, CComBSTR("TEXT"), CComBSTR("«p°ã®‰»"), CComBSTR(""), NULL); TraceEvalidLog(pEvalid); pEvalid->Wait(171); TraceEvalidLog(pEvalid); pEvalid->IndexFindElement(0, CComBSTR("DOWN"), CComBSTR("name"), CComBSTR("signIn"), CComBSTR(""), &index); TraceEvalidLog(pEvalid); pEvalid->IndexSubmitClick(0, CComBSTR("")); TraceEvalidLog(pEvalid); pEvalid->Wait(213); TraceEvalidLog(pEvalid); pEvalid->Reload(0); TraceEvalidLog(pEvalid); pEvalid->SyncOnText( 0, CComBSTR("Sign out"), CComBSTR("number:3")); TraceEvalidLog(pEvalid); pEvalid->Wait(2099); TraceEvalidLog(pEvalid); pEvalid->SyncOnText( 0, CComBSTR("Set status here"), CComBSTR("number:3")); TraceEvalidLog(pEvalid); pEvalid->Wait(1814); TraceEvalidLog(pEvalid); // --------------------------------------------------------------------- // Step 2: Sign out and wait (synchronize) until you're ready to sign // in again... pEvalid->Wait(3275); TraceEvalidLog(pEvalid); pEvalid->FollowLink(0, 99, CComBSTR("evalidinc@gmail.com"), CComBSTR("https://google.com/profiles"), CComBSTR("number:3")); TraceEvalidLog(pEvalid); pEvalid->Wait(6720); TraceEvalidLog(pEvalid); pEvalid->FollowLink(0, 123, CComBSTR("Sign out"), CComBSTR("https://mail.google.com/mail/?logout&hl=en"), CComBSTR("number:3")); TraceEvalidLog(pEvalid); pEvalid->Wait(1872); TraceEvalidLog(pEvalid); pEvalid->SyncOnText( 0, CComBSTR("Sign in"), CComBSTR("")); TraceEvalidLog(pEvalid); // Note: Playback involves adaptive playback, so there will be Messages in the // event log and you probably will see a "Yellow screen", unless the GMAIL // application itself generated a server side internal navigation error to document... // Script ends. pEvalid->ExitNow(); // ---------------------------------------------------------------------------- pEvalid->Release(); } else if (hr == E_ACCESSDENIED) cout << "Missing a valid EPI license key!" << endl; else cout << "Unable to load EPI!" << endl; ::CoUninitialize(); return 0; } |
Resources
Corresponding eValid Script
Here is the corresponding eValid recorded script.
# (c) Copyright 2012 by Software Research, Inc. # Recording made on: Microsoft Windows XP # # NOTE: This script design to only playback successfully with IE 7.0... ProjectID "FunctionalTests" GroupID "Experimental" TestID "example07" LogID "AUTO" ScreenSize 1280 1024 FontSize 0 DeleteCache DeleteCookies DeleteSession # --------------------------------------------------------------------- # Step 1: Start at www.google.com, then navigate to gmail and log in... # Natural timings remain in script here. The password is encrypted. InitLink "http://www.google.com/" Wait 5016 IndexSet 0 IndexFindElement 0 DOWN "innerText" "Gmail" "" IndexMove +2 IndexFollowLink 0 "" Wait 2079 SyncOnText 0 "Username" "" Wait 2516 IndexSet 0 IndexFindElement 0 DOWN "id" "Email" "" IndexInputValue 0 "TEXT" "evalidinc" "" "" Wait 2542 IndexFindElement 0 DOWN "id" "Passwd" "" IndexInputValue 0 "TEXT" "?p?㮉»" "" "" Wait 171 IndexFindElement 0 DOWN "name" "signIn" "" IndexSubmitClick 0 "" Wait 2213 SyncOnText 0 "Sign out" "number:3" Wait 2099 SyncOnText 0 "Set status here" "number:3" Wait 1814 # --------------------------------------------------------------------- # Step 2: Sign out and wait (synchronize) until you're ready to sign # in again... Wait 3275 FollowLink 0 99 "evalidinc@gmail.com" "https://google.com/profiles" "number:3" Wait 6720 FollowLink 0 123 "Sign out" "https://mail.google.com/mail/?logout&hl=en" "number:3" Wait 1872 SyncOnText 0 "Sign in" "" # Note: Playback involves adaptive playback, so there will be Messages in the # event log and you probably will see a "Yellow screen", unless the GMAIL # application itself generated a server side internal navigation error to # document... # Script ends. |