diff --git a/src/lib/version-resolver.ts b/src/lib/version-resolver.ts index 1530ae0..14ca3cb 100644 --- a/src/lib/version-resolver.ts +++ b/src/lib/version-resolver.ts @@ -27,6 +27,13 @@ export function resolveVersion(requested: string, available: string[]): string { return requested; } + const caseInsensitiveMatch = uniq.find( + (v) => v.toLowerCase() === requested.toLowerCase(), + ); + if (caseInsensitiveMatch) { + return caseInsensitiveMatch; + } + // Try major version matching (e.g., "14" matches "14.0", "14.1", etc.) const reqNum = parseFloat(requested); if (!isNaN(reqNum)) { diff --git a/src/tools/automate-utils/fetch-screenshots.ts b/src/tools/automate-utils/fetch-screenshots.ts index 935ec4a..46eff51 100644 --- a/src/tools/automate-utils/fetch-screenshots.ts +++ b/src/tools/automate-utils/fetch-screenshots.ts @@ -59,9 +59,9 @@ async function convertUrlsToBase64( ): Promise> { const screenshots = await Promise.all( urls.map(async (url) => { - const response = await apiClient.get({ - url, - responseType: "arraybuffer" + const response = await apiClient.get({ + url, + responseType: "arraybuffer", }); // Axios returns response.data as a Buffer for binary data const base64 = Buffer.from(response.data).toString("base64"); diff --git a/src/tools/sdk-utils/bstack/commands.ts b/src/tools/sdk-utils/bstack/commands.ts index 1f600d7..ff71f0d 100644 --- a/src/tools/sdk-utils/bstack/commands.ts +++ b/src/tools/sdk-utils/bstack/commands.ts @@ -99,6 +99,15 @@ Alternative setup for Gradle users: ${GRADLE_SETUP_INSTRUCTIONS}`; } +function getPythonSDKInstructions(username: string, accessKey: string): string { + return `---STEP--- +Install BrowserStack Python SDK and setup: +\`\`\`bash +pip install browserstack-sdk +browserstack-sdk setup --username "${username}" --key "${accessKey}" +\`\`\``; +} + // Main function to get SDK setup commands based on language and framework export function getSDKPrefixCommand( language: SDKSupportedLanguage, @@ -112,7 +121,8 @@ export function getSDKPrefixCommand( case "java": return getJavaSDKInstructions(framework, username, accessKey); - + case "python": + return getPythonSDKInstructions(username, accessKey); default: return ""; } diff --git a/src/tools/sdk-utils/bstack/configUtils.ts b/src/tools/sdk-utils/bstack/configUtils.ts index ac2b1a9..0439104 100644 --- a/src/tools/sdk-utils/bstack/configUtils.ts +++ b/src/tools/sdk-utils/bstack/configUtils.ts @@ -13,7 +13,7 @@ export function generateBrowserStackYMLInstructions(config: { const platformConfigs = generatePlatformConfigs(config); const stepTitle = - "Create a browserstack.yml file in the project root with your validated device configurations:"; + "Create a browserstack.yml file in the project root with your validated device configurations:If already exists, update it with the following content for devices and project details."; const buildName = `${projectName}-Build`; diff --git a/src/tools/sdk-utils/bstack/constants.ts b/src/tools/sdk-utils/bstack/constants.ts index 161be95..b801bd7 100644 --- a/src/tools/sdk-utils/bstack/constants.ts +++ b/src/tools/sdk-utils/bstack/constants.ts @@ -4,7 +4,7 @@ import { ConfigMapping } from "../common/types.js"; * ---------- PYTHON INSTRUCTIONS ---------- */ -export const pythonInstructions = (username: string, accessKey: string) => { +export const pythonInstructions = () => { const setup = ` ---STEP--- @@ -12,13 +12,6 @@ Install the BrowserStack SDK: \`\`\`bash python3 -m pip install browserstack-sdk \`\`\` - ----STEP--- - -Setup the BrowserStack SDK with your credentials: -\`\`\`bash -browserstack-sdk setup --username "${username}" --key "${accessKey}" -\`\`\` `; const run = ` @@ -26,7 +19,12 @@ browserstack-sdk setup --username "${username}" --key "${accessKey}" Run your tests on BrowserStack: \`\`\`bash -browserstack-sdk python +browserstack-sdk pytest -s tests/.py +\`\`\` + +Or run all tests in a directory: +\`\`\`bash +browserstack-sdk pytest \`\`\` `; @@ -34,7 +32,7 @@ browserstack-sdk python }; export const generatePythonFrameworkInstructions = - (framework: string) => (username: string, accessKey: string) => { + (framework: string) => () => { const setup = ` ---STEP--- @@ -43,13 +41,6 @@ Install the BrowserStack SDK: \`\`\`bash python3 -m pip install browserstack-sdk \`\`\` - ----STEP--- - -Setup the BrowserStack SDK with framework-specific configuration: -\`\`\`bash -browserstack-sdk setup --framework "${framework}" --username "${username}" --key "${accessKey}" -\`\`\` `; const run = ` diff --git a/src/tools/sdk-utils/common/device-validator.ts b/src/tools/sdk-utils/common/device-validator.ts index fe097cc..d2047b2 100644 --- a/src/tools/sdk-utils/common/device-validator.ts +++ b/src/tools/sdk-utils/common/device-validator.ts @@ -316,6 +316,14 @@ export async function validateDevices( validatedEnvironments.push(validatedEnv); } + if (framework === SDKSupportedBrowserAutomationFrameworkEnum.playwright) { + validatedEnvironments.forEach((env) => { + if (env.browser) { + env.browser = env.browser.toLowerCase(); + } + }); + } + return validatedEnvironments; }