AI-based testing code samples (Java SDK)

This topic shows code samples for using AI-based testing in OpenText Functional Testing for Developers Java tests:

Create a shopping account

This example shows how to create an account on the Advantage Online Shopping web site:

Copy code
import com.hp.lft.report.ReportException;
import com.hp.lft.sdk.ai.Position;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import com.hp.lft.sdk.*;
import com.hp.lft.sdk.web.*;
import com.hp.lft.sdk.ai.*;
import com.hp.lft.verifications.*;

import unittesting.*;

.
.
.


    @Test
    public void testCreateAccount() throws GeneralLeanFtException, InterruptedException {
        // Open browser, navigate to website and wait for it to finish loading
        Browser browser = BrowserFactory.launch(BrowserType.CHROME);
        browser.navigate("https://advantageonlineshopping.com/");
        browser.sync();
        Thread.sleep(10000); // necessary if the website UI loads slowly

        // Open sign in form and navigate to account creation form
        browser.describe(AiObject.class, new AiObjectDescription(AiTypes.PROFILE)).click();
        Thread.sleep(10000); // necessary if the website UI loads slowly
        browser.describe(AiObject.class, new AiObjectDescription(AiTypes.TEXT_BLOCK, "CREATE NEW ACCOUNT")).click();
        browser.sync();

        // Enter account details in account creation form
        browser.describe(AiObject.class, new AiObjectDescription(AiTypes.INPUT, "ACCOUNT DETAILS")).sendKeys("TestUsername");
        browser.describe(AiObject.class, new AiObjectDescription(AiTypes.INPUT, "Email")).sendKeys("test_email@default.com");
        browser.describe(AiObject.class, new AiObjectDescription(AiTypes.INPUT, "Password")).sendSecureKeys("TestPass!2");
        browser.describe(AiObject.class, new AiObjectDescription(AiTypes.INPUT, "Confirm password")).sendSecureKeys("TestPass!2");

        // Enable scrolling down so AI can find remaining test objects that are not currently visible
        AiRunSettings.updateAutoScrollSettings((new AiAutoScrollSettings()).enable(ScrollDirection.DOWN, 10));

        // Accept terms and finish creating account
        browser.describe(AiObject.class, new AiObjectDescription(AiTypes.CHECK_BOX, "agree ti LN")).setState(com.hp.lft.sdk.ai.ToggleState.ON);
        browser.describe(AiObject.class, new AiObjectDescription(AiTypes.BUTTON, "REGISTER")).click();
        browser.sync();

        // Search for an item after logging in to the account you created
        browser.describe(AiObject.class, new AiObjectDescription(AiTypes.SEARCH)).search("phone");
        browser.sync();
    }  

Back to top

Place an order and make sure it is registered

This example shows how to log in to the shopping site, place an order and make sure it is registered:

Copy code
@Test
    public void testSignInAndOrder() throws GeneralLeanFtException, ReportException, InterruptedException {
        // Open browser, navigate to website and wait for it to finish loading
        Browser browser = BrowserFactory.launch(BrowserType.CHROME);
        browser.navigate("https://advantageonlineshopping.com/");
        browser.sync();
        Thread.sleep(10000); // the amount of time can be changed

        // Open sign in form and wait for it to load
        browser.describe(AiObject.class, new AiObjectDescription(AiTypes.PROFILE)).click();
        Thread.sleep(10000); // the amount of time can be changed

        // Enter credentials and sign in
        browser.describe(AiObject.class, new AiObjectDescription.Builder()
                .aiClass(AiTypes.INPUT)
                .text("Username")
                .locator(new Position(Direction.FROM_TOP, 0)).build()).sendKeys("TestUsername");
        browser.describe(AiObject.class, new AiObjectDescription(AiTypes.INPUT, "Password")).sendSecureKeys("TestPass!2");
        browser.describe(AiObject.class, new AiObjectDescription(AiTypes.BUTTON, "SIGN IN")).click();

        // Navigate to product page
        browser.navigate("https://advantageonlineshopping.com/#/product/20");
        browser.sync();

        // Add item to cart
        browser.describe(AiObject.class, new AiObjectDescription.Builder()
                .aiClass("plus")
                .locator(new Position(Direction.FROM_TOP, 0)).build()).click();
        browser.describe(AiObject.class, new AiObjectDescription(AiTypes.BUTTON, "ADD TO CART")).click();

        // Navigate to shopping cart
        browser.describe(AiObject.class, new AiObjectDescription(AiTypes.SHOPPING_CART)).click();
        browser.sync();

        // Initiate checkout
        browser.describe(AiObject.class, new AiObjectDescription.Builder()
                .aiClass(AiTypes.BUTTON)
                .text("CHECKOUT ($539.98)")
                .locator(new Position(Direction.FROM_BOTTOM, 0)).build()).click();
        browser.describe(AiObject.class, new AiObjectDescription(AiTypes.BUTTON, "NEXT")).click();
        browser.sync();

        // Enter details
        browser.describe(AiObject.class, new AiObjectDescription(AiTypes.INPUT, "SafePay username")).sendKeys("SafePayUser");
        browser.describe(AiObject.class, new AiObjectDescription(AiTypes.INPUT, "SafePay password")).sendSecureKeys("SafePayPass2");

        // Enable scrolling down so AI can find remaining test objects that are not currently visible
        AiRunSettings.updateAutoScrollSettings((new AiAutoScrollSettings()).enable(ScrollDirection.DOWN, 10));

        // Finish order
        browser.describe(AiObject.class, new AiObjectDescription(AiTypes.BUTTON, "PAY NOW")).click();
        browser.sync();

        // Verify order registered
        com.hp.lft.report.Reporter.startReportingContext("Verify property: exists", com.hp.lft.report.ReportContextInfo.verificationMode());
        Verify.isTrue(browser.describe(AiObject.class, new AiObjectDescription(AiTypes.TEXT_BLOCK, "Thank you for buying with Advantage")).exists(), "Verification", "Verify property: exists");
        com.hp.lft.report.Reporter.endReportingContext();

        browser.close();
    }

Back to top

Configure AI run settings for scrolling and language recognition

This example shows how to customize automatic scrolling and OCR languages for AI identification:

Copy code
 @Test
    public void testAIRunSettings() throws GeneralLeanFtException, ReportException {
        // Open browser and navigate to website
        Browser browser = BrowserFactory.launch(BrowserType.CHROME);
        browser.navigate("https://en.wikipedia.org/wiki/Main_Page");
        browser.sync();

        // Jump to link in lower part of page
        Link completeListLink = browser.describe(Link.class, new LinkDescription.Builder()
                .tagName("A")
                .innerText("Complete list").build());
        completeListLink.highlight();

        // Configure autoscroll settings to enable scrolling up
        AiRunSettings.updateAutoScrollSettings((new AiAutoScrollSettings()).enable(ScrollDirection.UP, 10));

        // Configure OCR settings to enable detection for English, German, French, Hebrew and Traditional Chinese
        AiRunSettings.updateOCRSettings((new AiOCRSettings()).setLanguages(new String[]{"en", "de", "fr", "he", "zht"}));

        // Navigate to French Wikipedia section
        browser.describe(AiObject.class, new AiObjectDescription(AiTypes.TEXT_BLOCK, "Français")).click();
        browser.sync();

        // Jump to text in lower part of page
        WebElement webElement = browser.describe(WebElement.class, new WebElementDescription.Builder()
                .tagName("DIV")
                .innerText("Wikipédia est hébergée par la Wikimedia Foundation, de même que les projets suivants, coordonnés sur le site Méta-Wiki :").build());
        webElement.highlight();

        // Verify text block containing French text exists
        com.hp.lft.report.Reporter.startReportingContext("Verify property: exists", com.hp.lft.report.ReportContextInfo.verificationMode());
        Verify.isTrue(browser.describe(AiObject.class, new AiObjectDescription(AiTypes.TEXT_BLOCK, "Wikipédia est hébergée par la Wikimedia Foundation, de même que les projets suivants, coordonnés sur le site Méta-Wiki :")).exists(), "Verification", "Verify property: exists");
        com.hp.lft.report.Reporter.endReportingContext();

        browser.close();
    }

