Share this page

# 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:

In this topic:

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

- AI text matching for a mobile object

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:

- Java SDK
- Java SDK code samples

https://admhelp.microfocus.com Functional Testing for Developers 8942
Tips to improve your search results... OpenText™ Functional Testing for Developers Help Center OpenText™ Functional Testing for Developers Help 25.2 All View Local Help Center View Online Help Center Version: