Skip to content

Commit 3fb77f9

Browse files
Merge pull request #150 from tech-sushant/app-automate-java
feat: adding appium support for java
2 parents b2dccfe + cacc90d commit 3fb77f9

File tree

2 files changed

+89
-28
lines changed

2 files changed

+89
-28
lines changed

src/tools/appautomate-utils/appium-sdk/languages/java.ts

Lines changed: 79 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,32 @@ export const MAVEN_ARCHETYPE_GROUP_ID = "com.browserstack";
1111
export const MAVEN_ARCHETYPE_ARTIFACT_ID = "junit-archetype-integrate";
1212
export const MAVEN_ARCHETYPE_VERSION = "1.0";
1313

14+
// Version mapping for different frameworks
15+
export const JAVA_APP_FRAMEWORK_VERSION_MAP: Record<string, string> = {
16+
testng: "1.4",
17+
selenide: "1.4",
18+
junit5: "1.0",
19+
junit4: "1.0",
20+
jbehave: "1.0",
21+
cucumberTestng: "1.0",
22+
cucumberJunit4: "1.0",
23+
cucumberJunit5: "1.0",
24+
cucumber: "1.0",
25+
serenity: "1.0",
26+
};
27+
1428
// Framework mapping for Java Maven archetype generation for App Automate
1529
export const JAVA_APP_FRAMEWORK_MAP: Record<string, string> = {
16-
testng: "browserstack-sdk-archetype-integrate",
30+
testng: "testng-archetype-integrate",
1731
junit5: "browserstack-sdk-archetype-integrate",
1832
selenide: "selenide-archetype-integrate",
1933
jbehave: "browserstack-sdk-archetype-integrate",
34+
junit4: "browserstack-sdk-archetype-integrate",
2035
cucumberTestng: "browserstack-sdk-archetype-integrate",
2136
cucumberJunit4: "browserstack-sdk-archetype-integrate",
2237
cucumberJunit5: "browserstack-sdk-archetype-integrate",
38+
cucumber: "browserstack-sdk-archetype-integrate",
39+
serenity: "browserstack-sdk-archetype-integrate",
2340
};
2441

2542
// Common Gradle setup instructions for App Automate (platform-independent)
@@ -49,44 +66,72 @@ export function getJavaAppFrameworkForMaven(framework: string): string {
4966
return JAVA_APP_FRAMEWORK_MAP[framework] || framework;
5067
}
5168

69+
export function getJavaAppFrameworkVersion(framework: string): string {
70+
return JAVA_APP_FRAMEWORK_VERSION_MAP[framework] || MAVEN_ARCHETYPE_VERSION;
71+
}
72+
5273
function getMavenCommandForWindows(
5374
framework: string,
5475
mavenFramework: string,
76+
version: string,
5577
username: string,
5678
accessKey: string,
79+
appPath?: string,
5780
): string {
58-
return (
81+
let command =
5982
`mvn archetype:generate -B ` +
6083
`-DarchetypeGroupId="${MAVEN_ARCHETYPE_GROUP_ID}" ` +
6184
`-DarchetypeArtifactId="${mavenFramework}" ` +
62-
`-DarchetypeVersion="${MAVEN_ARCHETYPE_VERSION}" ` +
85+
`-DarchetypeVersion="${version}" ` +
6386
`-DgroupId="${MAVEN_ARCHETYPE_GROUP_ID}" ` +
64-
`-DartifactId="${MAVEN_ARCHETYPE_ARTIFACT_ID}" ` +
65-
`-Dversion="${MAVEN_ARCHETYPE_VERSION}" ` +
87+
`-DartifactId="${mavenFramework}" ` +
88+
`-Dversion="${version}" ` +
6689
`-DBROWSERSTACK_USERNAME="${username}" ` +
67-
`-DBROWSERSTACK_ACCESS_KEY="${accessKey}" ` +
68-
`-DBROWSERSTACK_FRAMEWORK="${framework}"`
69-
);
90+
`-DBROWSERSTACK_ACCESS_KEY="${accessKey}"`;
91+
92+
// Add framework parameter for browserstack-sdk-archetype-integrate
93+
if (mavenFramework === "browserstack-sdk-archetype-integrate") {
94+
command += ` -DBROWSERSTACK_FRAMEWORK="${framework}"`;
95+
}
96+
97+
// Add app path if provided
98+
if (appPath) {
99+
command += ` -DBROWSERSTACK_APP="${appPath}"`;
100+
}
101+
102+
return command;
70103
}
71104

