Standard Windows code samples (JavaScript SDK)

End-to-End: Locate a Button Using Visual Relation Identification (VRI)

The following example uses Visual Relation Identification (VRI) to locate and click buttons in the standard Windows calculator.

var assert = require("assert");
var LFT = require("leanft");
var expect = require("leanft/expect");
var fs = require("fs");
var exec = require('child_process').exec;
var Web = LFT.Web;
var ImageUtils = LFT.ImageUtils;
var browser;

jasmine.DEFAULT_TIMEOUT_INTERVAL = 120000;

describe("VRI examples",function(){
	var calcAUTPath = "C:\\Windows\\System32\\calc.exe";
	var AUT = null;

	beforeAll(function(done){
		LFT.init();
	        LFT.whenDone(done);
	});
                
	beforeEach(function(done){
		LFT.beforeTest();
		AUT = exec(calcAUTPath);
		LFT.whenDone(done);
	});

	it("Basic usage - click on the '1' button", function(done){
		var calculator = LFT.Desktop.$(LFT.StdWin.Window({
			windowClassRegExp:"CalcFrame",
			windowTitleRegExp:"Calculator"
		} ));

		var button2 = calculator.$(LFT.StdWin.Button({
			text:"",
			windowId:132,
			nativeClass:"Button"
		}));

		var button4 = calculator.$(LFT.StdWin.Button({
			text:"",
			windowId:134,
			nativeClass:"Button"
		}));

		var button1 = calculator.$(LFT.StdWin.Button({
			nativeClass:"Button",
			vri:[{anchor: button2, horizontal: LFT.Horizontal.right, hInline: true},{anchor: button4, vertical: LFT.Vertical.above, vInline:true, proximity:LFT.Proximity.closestOnYAxis}],
			}
		));

		button1.click();

		LFT.whenDone(done);
	});

	afterEach(function(done){
		LFT.afterTest();
		if(browser){
			browser.close();
		}
		LFT.whenDone(done);
	});
                
	afterAll(function(done){
		AUT.kill();
		LFT.cleanup();
		LFT.whenDone(done);
	});
});

Back to top

Low level keyboard and mouse operations

This example shows usage of the low level keyboard and mouse operations.

var LFT = require("leanft");
var expect = require("leanft/expect");
var spawn = require('child_process').spawn;
var StdWin = LFT.StdWin;
var Desktop = LFT.Desktop;
var Keyboard = LFT.Keyboard;
var Mouse = LFT.Mouse;

jasmine.DEFAULT_TIMEOUT_INTERVAL = 120000;

describe("Low level examples", function () {
	beforeAll(function(done){
		LFT.init();
		LFT.whenDone(done);
	});

	beforeEach(function(done){
		LFT.beforeTest();


		LFT.whenDone(done);
	});

	// This example shows usage of the low level keyboard and mouse operations
	it("Keyboard and Mouse operations test", function (done) {
		// Following is the program flow:
		// 1. Launch notepad.
		// 2. Move the notepad window to the top left area of the screen
		// 3. Open the Format menu item by low level clicking on the place where the "o" in Format appears
		// 4. Select the Font menu item by low level clicking on the place where the "Font..." menu item should appear
		// 5. Verify the Font dialog appears
		// 6. Close the Font dialog by low level pressing on the ENTER keyboard key
		// 7. Close notepad by low level double clicking the mouse on the area where the system menu icon exists

		// Launch the Notepad application.
		spawn('C:/Windows/System32/notepad.exe');

		// Locate the Notepad window and assign it to a Window object.
		var notepadWindow = Desktop.$(StdWin.Window({
			windowClassRegExp:"Notepad",
			windowTitleRegExp:" Notepad"
		}));

		// Move the notepad window to the top left area of the screen
		notepadWindow.move(0, 0);

		Mouse.click(90, 40); //Click on the area where the "o" in the Format menu item exists using low level mouse operation
		Mouse.click(115, 82); //Click on the area where the "Font..." menu item exists using low level mouse operation

		// Locate the Font dialog box and assign it to a Dialog object.
		var notepadFontDialog = notepadWindow.$(StdWin.Dialog({windowTitleRegExp:"Font"}));

		// Verify that the Font dialog box was opened
		expect(notepadFontDialog.exists(2)).toBeTruthy();

		var ENTER_KEY_SCAN_CODE = 28;
		Keyboard.pressKey(ENTER_KEY_SCAN_CODE); // Close the Font dialog by low level pressing the ENTER key on the keyboard

		Mouse.doubleClick(16, 16); //Double click using the low level mouse operation on the system menu icon area to close the notepad application

		expect(notepadWindow.exists(2)).toBeFalsy();

		LFT.whenDone(done);
	});


	afterEach(function(done){
		LFT.afterTest();
		LFT.whenDone(done);
	});

	afterAll(function(done){
		LFT.cleanup();
		LFT.whenDone(done);
	});
});

Back to top

See also: