From e2288af5d614d6803348afd112cb0846aacedc6f Mon Sep 17 00:00:00 2001 From: Bhuwan Kashyap Date: Mon, 4 May 2026 12:11:44 +0530 Subject: [PATCH] added test files for authoring --- junit-4/android/browserstack.yml | 8 +- junit-4/android/log/automation.log | 0 .../android/log/browserstack-javaagent.log | 98 +++++++++++++++++++ .../com/browserstack/AIAuthoringTest.java | 19 ++++ junit-4/ios/browserstack.yml | 2 +- .../com/browserstack/AIAuthoringTest.java | 19 ++++ junit-5/android/browserstack.yml | 74 +------------- junit-5/android/log/automation.log | 0 .../android/log/browserstack-javaagent.log | 48 +++++++++ .../com/browserstack/AIAuthoringTest.java | 40 ++++++++ junit-5/ios/browserstack.yml | 2 +- .../com/browserstack/AIAuthoringTest.java | 19 ++++ 12 files changed, 254 insertions(+), 75 deletions(-) create mode 100644 junit-4/android/log/automation.log create mode 100644 junit-4/android/log/browserstack-javaagent.log create mode 100644 junit-4/android/src/test/java/com/browserstack/AIAuthoringTest.java create mode 100644 junit-4/ios/src/test/java/com/browserstack/AIAuthoringTest.java create mode 100644 junit-5/android/log/automation.log create mode 100644 junit-5/android/log/browserstack-javaagent.log create mode 100644 junit-5/android/src/test/java/com/browserstack/AIAuthoringTest.java create mode 100644 junit-5/ios/src/test/java/com/browserstack/AIAuthoringTest.java diff --git a/junit-4/android/browserstack.yml b/junit-4/android/browserstack.yml index 6fea125..ac8608e 100644 --- a/junit-4/android/browserstack.yml +++ b/junit-4/android/browserstack.yml @@ -3,8 +3,8 @@ # ============================= # Add your BrowserStack userName and acccessKey here or set BROWSERSTACK_USERNAME and # BROWSERSTACK_ACCESS_KEY as env variables -userName: BROWSERSTACK_USERNAME -accessKey: BROWSERSTACK_ACCESS_KEY +userName: bhuwankashyap_vKETCb +accessKey: EduWT5j69HyrJAyBnxMz # ====================== # BrowserStack Reporting @@ -23,10 +23,10 @@ buildIdentifier: '#${BUILD_NUMBER}' # Supports strings along with either/both ${ # Set `framework` of your test suite. Example, `testng`, `cucumber`, `cucumber-testng` # This property is needed to send test context to BrowserStack (test name, status) framework: junit4 - +aiAuthoring: true source: junit4:appium-sample-sdk:v1.1 -app: ./WikipediaSample.apk +app: bs://e062a41d22626330df16b78ddf43fb319f078be2 #app: ./LocalSample.apk #For running local tests # ======================================= diff --git a/junit-4/android/log/automation.log b/junit-4/android/log/automation.log new file mode 100644 index 0000000..e69de29 diff --git a/junit-4/android/log/browserstack-javaagent.log b/junit-4/android/log/browserstack-javaagent.log new file mode 100644 index 0000000..dd81dc4 --- /dev/null +++ b/junit-4/android/log/browserstack-javaagent.log @@ -0,0 +1,98 @@ +11:09:40.131 [main] DEBUG c.browserstack.BrowserStackJavaAgent - [AGENT] Found agent via ProtectionDomain: /Users/bhuwankashyap/.m2/repository/com/browserstack/browserstack-java-sdk/1.56.6/browserstack-java-sdk-1.56.6.jar +11:09:40.132 [main] INFO c.browserstack.BrowserStackJavaAgent - [AGENT] Stored agent path for child processes: /Users/bhuwankashyap/.m2/repository/com/browserstack/browserstack-java-sdk/1.56.6/browserstack-java-sdk-1.56.6.jar +11:09:40.133 [main] DEBUG c.browserstack.BrowserStackJavaAgent - Extracted CLI argument from system : null +11:09:40.136 [main] INFO c.browserstack.BrowserStackJavaAgent - Selenium version detected - 4.4.0 +11:09:40.136 [main] INFO c.browserstack.BrowserStackJavaAgent - Appium version detected - 8.1.1 +11:09:40.215 [main] DEBUG c.b.config.BrowserStackConfig - Cli Config passed - {basedir=/Users/bhuwankashyap/Documents/junit-appium-app-browserstack/junit-4/android, test=AIAuthoringTest, user.dir=/Users/bhuwankashyap/Documents/junit-appium-app-browserstack/junit-4/android, localrepository=/Users/bhuwankashyap/.m2/repository} +11:09:40.330 [main] DEBUG c.b.logger.BrowserstackLoggerFactory - Log Level set to INFO for logger ROOT +11:09:40.330 [main] DEBUG c.b.logger.BrowserstackLoggerFactory - Log Level set to TRACE for logger browserStackAutomationFileDebugger +11:09:40.330 [main] DEBUG c.b.logger.BrowserstackLoggerFactory - Log Level set to INFO for logger browserStackFileDebugger +11:09:40.330 [main] DEBUG c.b.logger.BrowserstackLoggerFactory - Log Level set to INFO for logger com +11:09:40.340 [main] INFO c.browserstack.BrowserStackJavaAgent - Using app: [-bs://e062a41d22626330df16b78ddf43fb319f078be2] +11:09:40.341 [main] INFO c.browserstack.BrowserStackJavaAgent - Framework set to junit4 +11:09:40.341 [main] INFO c.browserstack.BrowserStackJavaAgent - SDK run started with id: 3f4d1235-b620-4737-b9fe-30b1c126373e +11:09:40.341 [main] INFO c.b.config.BrowserStackConfig - INFO +11:09:46.401 [main] INFO com.browserstack.v2.SdkCLI - Disabling Cli for framework=junit4 +11:09:47.128 [main] INFO c.browserstack.BrowserStackJavaAgent - Project and debug logs are captured by default. To disable, set disableAutoCaptureLogs: true in config. +11:09:48.141 [main] INFO com.browserstack.testOps.Listener - Testhub started with id: x5oie7wiksdurs5oxe3l0v83pv5jplzfyuy8zrqd +11:09:48.141 [main] INFO c.b.config.BrowserStackConfig - INFO +11:09:48.141 [main] INFO c.browserstack.BrowserStackJavaAgent - Starting BrowserStack Local...... +11:09:58.330 [main] INFO com.browserstack.LocalFactory - BrowserStack Local Started Successfully. +11:09:58.690 [main] DEBUG c.browserstack.BrowserStackJavaAgent - [AGENT] Found agent via ProtectionDomain: /Users/bhuwankashyap/.m2/repository/com/browserstack/browserstack-java-sdk/1.56.6/browserstack-java-sdk-1.56.6.jar +11:09:58.691 [main] INFO c.browserstack.BrowserStackJavaAgent - [AGENT] Stored agent path for child processes: /Users/bhuwankashyap/.m2/repository/com/browserstack/browserstack-java-sdk/1.56.6/browserstack-java-sdk-1.56.6.jar +11:09:58.692 [main] DEBUG c.browserstack.BrowserStackJavaAgent - Extracted CLI argument from system : null +11:09:58.714 [main] DEBUG c.browserstack.BrowserStackJavaAgent - [AGENT] Found agent via ProtectionDomain: /Users/bhuwankashyap/.m2/repository/com/browserstack/browserstack-java-sdk/1.56.6/browserstack-java-sdk-1.56.6.jar +11:09:58.716 [main] INFO c.browserstack.BrowserStackJavaAgent - [AGENT] Stored agent path for child processes: /Users/bhuwankashyap/.m2/repository/com/browserstack/browserstack-java-sdk/1.56.6/browserstack-java-sdk-1.56.6.jar +11:09:58.716 [main] DEBUG c.browserstack.BrowserStackJavaAgent - Extracted CLI argument from system : null +11:09:58.715 [main] DEBUG c.browserstack.BrowserStackJavaAgent - [AGENT] Found agent via ProtectionDomain: /Users/bhuwankashyap/.m2/repository/com/browserstack/browserstack-java-sdk/1.56.6/browserstack-java-sdk-1.56.6.jar +11:09:58.716 [main] INFO c.browserstack.BrowserStackJavaAgent - [AGENT] Stored agent path for child processes: /Users/bhuwankashyap/.m2/repository/com/browserstack/browserstack-java-sdk/1.56.6/browserstack-java-sdk-1.56.6.jar +11:09:58.717 [main] DEBUG c.browserstack.BrowserStackJavaAgent - Extracted CLI argument from system : null +11:09:58.777 [main] DEBUG c.b.config.BrowserStackConfig - Cli Config passed - {basedir=/Users/bhuwankashyap/Documents/junit-appium-app-browserstack/junit-4/android, test=AIAuthoringTest, user.dir=/Users/bhuwankashyap/Documents/junit-appium-app-browserstack/junit-4/android, localrepository=/Users/bhuwankashyap/.m2/repository} +11:09:58.806 [main] DEBUG c.b.config.BrowserStackConfig - Cli Config passed - {basedir=/Users/bhuwankashyap/Documents/junit-appium-app-browserstack/junit-4/android, test=AIAuthoringTest, user.dir=/Users/bhuwankashyap/Documents/junit-appium-app-browserstack/junit-4/android, localrepository=/Users/bhuwankashyap/.m2/repository} +11:09:58.808 [main] DEBUG c.b.config.BrowserStackConfig - Cli Config passed - {basedir=/Users/bhuwankashyap/Documents/junit-appium-app-browserstack/junit-4/android, test=AIAuthoringTest, user.dir=/Users/bhuwankashyap/Documents/junit-appium-app-browserstack/junit-4/android, localrepository=/Users/bhuwankashyap/.m2/repository} +11:09:58.924 [main] DEBUG c.b.logger.BrowserstackLoggerFactory - Log Level set to INFO for logger ROOT +11:09:58.924 [main] DEBUG c.b.logger.BrowserstackLoggerFactory - Log Level set to TRACE for logger browserStackAutomationFileDebugger +11:09:58.924 [main] DEBUG c.b.logger.BrowserstackLoggerFactory - Log Level set to INFO for logger browserStackFileDebugger +11:09:58.924 [main] DEBUG c.b.logger.BrowserstackLoggerFactory - Log Level set to INFO for logger com +11:09:58.925 [main] INFO c.browserstack.BrowserStackJavaAgent - SDK run started with id: ff219903-caaa-4cbd-9475-5064fb15f757 +11:09:58.925 [main] INFO c.b.config.BrowserStackConfig - INFO +11:09:58.942 [main] DEBUG c.b.logger.BrowserstackLoggerFactory - Log Level set to INFO for logger ROOT +11:09:58.943 [main] DEBUG c.b.logger.BrowserstackLoggerFactory - Log Level set to TRACE for logger browserStackAutomationFileDebugger +11:09:58.943 [main] DEBUG c.b.logger.BrowserstackLoggerFactory - Log Level set to INFO for logger browserStackFileDebugger +11:09:58.943 [main] DEBUG c.b.logger.BrowserstackLoggerFactory - Log Level set to INFO for logger com +11:09:58.943 [main] INFO c.browserstack.BrowserStackJavaAgent - SDK run started with id: fb4269ef-849b-4bc9-89fe-0220f2edc6ce +11:09:58.943 [main] INFO c.b.config.BrowserStackConfig - INFO +11:09:58.944 [main] DEBUG c.b.logger.BrowserstackLoggerFactory - Log Level set to INFO for logger ROOT +11:09:58.945 [main] DEBUG c.b.logger.BrowserstackLoggerFactory - Log Level set to TRACE for logger browserStackAutomationFileDebugger +11:09:58.945 [main] DEBUG c.b.logger.BrowserstackLoggerFactory - Log Level set to INFO for logger browserStackFileDebugger +11:09:58.945 [main] DEBUG c.b.logger.BrowserstackLoggerFactory - Log Level set to INFO for logger com +11:09:58.947 [main] INFO c.browserstack.BrowserStackJavaAgent - SDK run started with id: 904e8cd7-2c56-42a4-86ea-8bdf8c87b58d +11:09:58.947 [main] INFO c.b.config.BrowserStackConfig - INFO +11:10:04.493 [main] INFO com.browserstack.v2.SdkCLI - Disabling Cli for framework=junit4 +11:10:04.493 [main] INFO com.browserstack.v2.SdkCLI - Disabling Cli for framework=junit4 +11:10:04.500 [main] INFO com.browserstack.v2.SdkCLI - Disabling Cli for framework=junit4 +11:10:04.535 [main] INFO c.browserstack.BrowserStackJavaAgent - Project and debug logs are captured by default. To disable, set disableAutoCaptureLogs: true in config. +11:10:04.544 [main] INFO c.browserstack.BrowserStackJavaAgent - Project and debug logs are captured by default. To disable, set disableAutoCaptureLogs: true in config. +11:10:04.555 [main] INFO c.browserstack.BrowserStackJavaAgent - Project and debug logs are captured by default. To disable, set disableAutoCaptureLogs: true in config. +11:10:04.940 [main] DEBUG c.browserstack.utils.UtilityMethods - [findFileMatcher] Current Path is :: /Users/bhuwankashyap/Documents/junit-appium-app-browserstack/junit-4/android, TestClass :: com/browserstack/AIAuthoringTest +11:10:04.974 [main] DEBUG c.browserstack.utils.UtilityMethods - [findFileMatcher] Current Path is :: /Users/bhuwankashyap/Documents/junit-appium-app-browserstack/junit-4/android, TestClass :: com/browserstack/AIAuthoringTest +11:10:04.986 [main] DEBUG c.browserstack.utils.UtilityMethods - [findFileMatcher] Current Path is :: /Users/bhuwankashyap/Documents/junit-appium-app-browserstack/junit-4/android, TestClass :: com/browserstack/AIAuthoringTest +11:10:04.993 [main] DEBUG c.browserstack.utils.UtilityMethods - [findFileMatcher] Current Path is :: /Users/bhuwankashyap/Documents/junit-appium-app-browserstack/junit-4/android, TestClass :: com/browserstack/BrowserStackJUnitTest +11:10:05.040 [main] DEBUG c.browserstack.utils.UtilityMethods - [findFileMatcher] Current Path is :: /Users/bhuwankashyap/Documents/junit-appium-app-browserstack/junit-4/android, TestClass :: com/browserstack/BrowserStackJUnitTest +11:10:05.043 [main] DEBUG c.browserstack.utils.UtilityMethods - [findFileMatcher] Current Path is :: /Users/bhuwankashyap/Documents/junit-appium-app-browserstack/junit-4/android, TestClass :: com/browserstack/BrowserStackJUnitTest +11:10:05.397 [main] DEBUG c.browserstack.utils.UtilityMethods - [Patch]: SDK enabled, patching remote server +11:10:05.400 [main] DEBUG c.browserstack.utils.UtilityMethods - [Patch]: SDK enabled, patching remote server +11:10:05.403 [main] DEBUG c.browserstack.utils.UtilityMethods - [Patch]: SDK enabled, patching remote server +11:10:05.410 [main] DEBUG c.browserstack.utils.UtilityMethods - [Patch]: SDK enabled, patching remote server +11:10:05.411 [main] DEBUG c.browserstack.utils.UtilityMethods - [Patch]: SDK enabled, patching remote server +11:10:05.413 [main] DEBUG c.browserstack.utils.UtilityMethods - [Patch]: SDK enabled, patching remote server +11:11:41.992 [main] DEBUG c.browserstack.utils.UtilityMethods - [findFileMatcher] Current Path is :: /Users/bhuwankashyap/Documents/junit-appium-app-browserstack/junit-4/android, TestClass :: com/browserstack/BrowserStackJUnitTest +11:11:43.326 [main] INFO c.b.utils.SeleniumMethodUtils - Session ID status marking: dc50beb54be3f70458bcda08f2c8345c4244096d +11:11:43.326 [main] INFO c.b.utils.SeleniumMethodUtils - Session ID status marking: dc50beb54be3f70458bcda08f2c8345c4244096d +11:11:44.069 [Thread-0] DEBUG c.browserstack.utils.UtilityMethods - quitAllWebDriversForCLIFlow: Starting cleanup process +11:11:44.070 [Thread-0] DEBUG c.browserstack.utils.UtilityMethods - quitAllWebDriversForCLIFlow: No automation framework instances found to quit for CLI flow +11:12:00.567 [main] DEBUG c.browserstack.utils.UtilityMethods - [findFileMatcher] Current Path is :: /Users/bhuwankashyap/Documents/junit-appium-app-browserstack/junit-4/android, TestClass :: com/browserstack/BrowserStackJUnitTest +11:12:02.333 [main] INFO c.b.utils.SeleniumMethodUtils - Session ID status marking: a6cb67f354c9eacc27c99e79563049c464e3bb35 +11:12:02.333 [main] INFO c.b.utils.SeleniumMethodUtils - Session ID status marking: a6cb67f354c9eacc27c99e79563049c464e3bb35 +11:12:03.611 [Thread-0] DEBUG c.browserstack.utils.UtilityMethods - quitAllWebDriversForCLIFlow: Starting cleanup process +11:12:03.611 [Thread-0] DEBUG c.browserstack.utils.UtilityMethods - quitAllWebDriversForCLIFlow: No automation framework instances found to quit for CLI flow +11:12:31.991 [main] DEBUG c.browserstack.utils.UtilityMethods - [findFileMatcher] Current Path is :: /Users/bhuwankashyap/Documents/junit-appium-app-browserstack/junit-4/android, TestClass :: com/browserstack/BrowserStackJUnitTest +11:12:33.501 [main] INFO c.b.utils.SeleniumMethodUtils - Session ID status marking: 8454fe22078c080f3e31f7a84795aa3c508f9770 +11:12:33.501 [main] INFO c.b.utils.SeleniumMethodUtils - Session ID status marking: 8454fe22078c080f3e31f7a84795aa3c508f9770 +11:12:34.565 [Thread-0] DEBUG c.browserstack.utils.UtilityMethods - quitAllWebDriversForCLIFlow: Starting cleanup process +11:12:34.565 [Thread-0] DEBUG c.browserstack.utils.UtilityMethods - quitAllWebDriversForCLIFlow: No automation framework instances found to quit for CLI flow +11:12:34.908 [main] DEBUG c.browserstack.utils.UtilityMethods - Browserstack Gradle Config File does not exist. +11:12:35.884 [Thread-0] INFO c.browserstack.utils.LogReportingAPI - Visit https://automation.browserstack.com/builds/x5oie7wiksdurs5oxe3l0v83pv5jplzfyuy8zrqd to view build report, insights, and many more debugging information all at one place! + +11:12:35.884 [Thread-0] INFO c.b.config.BrowserStackConfig - INFO +11:12:35.897 [Thread-0] DEBUG c.browserstack.utils.UtilityMethods - [collectBuildData] Skipping build data collection: runSmartSelection is not enabled. +11:12:35.898 [Thread-0] INFO com.browserstack.v2.SdkCLI - stop: cli is not running. +11:12:40.423 [Thread-0] DEBUG c.browserstack.utils.UtilityMethods - Browserstack yml path passed - /Users/bhuwankashyap/Documents/junit-appium-app-browserstack/junit-4/android/browserstack.yml +11:12:41.733 [Thread-0] DEBUG c.browserstack.utils.UtilityMethods - Browserstack Gradle Config File does not exist. +11:12:43.099 [Thread-0] INFO c.browserstack.utils.UtilityMethods - View build on BrowserStack dashboard: https://app-automate.browserstack.com/dashboard/v2/builds/141752979e2412393f0fd53889d7e9acc628e3b4 +11:12:43.099 [Thread-0] INFO c.b.config.BrowserStackConfig - INFO +11:12:43.104 [Thread-0] DEBUG c.browserstack.utils.UtilityMethods - Server side buildName(browserstack build 3) is not same as client side buildName(browserstack build #3) +11:12:43.105 [Thread-0] DEBUG c.browserstack.utils.UtilityMethods - quitAllWebDriversForCLIFlow: Starting cleanup process +11:12:43.105 [Thread-0] DEBUG c.browserstack.utils.UtilityMethods - quitAllWebDriversForCLIFlow: No automation framework instances found to quit for CLI flow +11:12:43.107 [Thread-0] INFO c.browserstack.BrowserStackJavaAgent - SDK run ended for id: 3f4d1235-b620-4737-b9fe-30b1c126373e, testhub id: x5oie7wiksdurs5oxe3l0v83pv5jplzfyuy8zrqd +11:12:43.107 [Thread-0] INFO c.b.config.BrowserStackConfig - INFO diff --git a/junit-4/android/src/test/java/com/browserstack/AIAuthoringTest.java b/junit-4/android/src/test/java/com/browserstack/AIAuthoringTest.java new file mode 100644 index 0000000..5cf9643 --- /dev/null +++ b/junit-4/android/src/test/java/com/browserstack/AIAuthoringTest.java @@ -0,0 +1,19 @@ +package com.browserstack; + +import org.junit.Test; +import org.openqa.selenium.JavascriptExecutor; + +public class AIAuthoringTest extends BrowserStackJUnitTest { + + @Test + public void testWithAIAgent() throws Exception { + JavascriptExecutor js = (JavascriptExecutor) driver; + + // Search using AI Agent commands + js.executeScript("browserstack_executor: {\"action\": \"ai\", \"arguments\": [\"Tap on Search Bar\"]}"); + js.executeScript("browserstack_executor: {\"action\": \"ai\", \"arguments\": [\"Type India in the search field\"]}"); + + // Verify results + js.executeScript("browserstack_executor: {\"action\": \"ai\", \"arguments\": [\"Verify search results are displayed\"]}"); + } +} diff --git a/junit-4/ios/browserstack.yml b/junit-4/ios/browserstack.yml index 54b6d10..73056b4 100644 --- a/junit-4/ios/browserstack.yml +++ b/junit-4/ios/browserstack.yml @@ -23,7 +23,7 @@ buildIdentifier: '#${BUILD_NUMBER}' # Supports strings along with either/both ${ # Set `framework` of your test suite. Example, `testng`, `cucumber`, `cucumber-testng` # This property is needed to send test context to BrowserStack (test name, status) framework: junit4 - +aiAuthoring: true source: junit4:appium-sample-sdk:v1.1 app: ./BStackSampleApp.ipa diff --git a/junit-4/ios/src/test/java/com/browserstack/AIAuthoringTest.java b/junit-4/ios/src/test/java/com/browserstack/AIAuthoringTest.java new file mode 100644 index 0000000..de7951c --- /dev/null +++ b/junit-4/ios/src/test/java/com/browserstack/AIAuthoringTest.java @@ -0,0 +1,19 @@ +package com.browserstack; + +import org.junit.Test; +import org.openqa.selenium.JavascriptExecutor; + +public class AIAuthoringTest extends BrowserStackJUnitTest { + + @Test + public void testWithAIAgent() throws Exception { + JavascriptExecutor js = (JavascriptExecutor) driver; + + // Search using AI Agent commands + js.executeScript("browserstack_executor: {\"action\": \"ai\", \"arguments\": [\"Tap on Search Wikipedia\"]}"); + js.executeScript("browserstack_executor: {\"action\": \"ai\", \"arguments\": [\"Type India in the search field\"]}"); + + // Verify results + js.executeScript("browserstack_executor: {\"action\": \"ai\", \"arguments\": [\"Verify search results are displayed\"]}"); + } +} diff --git a/junit-5/android/browserstack.yml b/junit-5/android/browserstack.yml index 96eb1f5..cbe3635 100644 --- a/junit-5/android/browserstack.yml +++ b/junit-5/android/browserstack.yml @@ -1,77 +1,13 @@ -# ============================= -# Set BrowserStack Credentials -# ============================= -# Add your BrowserStack userName and acccessKey here or set BROWSERSTACK_USERNAME and -# BROWSERSTACK_ACCESS_KEY as env variables -userName: BROWSERSTACK_USERNAME -accessKey: BROWSERSTACK_ACCESS_KEY - -# ====================== -# BrowserStack Reporting -# ====================== -# The following capabilities are used to set up reporting on BrowserStack: -# Set 'projectName' to the name of your project. Example, Marketing Website +userName: "Your_Username" +accessKey: "Your_AccessKey" projectName: BrowserStack Samples -# Set `buildName` as the name of the job / testsuite being run -buildName: browserstack build -# `buildIdentifier` is a unique id to differentiate every execution that gets appended to -# buildName. Choose your buildIdentifier format from the available expressions: -# ${BUILD_NUMBER} (Default): Generates an incremental counter with every execution -# ${DATE_TIME}: Generates a Timestamp with every execution. Eg. 05-Nov-19:30 -# Read more about buildIdentifiers here -> https://www.browserstack.com/docs/automate/selenium/organize-tests -buildIdentifier: '#${BUILD_NUMBER}' # Supports strings along with either/both ${expression} -# Set `framework` of your test suite. Example, `testng`, `cucumber`, `cucumber-testng` -# This property is needed to send test context to BrowserStack (test name, status) +buildName: CDAA JUnit5 AI Authoring framework: junit5 - +aiAuthoring: true # setting this capability to true will help in running browserstack NL Authoring commands source: junit5:appium-sample-sdk:v1.1 - -app: ./WikipediaSample.apk -#app: ./LocalSample.apk #For running local tests - -# ======================================= -# Platforms (Browsers / Devices to test) -# ======================================= -# Platforms object contains all the browser / device combinations you want to test on. -# Entire list available here -> (https://www.browserstack.com/list-of-browsers-and-platforms/automate) - +app: bs://e062a41d22626330df16b78ddf43fb319f078be2 platforms: - deviceName: Samsung Galaxy S22 Ultra platformVersion: 12.0 platformName: android - - deviceName: Google Pixel 8 Pro - platformVersion: 14.0 - platformName: android - - deviceName: OnePlus 11R - platformVersion: 13.0 - platformName: android - -# ======================= -# Parallels per Platform -# ======================= -# The number of parallel threads to be used for each platform set. -# BrowserStack's SDK runner will select the best strategy based on the configured value -# -# Example 1 - If you have configured 3 platforms and set `parallelsPerPlatform` as 2, a total of 6 (2 * 3) parallel threads will be used on BrowserStack -# -# Example 2 - If you have configured 1 platform and set `parallelsPerPlatform` as 5, a total of 5 (1 * 5) parallel threads will be used on BrowserStack -parallelsPerPlatform: 1 - -# ========================================== -# BrowserStack Local -# (For localhost, staging/private websites) -# ========================================== -# Set browserStackLocal to true if your website under test is not accessible publicly over the internet -# Learn more about how BrowserStack Local works here -> https://www.browserstack.com/docs/automate/selenium/local-testing-introduction -browserstackLocal: true # (Default false) -#browserStackLocalOptions: -#Options to be passed to BrowserStack local in-case of advanced configurations -# localIdentifier: # (Default: null) Needed if you need to run multiple instances of local. -# forceLocal: true # (Default: false) Set to true if you need to resolve all your traffic via BrowserStack Local tunnel. -# Entire list of arguments available here -> https://www.browserstack.com/docs/automate/selenium/manage-incoming-connections -# =================== -# Debugging features -# =================== -debug: false # # Set to true if you need screenshots for every selenium command ran -networkLogs: false # Set to true to enable HAR logs capturing diff --git a/junit-5/android/log/automation.log b/junit-5/android/log/automation.log new file mode 100644 index 0000000..e69de29 diff --git a/junit-5/android/log/browserstack-javaagent.log b/junit-5/android/log/browserstack-javaagent.log new file mode 100644 index 0000000..a263e73 --- /dev/null +++ b/junit-5/android/log/browserstack-javaagent.log @@ -0,0 +1,48 @@ +11:09:41.367 [main] DEBUG c.browserstack.BrowserStackJavaAgent - [AGENT] Found agent via ProtectionDomain: /Users/bhuwankashyap/.m2/repository/com/browserstack/browserstack-java-sdk/1.56.6/browserstack-java-sdk-1.56.6.jar +11:09:41.368 [main] INFO c.browserstack.BrowserStackJavaAgent - [AGENT] Stored agent path for child processes: /Users/bhuwankashyap/.m2/repository/com/browserstack/browserstack-java-sdk/1.56.6/browserstack-java-sdk-1.56.6.jar +11:09:41.368 [main] DEBUG c.browserstack.BrowserStackJavaAgent - Extracted CLI argument from system : null +11:09:41.370 [main] INFO c.browserstack.BrowserStackJavaAgent - Selenium version detected - 4.4.0 +11:09:41.370 [main] INFO c.browserstack.BrowserStackJavaAgent - Appium version detected - 8.1.1 +11:09:41.443 [main] DEBUG c.b.config.BrowserStackConfig - Cli Config passed - {basedir=/Users/bhuwankashyap/Documents/junit-appium-app-browserstack/junit-5/android, test=AIAuthoringTest, user.dir=/Users/bhuwankashyap/Documents/junit-appium-app-browserstack/junit-5/android, localrepository=/Users/bhuwankashyap/.m2/repository} +11:09:41.551 [main] DEBUG c.b.logger.BrowserstackLoggerFactory - Log Level set to INFO for logger ROOT +11:09:41.551 [main] DEBUG c.b.logger.BrowserstackLoggerFactory - Log Level set to TRACE for logger browserStackAutomationFileDebugger +11:09:41.551 [main] DEBUG c.b.logger.BrowserstackLoggerFactory - Log Level set to INFO for logger browserStackFileDebugger +11:09:41.551 [main] DEBUG c.b.logger.BrowserstackLoggerFactory - Log Level set to INFO for logger com +11:09:41.561 [main] INFO c.browserstack.BrowserStackJavaAgent - Using app: [-bs://e062a41d22626330df16b78ddf43fb319f078be2] +11:09:41.561 [main] INFO c.browserstack.BrowserStackJavaAgent - Framework set to junit5 +11:09:41.562 [main] INFO c.browserstack.BrowserStackJavaAgent - SDK run started with id: 6378025a-9fc8-44d0-84e1-cd553df704eb +11:09:41.562 [main] INFO c.b.config.BrowserStackConfig - INFO +11:09:46.996 [main] INFO com.browserstack.v2.SdkCliUtils - CLI update check successful. Status: 200 +11:09:57.946 [main] INFO com.browserstack.v2.SdkCLI - spawning command='/Users/bhuwankashyap/.browserstack/cli/binary-macos-arm64' 'sdk' 'tcp' +11:25:30.827 [main] DEBUG c.browserstack.BrowserStackJavaAgent - [AGENT] Found agent via ProtectionDomain: /Users/bhuwankashyap/.m2/repository/com/browserstack/browserstack-java-sdk/1.56.6/browserstack-java-sdk-1.56.6.jar +11:25:30.828 [main] INFO c.browserstack.BrowserStackJavaAgent - [AGENT] Stored agent path for child processes: /Users/bhuwankashyap/.m2/repository/com/browserstack/browserstack-java-sdk/1.56.6/browserstack-java-sdk-1.56.6.jar +11:25:30.828 [main] DEBUG c.browserstack.BrowserStackJavaAgent - Extracted CLI argument from system : null +11:25:30.832 [main] INFO c.browserstack.BrowserStackJavaAgent - Selenium version detected - 4.4.0 +11:25:30.832 [main] INFO c.browserstack.BrowserStackJavaAgent - Appium version detected - 8.1.1 +11:25:30.906 [main] DEBUG c.b.config.BrowserStackConfig - Cli Config passed - {basedir=/Users/bhuwankashyap/Documents/junit-appium-app-browserstack/junit-5/android, test=AIAuthoringTest, user.dir=/Users/bhuwankashyap/Documents/junit-appium-app-browserstack/junit-5/android, localrepository=/Users/bhuwankashyap/.m2/repository} +11:25:31.041 [main] DEBUG c.b.logger.BrowserstackLoggerFactory - Log Level set to INFO for logger ROOT +11:25:31.041 [main] DEBUG c.b.logger.BrowserstackLoggerFactory - Log Level set to TRACE for logger browserStackAutomationFileDebugger +11:25:31.041 [main] DEBUG c.b.logger.BrowserstackLoggerFactory - Log Level set to INFO for logger browserStackFileDebugger +11:25:31.041 [main] DEBUG c.b.logger.BrowserstackLoggerFactory - Log Level set to INFO for logger com +11:25:31.053 [main] INFO c.browserstack.BrowserStackJavaAgent - Using app: [-bs://e062a41d22626330df16b78ddf43fb319f078be2] +11:25:31.053 [main] INFO c.browserstack.BrowserStackJavaAgent - Framework set to junit5 +11:25:31.054 [main] INFO c.browserstack.BrowserStackJavaAgent - SDK run started with id: 62c534f4-f834-4478-905d-e861eadd7a47 +11:25:31.054 [main] INFO c.b.config.BrowserStackConfig - INFO +11:25:36.602 [main] INFO com.browserstack.v2.SdkCliUtils - CLI update check successful. Status: 200 +11:25:48.040 [main] INFO com.browserstack.v2.SdkCLI - spawning command='/Users/bhuwankashyap/.browserstack/cli/binary-macos-arm64' 'sdk' 'tcp' +11:51:51.482 [SIGTERM handler] INFO c.b.utils.ExitSignalHandler - Shutdown triggered by: TERM 15 +11:51:51.496 [SIGTERM handler] INFO c.b.config.BrowserStackConfig - INFO +11:51:51.497 [SIGTERM handler] WARN c.b.u.ClientTroubleshootingService - [SDK-TRA-005] Some tests might not appear on the BrowserStack dashboard because the test process was interrupted with TERM 15. +11:51:51.532 [Thread-0] DEBUG c.browserstack.utils.UtilityMethods - [collectBuildData] Skipping build data collection: runSmartSelection is not enabled. +11:51:51.532 [Thread-0] INFO com.browserstack.v2.SdkCLI - stop: cli is not running. +11:51:52.638 [Thread-0] DEBUG c.browserstack.utils.UtilityMethods - Browserstack yml path passed - /Users/bhuwankashyap/Documents/junit-appium-app-browserstack/junit-5/android/browserstack.yml +11:51:53.542 [Thread-0] DEBUG c.browserstack.utils.UtilityMethods - Browserstack Gradle Config File does not exist. +11:51:53.543 [Thread-0] INFO c.b.config.BrowserStackConfig - INFO +11:51:53.543 [Thread-0] WARN c.b.u.ClientTroubleshootingService - Uh-oh! We detected some issues during this run. Error codes: [SDK-TRA-005]. For details and troubleshooting steps, visit https://www.browserstack.com/docs/test-reporting-and-analytics/sdk-troubleshooting/error-codes?ref=sdk. +11:51:54.014 [Thread-0] INFO c.browserstack.utils.UtilityMethods - View build on BrowserStack dashboard: https://app-automate.browserstack.com/dashboard/v2/builds/47b1540ba6261b98bd6109a3f154b1b4a0b31ff6 +11:51:54.014 [Thread-0] INFO c.b.config.BrowserStackConfig - INFO +11:51:54.034 [Thread-0] DEBUG c.browserstack.utils.UtilityMethods - Server side buildName(browserstack build 4) is not same as client side buildName(browserstack build #4) +11:51:54.035 [Thread-0] DEBUG c.browserstack.utils.UtilityMethods - quitAllWebDriversForCLIFlow: Starting cleanup process +11:51:54.036 [Thread-0] DEBUG c.browserstack.utils.UtilityMethods - quitAllWebDriversForCLIFlow: No automation framework instances found to quit for CLI flow +11:51:54.043 [Thread-0] INFO c.browserstack.BrowserStackJavaAgent - SDK run ended for id: 6378025a-9fc8-44d0-84e1-cd553df704eb, testhub id: +11:51:54.043 [Thread-0] INFO c.b.config.BrowserStackConfig - INFO diff --git a/junit-5/android/src/test/java/com/browserstack/AIAuthoringTest.java b/junit-5/android/src/test/java/com/browserstack/AIAuthoringTest.java new file mode 100644 index 0000000..e7ab2d1 --- /dev/null +++ b/junit-5/android/src/test/java/com/browserstack/AIAuthoringTest.java @@ -0,0 +1,40 @@ +package com.browserstack; + +import org.junit.jupiter.api.Test; +import org.openqa.selenium.JavascriptExecutor; + +/** + * AI Authoring Test - Cross Device Automation Agent (CDAA) + * + * This test demonstrates how to use BrowserStack's AI Agent to write + * test automation using natural language commands instead of traditional + * element locators (xpath, id, accessibility id, etc.). + * + * Benefits: + * - No need to find and maintain complex locator strategies + * - Tests are resilient to minor UI changes + * - Just describe what you see on the screen and AI executes it + */ +public class AIAuthoringTest extends BrowserStackJUnitTest { + + @Test + void testWithAIAgent() throws Exception { + // Cast the driver to JavascriptExecutor to execute BrowserStack AI commands + JavascriptExecutor js = (JavascriptExecutor) driver; + + // --- AI Agent Command --- + // Instead of: driver.findElement(By.accessibilityId("Search Wikipedia")).click(); + // Simply describe the action in natural language: + js.executeScript("browserstack_executor: {\"action\": \"ai\", \"arguments\": [\"Tap on Search Wikipedia\"]}"); + + // --- AI Agent Command --- + // Instead of: driver.findElement(By.id("search_src_text")).sendKeys("India"); + // Simply describe what you want to type and where: + js.executeScript("browserstack_executor: {\"action\": \"ai\", \"arguments\": [\"Type India in the search field\"]}"); + + // --- AI Agent Command --- + // Instead of writing complex assertions with element locators, + // simply describe what you expect to see on screen: + js.executeScript("browserstack_executor: {\"action\": \"ai\", \"arguments\": [\"Verify search results are displayed\"]}"); + } +} diff --git a/junit-5/ios/browserstack.yml b/junit-5/ios/browserstack.yml index 3d79ba1..43b0ad6 100644 --- a/junit-5/ios/browserstack.yml +++ b/junit-5/ios/browserstack.yml @@ -23,7 +23,7 @@ buildIdentifier: '#${BUILD_NUMBER}' # Supports strings along with either/both ${ # Set `framework` of your test suite. Example, `testng`, `cucumber`, `cucumber-testng` # This property is needed to send test context to BrowserStack (test name, status) framework: junit5 - +aiAuthoring: true source: junit5:appium-sample-sdk:v1.1 app: ./BStackSampleApp.ipa diff --git a/junit-5/ios/src/test/java/com/browserstack/AIAuthoringTest.java b/junit-5/ios/src/test/java/com/browserstack/AIAuthoringTest.java new file mode 100644 index 0000000..4d158e4 --- /dev/null +++ b/junit-5/ios/src/test/java/com/browserstack/AIAuthoringTest.java @@ -0,0 +1,19 @@ +package com.browserstack; + +import org.junit.jupiter.api.Test; +import org.openqa.selenium.JavascriptExecutor; + +public class AIAuthoringTest extends BrowserStackJUnitTest { + + @Test + void testWithAIAgent() throws Exception { + JavascriptExecutor js = (JavascriptExecutor) driver; + + // Search using AI Agent commands + js.executeScript("browserstack_executor: {\"action\": \"ai\", \"arguments\": [\"Tap on Search Wikipedia\"]}"); + js.executeScript("browserstack_executor: {\"action\": \"ai\", \"arguments\": [\"Type India in the search field\"]}"); + + // Verify results + js.executeScript("browserstack_executor: {\"action\": \"ai\", \"arguments\": [\"Verify search results are displayed\"]}"); + } +}