72105
function getMavenCommandForUnix(
73106
framework: string,
74107
mavenFramework: string,
108+
version: string,
75109
username: string,
76110
accessKey: string,
111+
appPath?: string,
77112
): string {
78-
return (
113+
let command =
79114
`mvn archetype:generate -B ` +
80115
`-DarchetypeGroupId="${MAVEN_ARCHETYPE_GROUP_ID}" ` +
81116
`-DarchetypeArtifactId="${mavenFramework}" ` +
82-
`-DarchetypeVersion="${MAVEN_ARCHETYPE_VERSION}" ` +
117+
`-DarchetypeVersion="${version}" ` +
83118
`-DgroupId="${MAVEN_ARCHETYPE_GROUP_ID}" ` +
84-
`-DartifactId="${MAVEN_ARCHETYPE_ARTIFACT_ID}" ` +
85-
`-Dversion="${MAVEN_ARCHETYPE_VERSION}" ` +
119+
`-DartifactId="${mavenFramework}" ` +
120+
`-Dversion="${version}" ` +
86121
`-DBROWSERSTACK_USERNAME="${username}" ` +
87-
`-DBROWSERSTACK_ACCESS_KEY="${accessKey}" ` +
88-
`-DBROWSERSTACK_FRAMEWORK="${framework}"`
89-
);
122+
`-DBROWSERSTACK_ACCESS_KEY="${accessKey}"`;
123+
124+
// Add framework parameter for browserstack-sdk-archetype-integrate
125+
if (mavenFramework === "browserstack-sdk-archetype-integrate") {
126+
command += ` -DBROWSERSTACK_FRAMEWORK="${framework}"`;
127+
}
128+
129+
// Add app path if provided
130+
if (appPath) {
131+
command += ` -DBROWSERSTACK_APP="${appPath}"`;
132+
}
133+
134+
return command;
90135
}
91136

92137
export function getJavaSDKCommand(
@@ -98,29 +143,28 @@ export function getJavaSDKCommand(
98143
const { isWindows = false, getPlatformLabel } = PLATFORM_UTILS || {};
99144

100145
const mavenFramework = getJavaAppFrameworkForMaven(framework);
146+
const version = getJavaAppFrameworkVersion(framework);
101147

102148
let mavenCommand: string;
103149

104150
if (isWindows) {
105151
mavenCommand = getMavenCommandForWindows(
106152
framework,
107153
mavenFramework,
154+
version,
108155
username,
109156
accessKey,
157+
appPath,
110158
);
111-
if (appPath) {
112-
mavenCommand += ` -DBROWSERSTACK_APP="${appPath}"`;
113-
}
114159
} else {
115160
mavenCommand = getMavenCommandForUnix(
116161
framework,
117162
mavenFramework,
163+
version,
118164
username,
119165
accessKey,
166+
appPath,
120167
);
121-
if (appPath) {
122-
mavenCommand += ` -DBROWSERSTACK_APP="${appPath}"`;
123-
}
124168
}
125169

126170
const envStep = createEnvStep(
@@ -133,13 +177,21 @@ export function getJavaSDKCommand(
133177
const mavenStep = createStep(
134178
"Install BrowserStack SDK using Maven Archetype for App Automate",
135179
`Maven command for ${framework} (${getPlatformLabel()}):
136-
\`\`\`bash
137-
${mavenCommand}
138-
\`\`\`
180+
\`\`\`bash
181+
${mavenCommand}
182+
\`\`\`
183+
184+
Alternative setup for Gradle users:
185+
${GRADLE_APP_SETUP_INSTRUCTIONS}`,
186+
);
139187

140-
Alternative setup for Gradle users:
141-
${GRADLE_APP_SETUP_INSTRUCTIONS}`,
188+
const argsLineStep = createStep(
189+
"Verifying dependency and argsLine",
190+
`Verify browserstack-java-sdk with LATEST is added as dependency and add this line in pom.xml if not added:
191+
\`\`\`xml
192+
<argLine>-javaagent:"\${com.browserstack:browserstack-java-sdk:jar}"</argLine>
193+
\`\`\``,
142194
);
143195

144-
return combineInstructions(envStep, mavenStep);
196+
return combineInstructions(envStep, mavenStep, argsLineStep);
145197
}

src/tools/appautomate-utils/appium-sdk/types.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ export enum AppSDKSupportedTestingFrameworkEnum {
2121
junit4 = "junit4",
2222
selenide = "selenide",
2323
jbehave = "jbehave",
24+
serenity = "serenity",
2425
cucumberTestng = "cucumberTestng",
2526
cucumberJunit4 = "cucumberJunit4",
2627
cucumberJunit5 = "cucumberJunit5",
@@ -60,7 +61,15 @@ export interface AppSDKInstruction {
6061
export const SUPPORTED_CONFIGURATIONS = {
6162
appium: {
6263
ruby: ["cucumberRuby"],
63-
java: [],
64+
java: [
65+
"testng",
66+
"cucumber",
67+
"junit4",
68+
"junit5",
69+
"jbehave",
70+
"selenide",
71+
"serenity",
72+
],
6473
csharp: [],
6574
python: ["pytest", "robot", "behave", "lettuce"],
6675
nodejs: ["jest", "mocha", "cucumberJs", "webdriverio", "nightwatch"],

0 commit comments

Comments
 (0)