#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; }