Back to top

Retrieve values of AI objects

This example shows how to retrieve the value of an input field:

Copy code
@Test

    public void test1() throws GeneralLeanFtException {

        Browser browser = BrowserFactory.launch(BrowserType.CHROME);

        browser.navigate("https://www.advantageonlineshopping.com/#/register");
         AiObjectDescription description = new AiObjectDescription();

        description.setAiClass(AiTypes.INPUT);

        description.setLocator(new Position(Direction.FROM_RIGHT, 0));



        AiObject object = browser.describe(AiObject.class, description);

        object.sendKeys("Hello world!");

        String value = object.getValue();

        System.out.println("Value: " + value);

    }

This example shows how to retrieve the value of a button:

Copy code
 @Test

    public void test2() throws GeneralLeanFtException {

        Browser browser = BrowserFactory.launch(BrowserType.CHROME);

        browser.navigate("https://material.angular.io/components/slide-toggle/overview");



        AiObjectDescription description = new AiObjectDescription();

        description.setAiClass(AiTypes.TOGGLE_BUTTON);

        description.setLocator(new Position(Direction.FROM_RIGHT, 0));



        AiObject object = browser.describe(AiObject.class, description);

        object.click();

        String value = object.getValue();

        System.out.println("Value1: " + value);

    }

Back to top

Enter a text value in a text box

This example shows how to enter text in a text box:

Copy code
 @Test

     public void testAI() throws GeneralLeanFtException {

        Browser browser = BrowserFactory.launch(BrowserType.CHROME);

        browser.navigate("https://advantageonlineshopping.com/#/product/16");

        browser.sync();



        AiObject aiObject =    browser.describe(AiObject.class, new AiObjectDescription(com.hp.lft.sdk.ai.AiTypes.SEARCH));

        aiObject.highlight();

        aiObject.click();

        browser.describe(AiObject.class, new AiObjectDescription(com.hp.lft.sdk.ai.AiTypes.INPUT, "2)")).setText("text");

    }

Back to top

Enable or disable Verify Identification

The examples below demonstrate how to enable or disable the Verify Identification feature and how it affects the recognition of AI-based test objects.

Enable Verify Identification

Copy code
@Test
    public void verifyIdentification_enabled_testPasses() throws GeneralLeanFtException {
        // Enable AI Verify Identification.
        AiRunSettings.setVerifyIdentificationEnabled(true);

        // Launch Chrome and navigate to the test web page.
        Browser browser = BrowserFactory.launch(BrowserType.CHROME);
        browser.navigate("https://advantageonlineshopping.com");

        // Describe the profile AI test object.
        AiObject profile = browser.describe(AiObject.class, new AiObjectDescription(com.hp.lft.sdk.ai.AiTypes.PROFILE));
        
        // Perfom a click operation. Because AI Verify Identification is enabled,
        // the click is performed only when the profile icon is visible and detected.
        profile.click();

        // Describe a test object contained in the pop-up window that is 
        // displayed after clicking the profile icon above. Highlight it 
        // to check that the clicked was performed successfully.
        AiObject profilePopupWindowText = browser.describe(AiObject.class, new AiObjectDescription(com.hp.lft.sdk.ai.AiTypes.TEXT_BLOCK, "SIGN IN WITH FACEBOOK"));
        profilePopupWindowText.highlight();

        // The isVerifyIdentificationEnabled() method can be used to check if AI Verify Identification is enabled.
        Verify.isTrue(AiRunSettings.isVerifyIdentificationEnabled());
    }

Disable Verify Identification

Copy code
@Test
    public void verifyIdentification_disabled_testFails() throws GeneralLeanFtException {
        // Disable AI Verify Identification.
        AiRunSettings.setVerifyIdentificationEnabled(false);

        // Launch Chrome and navigate to the test web page.
        Browser browser = BrowserFactory.launch(BrowserType.CHROME);
        browser.navigate("https://advantageonlineshopping.com");
        
        // Describe the profile AI test object.
        AiObject profile = browser.describe(AiObject.class, new AiObjectDescription(com.hp.lft.sdk.ai.AiTypes.PROFILE));
        
        // Perfom a click operation. Because AI Verify Identification is disabled,
        // the click is performed when the control flow reaches this line, with 
        // the possibility that the page is not fully loaded yet, so the profile test
        // object might not exist yet.
        profile.click();

        // Describe a test object contained in the pop-up window that is 
        // displayed after clicking the profile icon above. Highlight it 
        // to check that the clicked was performed successfully. This
        // fails because the click action above was not performed.
        AiObject profilePopupWindowText = browser.describe(AiObject.class, new AiObjectDescription(com.hp.lft.sdk.ai.AiTypes.TEXT_BLOCK, "SIGN IN WITH FACEBOOK"));
        profilePopupWindowText.highlight();

        // The isVerifyIdentificationEnabled() method can be used to check if AI Verify Identification is enabled.
        Verify.isFalse(AiRunSettings.isVerifyIdentificationEnabled());
    }

Back to top

Enhance identification text recognition

The examples in this section demonstrate ways you can fine tune the text recognition of an object's identification text to achieve an accurate identification: 

Exact text matching for a web object

This example shows how to identify an object in a web application by its text using exact text matching instead of AI matching.

Copy code
@Test
public void webIdentifyByTextWithTextMatchMethod() throws GeneralLeanFtException {
    // Launch a new browser instance and navigate to the relevant web page.
    Browser browser = BrowserFactory.launch(BrowserType.CHROME);
    browser.navigate("https://advantageonlineshopping.com/#/");
    browser.sync();

    // Describe the AiObject by passing a TextWithMatchOptions property that includes the exact match method.
    AiObject object = browser.describe(AiObject.class, new AiObjectDescription.Builder()
        .aiClass(com.hp.lft.sdk.ai.AiTypes.TEXT_BLOCK)
        .textWithMatchOptions(new TextWithMatchOptions("dvantageDemo", MatchMethod.IGNORE_CASE))
        .build());

    // Verify that the object was identified successfully.
    Verify.isTrue(object.exists());
}

AI text matching for a mobile object

This example shows how to identify an object in a mobile application by its text using AI text matching.

Copy code
@Test
public void mobileIdentifyByTextWithTextMatchMethod() throws GeneralLeanFtException {
    // Lock device by its name.
    Device device = MobileLab.lockDeviceByName("MyDevice");

    // Describe the AiObject by passing a TextWithMatchOptions property that includes the AI text match method.
    AiObject object = device.describe(AiObject.class, new AiObjectDescription.Builder()
        .aiClass(com.hp.lft.sdk.ai.AiTypes.TEXT_BLOCK)
        .textWithMatchOptions(new TextWithMatchOptions("ga11ery", MatchMethod.AI))
        .build());

    // Verify that the object was identified successfully.
    Verify.isTrue(object.exists());
}

Back to top

Use a regular expression to identify text

This example shows how to identify a text object that varies in the application by using a regular expression.

Copy code
@Test
public void webIdentifyByTextWithRegularExpression() throws GeneralLeanFtException {
    // Launch a new browser instance and navigate to the relevant web page.
    Browser browser = BrowserFactory.launch(BrowserType.CHROME);
    browser.navigate("<amazon shopping cart url>");
    browser.sync();

    //Describe the AiObject by passing a TextWithMatchOptions property that uses a regular expression to identify the object's text.
    // The object we want to identify is the shopping cart's title, that looks like this: Subtotal (5 items): $233.57
    AiObject aiObject = browser.describe(AiObject.class, new AiObjectDescription.Builder()
        .aiClass(com.hp.lft.sdk.ai.AiTypes.TEXT_BLOCK)
        .textWithMatchOptions(new TextWithMatchOptions(new RegExpProperty("Subtotal \(\d item\): \$[\d.]+"), MatchMethod.AI))
        .build());

    // Verify that the object was identified successfully.
    Verify.isTrue(aiObject.exists());
    
    // Print the text value.
    System.out.println(aiObject.getValue());
}

Back to top

See also: