Skip to content

Add relative locator type for web elements #15419

Add relative locator type for web elements

Add relative locator type for web elements #15419

Workflow file for this run

name: Vividus CI
on:
push:
branches:
- master
tags:
- release-[0-9]+.[0-9]+.[0-9]+
paths:
- '**/**'
- '!docs/**'
- '!*.md'
- '!.github/workflows/docs.yml'
pull_request:
branches:
- master
paths:
- '**/**'
- '!docs/**'
- '!*.md'
- '!.github/workflows/docs.yml'
jobs:
build:
strategy:
matrix:
platform: [ubuntu-latest, macos-latest, windows-latest]
fail-fast: false
env:
TEST_APP_VERSION: 0.6.0
runs-on: ${{ matrix.platform }}
permissions:
contents: read
packages: write
steps:
- name: Checkout (including submodules and tags)
uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0
- name: Cache ~/.gradle/caches
uses: actions/cache@v4
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-caches-${{ hashFiles('**/*.gradle') }}
restore-keys: |
${{ runner.os }}-gradle-caches-
- name: Cache ~/.gradle/wrapper
uses: actions/cache@v4
with:
path: ~/.gradle/wrapper
key: ${{ runner.os }}-gradle-wrapper-${{ hashFiles('vividus-build-system/**/wrapper/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-wrapper-
- name: Cache tests history
if: github.ref == 'refs/heads/master' && matrix.platform == 'ubuntu-latest'
uses: actions/cache@v4
with:
save-always: true
path: vividus-tests/output/history
key: tests-history-cache-${{ github.sha }}
restore-keys: |
tests-history-cache-
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 21
- name: Warm up VIVIDUS test site
run: curl https://vividus-test-site-a92k.onrender.com/ &
- name: Build
env:
MATRIX_PLATFORM: ${{ matrix.platform }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
shell: bash
run: |
if [[ $MATRIX_PLATFORM = "ubuntu-latest" ]]; then
if [[ -n $SONAR_TOKEN ]]; then
./gradlew build sonar -Dsonar.host.url=https://sonarcloud.io \
-Dsonar.organization=vividus \
-Dsonar.projectKey=vividus-framework_vividus \
-Ptest.testLogging.exceptionFormat=full
else
echo No SONAR_TOKEN, SonarCloud analysis will be skipped
./gradlew build -Dorg.gradle.jvmargs="-Xmx2g -XX:MaxMetaspaceSize=768m" \
-Ptest.testLogging.exceptionFormat=full
fi
else
./gradlew build -x spotbugsMain -x spotbugsTest -x spotbugsIntegrationTest \
-x pmdMain -x pmdTest -x pmdIntegrationTest \
-Ptest.testLogging.exceptionFormat=full --no-daemon
fi
- name: Publish unit and integration tests reports
if: always()
uses: actions/upload-artifact@v4
with:
name: Unit and Integration Tests - Reports - ${{ matrix.platform }}
path: vividus/output/reports/tests
- name: Upload coverage to Codecov
if: ${{ !github.event.pull_request.head.repo.fork || github.ref == 'refs/heads/master'}}
uses: codecov/[email protected]
with:
fail_ci_if_error: true
token: ${{ secrets.CODECOV_TOKEN }}
- name: Upload coverage to Codecov
if: ${{ github.event.pull_request.head.repo.fork }}
uses: codecov/[email protected]
- name: VIVIDUS tasks validation
run: |
./gradlew validateKnownIssues printSteps countSteps -x testVividusInitialization -p vividus-tests --project-prop 'vividus.variables.iterationLimit=3' --project-prop 'vividus.variables.target-platform=ios'
- name: Integration tests
if: (matrix.platform == 'ubuntu-latest' || matrix.platform == 'windows-latest')
run: |
./gradlew :vividus-tests:debugStories --project-prop 'vividus.configuration-set.active=integration' --project-prop 'vividus.allure.history-directory=output/history/integration-tests' --project-prop 'vividus.allure.executor.name="Github Actions (Vividus)"' --project-prop 'vividus.allure.executor.type=github' --project-prop 'vividus.allure.executor.url=https://github.com/vividus-framework/vividus/actions' --project-prop 'vividus.allure.executor.build-order=${GITHUB_RUN_ID}' --project-prop 'vividus.allure.executor.build-name="Integration Tests ${GITHUB_RUN_ID}"' --project-prop 'vividus.allure.executor.build-url=https://github.com/vividus-framework/vividus/actions/runs/${GITHUB_RUN_ID}' --project-prop 'vividus.allure.executor.report-url=https://github.com/vividus-framework/vividus/actions/runs/${GITHUB_RUN_ID}' --project-prop 'vividus.allure.executor.report-name="Integration tests report"' --project-prop "fileToSaveExitCode=$(pwd)/exitCode.txt" --no-daemon
- name: Integration tests
if: matrix.platform == 'macos-latest'
run: |
./gradlew :vividus-tests:debugStories -Pvividus.configuration-set.active=integration \
-Pvividus.allure.history-directory=output/history/integration-tests \
-Pvividus.allure.executor.name="Github Actions (Vividus)" \
-Pvividus.allure.executor.type=github \
-Pvividus.allure.executor.url=https://github.com/vividus-framework/vividus/actions \
-Pvividus.allure.executor.build-order=${GITHUB_RUN_ID} \
-Pvividus.allure.executor.build-name="Integration Tests ${GITHUB_RUN_ID}" \
-Pvividus.allure.executor.build-url=https://github.com/vividus-framework/vividus/actions/runs/${GITHUB_RUN_ID} \
-Pvividus.allure.executor.report-url=https://github.com/vividus-framework/vividus/actions/runs/${GITHUB_RUN_ID} \
-Pvividus.allure.executor.report-name="Integration tests report" \
-PfileToSaveExitCode=$(pwd)/exitCode.txt --no-daemon
- name: Publish integration tests report
if: always()
uses: actions/upload-artifact@v4
with:
name: Integration Tests - Allure report - ${{ matrix.platform }}
path: vividus-tests/output/reports/allure
- name: Validate successful exit code
if: (matrix.platform == 'ubuntu-latest' || matrix.platform == 'windows-latest')
shell: bash
run: |
exitCode=$(cat ./exitCode.txt)
if [[ $exitCode -ne '1' ]]; then
exit $exitCode
fi
- name: Validate failed exit code
if: (matrix.platform == 'ubuntu-latest' || matrix.platform == 'windows-latest') && failure()
shell: bash
run: |
exitCode=$(cat ./exitCode.txt)
if [[ $exitCode -ne '2' ]]; then
echo Exit code is $exitCode
exit -1
fi
- name: System tests
if: matrix.platform == 'ubuntu-latest'
env:
BROWSERSTACK_USER: ${{ secrets.BROWSERSTACK_USER }}
BROWSERSTACK_KEY: ${{ secrets.BROWSERSTACK_KEY }}
APPLITOOLS_EXECUTE_KEY: ${{ secrets.APPLITOOLS_EXECUTE_KEY }}
APPLITOOLS_READ_KEY: ${{ secrets.APPLITOOLS_READ_KEY }}
MONGODB_USERNAME: ${{ secrets.MONGODB_USERNAME }}
MONGODB_PASSWORD: ${{ secrets.MONGODB_PASSWORD }}
KAFKA_PASSWORD: ${{ secrets.KAFKA_PASSWORD }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: ${{ secrets.AWS_REGION }}
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
AZURE_COSMOS_DB_KEY: ${{ secrets.AZURE_COSMOS_DB_KEY }}
GMAIL_PASSWORD: ${{ secrets.GMAIL_PASSWORD }}
shell: bash
run: |
if [[ -n $BROWSERSTACK_USER && -n $BROWSERSTACK_KEY && -n $APPLITOOLS_READ_KEY && -n $APPLITOOLS_READ_KEY && -n $MONGODB_USERNAME && -n $MONGODB_PASSWORD && -n $KAFKA_PASSWORD && -n $AWS_ACCESS_KEY_ID && -n $AWS_SECRET_ACCESS_KEY && -n $AWS_REGION && -n $AZURE_CLIENT_ID && -n $AZURE_CLIENT_SECRET && -n $AZURE_TENANT_ID && -n $AZURE_SUBSCRIPTION_ID && -n $AZURE_COSMOS_DB_KEY && -n $GMAIL_PASSWORD ]]; then
./gradlew :vividus-tests:debugStories -Pvividus.configuration-set.active=system \
-Pvividus.selenium.grid.username=${BROWSERSTACK_USER} \
-Pvividus.selenium.grid.password=${BROWSERSTACK_KEY} \
-Pvividus.selenium.grid.capabilities.bstack\:options.buildName="VIVIDUS System Tests" \
-Pvividus.allure.history-directory=output/history/system-tests \
-Pvividus.allure.executor.name="Github Actions (Vividus)" \
-Pvividus.allure.executor.type=github \
-Pvividus.allure.executor.url=https://github.com/vividus-framework/vividus/actions \
-Pvividus.allure.executor.build-order=${GITHUB_RUN_ID} \
-Pvividus.allure.executor.build-name="System Tests ${GITHUB_RUN_ID}" \
-Pvividus.allure.executor.build-url=https://github.com/vividus-framework/vividus/actions/runs/${GITHUB_RUN_ID} \
-Pvividus.allure.executor.report-url=https://github.com/vividus-framework/vividus/actions/runs/${GITHUB_RUN_ID} \
-Pvividus.allure.executor.report-name="System tests report" \
-Pvividus.azure.cosmos-db.account.vividus.key=${AZURE_COSMOS_DB_KEY} \
-Pvividus.notifications.base.comment="VIVIDUS CI - System tests" \
-Pvividus.notifications.base.report-link=https://github.com/vividus-framework/vividus/actions/runs/${GITHUB_RUN_ID} \
-Pvividus.notifications.base.project=vividus-tests \
-Pvividus.notifications.mail.host=smtp.gmail.com \
-Pvividus.notifications.mail.port=465 \
[email protected] \
-Pvividus.notifications.mail.password=${GMAIL_PASSWORD} \
[email protected] \
-Pvividus.notifications.mail.recipient="[email protected], [email protected]" \
-Pvividus.notifications.mail.security-protocol=SSL
else
echo No passwords/access keys are available, skipping system tests
fi
- name: Publish system tests report
if: matrix.platform == 'ubuntu-latest' && always()
uses: actions/upload-artifact@v4
with:
name: System Tests - Allure report
path: vividus-tests/output/reports/allure
- name: Headless - Web - System tests
if: matrix.platform == 'ubuntu-latest'
shell: bash
run: |
declare -a profiles=( firefox edge )
for profile in "${profiles[@]}"; do
./gradlew :vividus-tests:debugStories -Pvividus.configuration.suites=health_check \
-Pvividus.configuration.profiles=web/headless/${profile}
done
# New headless Chrome is used in CI, it will be made default in VIVIDUS 0.7.0 if testing passes (see more: https://developer.chrome.com/docs/chromium/new-headless)
./gradlew :vividus-tests:debugStories -Pvividus.configuration.suites=health_check \
-Pvividus.configuration.profiles=web/headless/chrome \
-Pvividus.web.driver.chrome.command-line-arguments="--headless=new --hide-scrollbars"
- name: LambdaTest - Desktop - Web - System tests
if: matrix.platform == 'macos-latest'
env:
LAMBDATEST_USER: ${{ secrets.LAMBDATEST_USER }}
LAMBDATEST_KEY: ${{ secrets.LAMBDATEST_KEY }}
shell: bash
run: |
if [[ -n $LAMBDATEST_USER && -n $LAMBDATEST_KEY ]]; then
declare -a profiles=( iexplore chrome firefox edge safari )
for profile in "${profiles[@]}"; do
./gradlew :vividus-tests:debugStories -Pvividus.configuration.environments= \
-Pvividus.configuration.suites=health_check \
-Pvividus.configuration.profiles=lambdatest/web,web/desktop/${profile} \
-Pvividus.selenium.grid.username=${LAMBDATEST_USER} \
-Pvividus.selenium.grid.password=${LAMBDATEST_KEY} \
-Pvividus.selenium.grid.capabilities.LT\:Options.build="VIVIDUS System Tests"
done
else
echo No LAMBDATEST_USER and/or LAMBDATEST_KEY, LambdaTest integration tests will be skipped
fi
- name: SauceLabs - Desktop - Web - System tests
if: matrix.platform == 'ubuntu-latest'
env:
SAUCELABS_USER: ${{ secrets.SAUCELABS_USER }}
SAUCELABS_KEY: ${{ secrets.SAUCELABS_KEY }}
shell: bash
run: |
if [[ -n $SAUCELABS_USER && -n $SAUCELABS_KEY ]]; then
declare -a profiles=( iexplore chrome firefox edge safari )
for profile in "${profiles[@]}"; do
./gradlew :vividus-tests:debugStories -Pvividus.configuration.environments=system/saucelabs \
-Pvividus.configuration.suites=health_check \
-Pvividus.configuration.profiles=saucelabs/web,web/desktop/${profile} \
-Pvividus.selenium.grid.username=${SAUCELABS_USER} \
-Pvividus.selenium.grid.password=${SAUCELABS_KEY}
done
else
echo No SAUCELABS_USER and/or SAUCELABS_KEY, SauceLabs system tests will be skipped
fi
- name: SauceLabs - Desktop - Web + Proxy + SauceConnect - System tests
if: (matrix.platform == 'ubuntu-latest' || matrix.platform == 'windows-latest')
env:
SAUCELABS_USER: ${{ secrets.SAUCELABS_USER }}
SAUCELABS_KEY: ${{ secrets.SAUCELABS_KEY }}
shell: bash
run: |
if [[ -n $SAUCELABS_USER && -n $SAUCELABS_KEY ]]; then
./gradlew :vividus-tests:debugStories -Pvividus.configuration.environments=system/saucelabs \
-Pvividus.configuration.suites= \
-Pvividus.configuration.profiles=saucelabs/web,web/desktop/chrome \
-Pvividus.batch-1.resource-location=story/integration \
-Pvividus.batch-1.resource-include-patterns=ProxyStepsTests.story \
-Pvividus.selenium.grid.username=${SAUCELABS_USER} \
-Pvividus.selenium.grid.password=${SAUCELABS_KEY} \
-Pvividus.saucelabs.sauce-connect.command-line-arguments="--proxy-localhost --no-ssl-bump-domains example.com"
else
echo No SAUCELABS_USER and/or SAUCELABS_KEY, SauceLabs system tests will be skipped
fi
- name: SauceLabs - Tablet - Web - System tests
if: matrix.platform == 'ubuntu-latest'
env:
SAUCELABS_USER: ${{ secrets.SAUCELABS_USER }}
SAUCELABS_KEY: ${{ secrets.SAUCELABS_KEY }}
shell: bash
run: |
if [[ -n $SAUCELABS_USER && -n $SAUCELABS_KEY ]]; then
declare -a profiles=( ipad )
for profile in "${profiles[@]}"; do
./gradlew :vividus-tests:debugStories -Pvividus.configuration.environments=system/saucelabs/${profile} \
-Pvividus.configuration.suites=system/${profile} \
-Pvividus.configuration.profiles=saucelabs/web,web/tablet/${profile} \
-Pvividus.selenium.grid.username=${SAUCELABS_USER} \
-Pvividus.selenium.grid.password=${SAUCELABS_KEY}
done
else
echo No SAUCELABS_USER and/or SAUCELABS_KEY, SauceLabs system tests will be skipped
fi
- name: SauceLabs - Mobile - Web - System tests
if: matrix.platform == 'ubuntu-latest'
env:
SAUCELABS_USER: ${{ secrets.SAUCELABS_USER }}
SAUCELABS_KEY: ${{ secrets.SAUCELABS_KEY }}
shell: bash
run: |
if [[ -n $SAUCELABS_USER && -n $SAUCELABS_KEY ]]; then
declare -a profiles=( iphone android )
for profile in "${profiles[@]}"; do
./gradlew :vividus-tests:debugStories -Pvividus.configuration.environments=system/saucelabs \
-Pvividus.configuration.suites=health_check \
-Pvividus.configuration.profiles=saucelabs/web/phone/${profile},web/phone/${profile} \
-Pvividus.selenium.grid.username=${SAUCELABS_USER} \
-Pvividus.selenium.grid.password=${SAUCELABS_KEY}
done
else
echo No SAUCELABS_USER and/or SAUCELABS_KEY, SauceLabs system tests will be skipped
fi
- name: BrowserStack - Mobile - Web - System tests
if: matrix.platform == 'macos-latest'
env:
BROWSERSTACK_USER: ${{ secrets.BROWSERSTACK_USER }}
BROWSERSTACK_KEY: ${{ secrets.BROWSERSTACK_KEY }}
shell: bash
run: |
if [[ -n $BROWSERSTACK_USER && -n $BROWSERSTACK_KEY ]]; then
declare -a profiles=( iphone android )
for profile in "${profiles[@]}"; do
./gradlew :vividus-tests:debugStories -Pvividus.configuration.suites=health_check \
-Pvividus.configuration.profiles=browserstack/web/phone/${profile},web/phone/${profile} \
-Pvividus.selenium.grid.username=${BROWSERSTACK_USER} \
-Pvividus.selenium.grid.password=${BROWSERSTACK_KEY}
done
else
echo No BROWSERSTACK_USER and/or BROWSERSTACK_KEY, Browserstack phone system tests will be skipped
fi
- name: Mobitru - Mobile - Web - System tests
if: matrix.platform == 'macos-latest'
env:
MOBITRU_USER: ${{ secrets.MOBITRU_USER }}
MOBITRU_KEY: ${{ secrets.MOBITRU_KEY }}
shell: bash
run: |
if [[ -n $MOBITRU_USER && -n $MOBITRU_KEY ]]; then
./gradlew :vividus-tests:debugStories -Pvividus.configuration.suites=health_check \
-Pvividus.configuration.profiles=mobitru/web,web/phone/iphone \
-Pvividus.selenium.grid.capabilities.appium\:platformVersion=17 \
-Pvividus.selenium.grid.username=${MOBITRU_USER} \
-Pvividus.selenium.grid.password=${MOBITRU_KEY}
./gradlew :vividus-tests:debugStories -Pvividus.configuration.suites=health_check \
-Pvividus.configuration.profiles=mobitru/web,web/phone/android \
-Pvividus.selenium.grid.capabilities.appium\:platformVersion=14 \
-Pvividus.selenium.grid.username=${MOBITRU_USER} \
-Pvividus.selenium.grid.password=${MOBITRU_KEY}
else
echo No MOBITRU_USER and/or MOBITRU_KEY, Mobitru web mobile system tests will be skipped
fi
- name: SauceLabs - iOS - Mobile App - Run system tests
if: matrix.platform == 'ubuntu-latest'
env:
SAUCELABS_USER: ${{ secrets.SAUCELABS_USER }}
SAUCELABS_KEY: ${{ secrets.SAUCELABS_KEY }}
shell: bash
run: |
if [[ -n $SAUCELABS_USER && -n $SAUCELABS_KEY ]]; then
./gradlew :vividus-tests:debugStories -Pvividus.configuration.environments=system/saucelabs/mobile_app/ios \
-Pvividus.configuration.suites=system/mobile_app/ios,ui \
-Pvividus.configuration.profiles=saucelabs/mobile_app,mobile_app/ios \
-Pvividus.selenium.grid.username=${SAUCELABS_USER} \
-Pvividus.selenium.grid.password=${SAUCELABS_KEY} \
-Pvividus.allure.history-directory=output/history/sl-ios-system-tests \
-Pvividus.allure.report-directory=output/reports/sl-ios-allure \
-Pvividus.allure.executor.name="Github Actions (Vividus)" \
-Pvividus.allure.executor.type=github \
-Pvividus.allure.executor.url=https://github.com/vividus-framework/vividus/actions \
-Pvividus.allure.executor.build-order=${GITHUB_RUN_ID} \
-Pvividus.allure.executor.build-name="SauceLabs iOS System Tests ${GITHUB_RUN_ID}" \
-Pvividus.allure.executor.build-url=https://github.com/vividus-framework/vividus/actions/runs/${GITHUB_RUN_ID} \
-Pvividus.allure.executor.report-url=https://github.com/vividus-framework/vividus/actions/runs/${GITHUB_RUN_ID} \
-Pvividus.allure.executor.report-name="SauceLabs iOS System tests report" \
-Pvividus.variables.app-url=storage:filename=vividus-test-app-ios-$TEST_APP_VERSION.zip \
-Pvividus.statistics.print-failures=true \
-Pvividus.ui.context.self-healing=true
else
echo No SAUCELABS_USER and/or SAUCELABS_KEY variables, System tests will be skipped
fi
- name: SauceLabs - iOS - Mobile App - Publish system tests report
if: matrix.platform == 'ubuntu-latest' && always()
uses: actions/upload-artifact@v4
with:
name: SauceLabs - System Tests - Allure report - iOS
path: vividus-tests/output/reports/sl-ios-allure
- name: SauceLabs - iOS Proxy - Mobile App - Run system tests
if: matrix.platform == 'ubuntu-latest'
env:
SAUCELABS_USER: ${{ secrets.SAUCELABS_USER }}
SAUCELABS_KEY: ${{ secrets.SAUCELABS_KEY }}
shell: bash
run: |
if [[ -n $SAUCELABS_USER && -n $SAUCELABS_KEY ]]; then
./gradlew :vividus-tests:debugStories -Pvividus.configuration.environments=system/saucelabs/mobile_app/ios \
-Pvividus.configuration.suites= \
-Pvividus.configuration.profiles=saucelabs/mobile_app,mobile_app/ios \
-Pvividus.batch-1.resource-location=story/system/mobile_app \
-Pvividus.batch-1.resource-include-patterns=ProxyMobileStepsTests.story \
-Pvividus.selenium.grid.username=${SAUCELABS_USER} \
-Pvividus.selenium.grid.password=${SAUCELABS_KEY} \
-Pvividus.allure.history-directory=output/history/sl-ios-proxy-system-tests \
-Pvividus.allure.report-directory=output/reports/sl-ios-proxy-allure \
-Pvividus.allure.executor.name="Github Actions (Vividus)" \
-Pvividus.allure.executor.type=github \
-Pvividus.allure.executor.url=https://github.com/vividus-framework/vividus/actions \
-Pvividus.allure.executor.build-order=${GITHUB_RUN_ID} \
-Pvividus.allure.executor.build-name="SauceLabs iOS Proxy Tests ${GITHUB_RUN_ID}" \
-Pvividus.allure.executor.build-url=https://github.com/vividus-framework/vividus/actions/runs/${GITHUB_RUN_ID} \
-Pvividus.allure.executor.report-url=https://github.com/vividus-framework/vividus/actions/runs/${GITHUB_RUN_ID} \
-Pvividus.allure.executor.report-name="SauceLabs iOS Proxy tests report" \
-Pvividus.saucelabs.sauce-connect.command-line-arguments="--proxy-localhost --no-ssl-bump-domains example.com" \
-Pvividus.variables.app-url=storage:filename=vividus-test-app-ios-$TEST_APP_VERSION.zip
else
echo No SAUCELABS_USER and/or SAUCELABS_KEY variables, System tests will be skipped
fi
- name: SauceLabs - iOS Proxy - Mobile App - Publish system tests report
if: matrix.platform == 'ubuntu-latest' && always()
uses: actions/upload-artifact@v4
with:
name: SauceLabs - System Tests With Proxy- Allure report - iOS
path: vividus-tests/output/reports/sl-ios-proxy-allure
- name: SauceLabs - Android - Mobile App - Run system tests
if: matrix.platform == 'ubuntu-latest'
env:
SAUCELABS_USER: ${{ secrets.SAUCELABS_USER }}
SAUCELABS_KEY: ${{ secrets.SAUCELABS_KEY }}
shell: bash
run: |
if [[ -n $SAUCELABS_USER && -n $SAUCELABS_KEY ]]; then
./gradlew :vividus-tests:debugStories -Pvividus.configuration.environments=system/saucelabs/mobile_app/android \
-Pvividus.configuration.suites=system/mobile_app/android \
-Pvividus.configuration.profiles=saucelabs/mobile_app,mobile_app/android \
-Pvividus.selenium.grid.username=${SAUCELABS_USER} \
-Pvividus.selenium.grid.password=${SAUCELABS_KEY} \
-Pvividus.allure.history-directory=output/history/sl-android-system-tests \
-Pvividus.allure.report-directory=output/reports/sl-android-allure \
-Pvividus.allure.executor.name="Github Actions (Vividus)" \
-Pvividus.allure.executor.type=github \
-Pvividus.allure.executor.url=https://github.com/vividus-framework/vividus/actions \
-Pvividus.allure.executor.build-order=${GITHUB_RUN_ID} \
-Pvividus.allure.executor.build-name="SauceLabs Android System Tests ${GITHUB_RUN_ID}" \
-Pvividus.allure.executor.build-url=https://github.com/vividus-framework/vividus/actions/runs/${GITHUB_RUN_ID} \
-Pvividus.allure.executor.report-url=https://github.com/vividus-framework/vividus/actions/runs/${GITHUB_RUN_ID} \
-Pvividus.allure.executor.report-name="SauceLabs Android System tests report" \
-Pvividus.variables.app-url=storage:filename=vividus-test-app-android-$TEST_APP_VERSION.zip \
-Pvividus.statistics.print-failures=true \
-Pvividus.batch-1.resource-include-patterns=VisualTesting.story
else
echo No SAUCELABS_USER and/or SAUCELABS_KEY variables, System tests will be skipped
fi
- name: SauceLabs - Android - Mobile App - Publish system tests report
if: matrix.platform == 'ubuntu-latest' && always()
uses: actions/upload-artifact@v4
with:
name: SauceLabs - System Tests - Allure report - Android
path: vividus-tests/output/reports/sl-android-allure
- name: SauceLabs - Android Proxy- Mobile App - Run system tests
if: matrix.platform == 'ubuntu-latest'
env:
SAUCELABS_USER: ${{ secrets.SAUCELABS_USER }}
SAUCELABS_KEY: ${{ secrets.SAUCELABS_KEY }}
shell: bash
run: |
if [[ -n $SAUCELABS_USER && -n $SAUCELABS_KEY ]]; then
./gradlew :vividus-tests:debugStories -Pvividus.configuration.environments=system/saucelabs/mobile_app/android \
-Pvividus.configuration.suites= \
-Pvividus.configuration.profiles=saucelabs/mobile_app,mobile_app/android \
-Pvividus.batch-1.resource-location=story/system/mobile_app \
-Pvividus.batch-1.resource-include-patterns=ProxyMobileStepsTests.story \
-Pvividus.selenium.grid.username=${SAUCELABS_USER} \
-Pvividus.selenium.grid.password=${SAUCELABS_KEY} \
-Pvividus.allure.history-directory=output/history/sl-android-proxy-system-tests \
-Pvividus.allure.report-directory=output/reports/sl-android-proxy-allure \
-Pvividus.allure.executor.name="Github Actions (Vividus)" \
-Pvividus.allure.executor.type=github \
-Pvividus.allure.executor.url=https://github.com/vividus-framework/vividus/actions \
-Pvividus.allure.executor.build-order=${GITHUB_RUN_ID} \
-Pvividus.allure.executor.build-name="SauceLabs Android Proxy Tests ${GITHUB_RUN_ID}" \
-Pvividus.allure.executor.build-url=https://github.com/vividus-framework/vividus/actions/runs/${GITHUB_RUN_ID} \
-Pvividus.allure.executor.report-url=https://github.com/vividus-framework/vividus/actions/runs/${GITHUB_RUN_ID} \
-Pvividus.allure.executor.report-name="SauceLabs Android Proxy tests report" \
-Pvividus.saucelabs.sauce-connect.command-line-arguments="--proxy-localhost --no-ssl-bump-domains example.com" \
-Pvividus.variables.app-url=storage:filename=vividus-test-app-android-$TEST_APP_VERSION.zip
else
echo No SAUCELABS_USER and/or SAUCELABS_KEY variables, System tests will be skipped
fi
- name: SauceLabs - Android Proxy - Mobile App - Publish system tests report
if: matrix.platform == 'ubuntu-latest' && always()
uses: actions/upload-artifact@v4
with:
name: SauceLabs - System Tests With Proxy- Allure report - Android
path: vividus-tests/output/reports/sl-android-proxy-allure
- name: BrowserStack - Desktop - Web - System tests
if: matrix.platform == 'macos-latest'
env:
BROWSERSTACK_USER: ${{ secrets.BROWSERSTACK_USER }}
BROWSERSTACK_KEY: ${{ secrets.BROWSERSTACK_KEY }}
shell: bash
run: |
if [[ -n $BROWSERSTACK_USER && -n $BROWSERSTACK_KEY ]]; then
declare -a profiles=( iexplore chrome firefox edge safari )
for profile in "${profiles[@]}"; do
./gradlew :vividus-tests:debugStories -Pvividus.configuration.suites=health_check \
-Pvividus.configuration.profiles=browserstack/web,web/desktop/${profile} \
-Pvividus.selenium.grid.username=${BROWSERSTACK_USER} \
-Pvividus.selenium.grid.password=${BROWSERSTACK_KEY} \
-Pvividus.selenium.grid.capabilities.bstack\:options.buildName="VIVIDUS BrowserStack Integration Tests"
done
else
echo No BROWSERSTACK_USER and/or BROWSERSTACK_KEY, Browserstack integration tests will be skipped
fi
- name: BrowserStack - iOS - Mobile App - Run system tests
if: matrix.platform == 'macos-latest'
env:
BROWSERSTACK_USER: ${{ secrets.BROWSERSTACK_USER }}
BROWSERSTACK_KEY: ${{ secrets.BROWSERSTACK_KEY }}
GMAIL_PASSWORD: ${{ secrets.GMAIL_PASSWORD }}
shell: bash
run: |
if [[ -n $BROWSERSTACK_USER && -n $BROWSERSTACK_KEY ]]; then
./gradlew :vividus-tests:debugStories -Pvividus.configuration.environments= \
-Pvividus.configuration.suites=system/mobile_app/healthcheck/browserstack \
-Pvividus.configuration.profiles=browserstack/mobile_app/ios,mobile_app/ios \
-Pvividus.selenium.grid.username=${BROWSERSTACK_USER} \
-Pvividus.selenium.grid.password=${BROWSERSTACK_KEY} \
-Pvividus.selenium.grid.capabilities.bstack\:options.buildName="VIVIDUS iOS System Tests" \
-Pvividus.allure.history-directory=output/history/bs-ios-system-tests \
-Pvividus.allure.report-directory=output/reports/bs-ios-allure \
-Pvividus.allure.executor.name="Github Actions (Vividus)" \
-Pvividus.allure.executor.type=github \
-Pvividus.allure.executor.url=https://github.com/vividus-framework/vividus/actions \
-Pvividus.allure.executor.build-order=${GITHUB_RUN_ID} \
-Pvividus.allure.executor.build-name="BrowserStack iOS System Tests ${GITHUB_RUN_ID}" \
-Pvividus.allure.executor.build-url=https://github.com/vividus-framework/vividus/actions/runs/${GITHUB_RUN_ID} \
-Pvividus.allure.executor.report-url=https://github.com/vividus-framework/vividus/actions/runs/${GITHUB_RUN_ID} \
-Pvividus.allure.executor.report-name="BrowserStack iOS System tests report" \
-Pvividus.variables.app-url=bs://444bd0308813ae0dc236f8cd461c02d3afa7901d \
-Pvividus.notifications.base.comment="VIVIDUS CI - BrowserStack iOS System Tests" \
-Pvividus.notifications.base.report-link=https://github.com/vividus-framework/vividus/actions/runs/${GITHUB_RUN_ID} \
-Pvividus.notifications.base.project=vividus-tests \
-Pvividus.notifications.mail.host=smtp.gmail.com \
-Pvividus.notifications.mail.port=587 \
[email protected] \
-Pvividus.notifications.mail.password=${GMAIL_PASSWORD} \
[email protected] \
-Pvividus.notifications.mail.recipient="[email protected], [email protected]" \
-Pvividus.notifications.mail.security-protocol=STARTTLS
else
echo No BROWSERSTACK_USER and/or BROWSERSTACK_KEY variables, System tests will be skipped
fi
- name: BrowserStack - iOS - Mobile App - Publish system tests report
if: matrix.platform == 'macos-latest' && always()
uses: actions/upload-artifact@v4
with:
name: BrowserStack - System Tests - Allure report - iOS
path: vividus-tests/output/reports/bs-ios-allure
- name: BrowserStack - Android - Mobile App - Run system tests
if: matrix.platform == 'macos-latest'
env:
BROWSERSTACK_USER: ${{ secrets.BROWSERSTACK_USER }}
BROWSERSTACK_KEY: ${{ secrets.BROWSERSTACK_KEY }}
shell: bash
run: |
if [[ -n $BROWSERSTACK_USER && -n $BROWSERSTACK_KEY ]]; then
./gradlew :vividus-tests:debugStories -Pvividus.configuration.environments= \
-Pvividus.configuration.suites=system/mobile_app/healthcheck/browserstack \
-Pvividus.configuration.profiles=browserstack/mobile_app/android,mobile_app/android \
-Pvividus.selenium.grid.username=${BROWSERSTACK_USER} \
-Pvividus.selenium.grid.password=${BROWSERSTACK_KEY} \
-Pvividus.selenium.grid.capabilities.bstack\:options.buildName="VIVIDUS Android System Tests" \
-Pvividus.allure.history-directory=output/history/bs-android-system-tests \
-Pvividus.allure.report-directory=output/reports/bs-android-allure \
-Pvividus.allure.executor.name="Github Actions (Vividus)" \
-Pvividus.allure.executor.type=github \
-Pvividus.allure.executor.url=https://github.com/vividus-framework/vividus/actions \
-Pvividus.allure.executor.build-order=${GITHUB_RUN_ID} \
-Pvividus.allure.executor.build-name="BrowserStack Android System Tests ${GITHUB_RUN_ID}" \
-Pvividus.allure.executor.build-url=https://github.com/vividus-framework/vividus/actions/runs/${GITHUB_RUN_ID} \
-Pvividus.allure.executor.report-url=https://github.com/vividus-framework/vividus/actions/runs/${GITHUB_RUN_ID} \
-Pvividus.allure.executor.report-name="BrowserStack Android System tests report" \
-Pvividus.variables.app-url=bs://c700ce60cf13ae8ed97705a55b8e022f13c5827c
else
echo No BROWSERSTACK_USER and/or BROWSERSTACK_KEY variables, System tests will be skipped
fi
- name: BrowserStack - Android - Mobile App - Publish system tests report
if: matrix.platform == 'macos-latest' && always()
uses: actions/upload-artifact@v4
with:
name: BrowserStack - System Tests - Allure report - Android
path: vividus-tests/output/reports/bs-android-allure
- name: Mobitru - Android - Mobile App - Run system tests
if: matrix.platform == 'macos-latest'
env:
MOBITRU_USER: ${{ secrets.MOBITRU_USER }}
MOBITRU_KEY: ${{ secrets.MOBITRU_KEY }}
shell: bash
run: |
if [[ -n $MOBITRU_USER && -n $MOBITRU_KEY ]]; then
./gradlew :vividus-tests:debugStories -Pvividus.configuration.environments= \
-Pvividus.configuration.suites=system/mobile_app/healthcheck/mobitru,system/mobile_app/android \
-Pvividus.configuration.profiles=mobitru/mobile_app,mobile_app/android \
-Pvividus.selenium.grid.username=${MOBITRU_USER} \
-Pvividus.selenium.grid.password=${MOBITRU_KEY} \
-Pvividus.selenium.grid.capabilities.platformVersion=13 \
-Pvividus.allure.history-directory=output/history/mt-android-system-tests \
-Pvividus.allure.report-directory=output/reports/mt-android-allure \
-Pvividus.allure.executor.name="Github Actions (Vividus)" \
-Pvividus.allure.executor.type=github \
-Pvividus.allure.executor.url=https://github.com/vividus-framework/vividus/actions \
-Pvividus.allure.executor.build-order=${GITHUB_RUN_ID} \
-Pvividus.allure.executor.build-name="Mobitru Android System Tests ${GITHUB_RUN_ID}" \
-Pvividus.allure.executor.build-url=https://github.com/vividus-framework/vividus/actions/runs/${GITHUB_RUN_ID} \
-Pvividus.allure.executor.report-url=https://github.com/vividus-framework/vividus/actions/runs/${GITHUB_RUN_ID} \
-Pvividus.allure.executor.report-name="Mobitru Android System tests report" \
-Pvividus.mobitru.app-file-name=Android.Sample.app.2.7.1.apk \
-Pvividus.mobile-application.bundle-id=com.swaglabsmobileapp
else
echo No MOBITRU_USER and/or MOBITRU_KEY variables, System tests will be skipped
fi
- name: Mobitru - Android - Mobile App - Publish system tests report
if: matrix.platform == 'macos-latest' && always()
uses: actions/upload-artifact@v4
with:
name: Mobitru - System Tests - Allure report - Android
path: vividus-tests/output/reports/mt-android-allure
- name: Mobitru - IOS - Mobile App - Run system tests
if: matrix.platform == 'macos-latest'
env:
MOBITRU_USER: ${{ secrets.MOBITRU_USER }}
MOBITRU_KEY: ${{ secrets.MOBITRU_KEY }}
shell: bash
run: |
if [[ -n $MOBITRU_USER && -n $MOBITRU_KEY ]]; then
./gradlew :vividus-tests:debugStories -Pvividus.configuration.environments= \
-Pvividus.configuration.suites=system/mobile_app/healthcheck/mobitru,system/mobile_app/ios \
-Pvividus.configuration.profiles=mobitru/mobile_app,mobile_app/ios \
-Pvividus.selenium.grid.username=${MOBITRU_USER} \
-Pvividus.selenium.grid.password=${MOBITRU_KEY} \
-Pvividus.allure.history-directory=output/history/mt-ios-system-tests \
-Pvividus.allure.report-directory=output/reports/mt-ios-allure \
-Pvividus.allure.executor.name="Github Actions (Vividus)" \
-Pvividus.allure.executor.type=github \
-Pvividus.allure.executor.url=https://github.com/vividus-framework/vividus/actions \
-Pvividus.allure.executor.build-order=${GITHUB_RUN_ID} \
-Pvividus.allure.executor.build-name="Mobitru iOS System Tests ${GITHUB_RUN_ID}" \
-Pvividus.allure.executor.build-url=https://github.com/vividus-framework/vividus/actions/runs/${GITHUB_RUN_ID} \
-Pvividus.allure.executor.report-url=https://github.com/vividus-framework/vividus/actions/runs/${GITHUB_RUN_ID} \
-Pvividus.allure.executor.report-name="Mobitru iOS System tests report" \
-Pvividus.mobitru.app-file-name=iOS.Sample.app.2.7.1.ipa \
-Pvividus.mobile-application.bundle-id=com.saucelabs.SwagLabsMobileApp
else
echo No MOBITRU_USER and/or MOBITRU_KEY variables, System tests will be skipped
fi
- name: Mobitru - iOS - Mobile App - Publish system tests report
if: matrix.platform == 'macos-latest' && always()
uses: actions/upload-artifact@v4
with:
name: Mobitru - System Tests - Allure report - iOS
path: vividus-tests/output/reports/mt-ios-allure
- name: Validate fail fast
if: matrix.platform == 'macos-latest'
shell: bash
run: |
./gradlew :vividus-tests:validateRunStatistics \
-Pvividus.configuration.suites=failFast \
-PexpectedRunStatistics="resources/main/failFast/expected.json" \
-Pvividus.story.fail-fast=true \
-Pvividus.scenario.fail-fast=true \
-Pvividus.batch.fail-fast=true
- name: Validate fail fast configured at batch level
if: matrix.platform == 'macos-latest'
shell: bash
run: |
./gradlew :vividus-tests:validateRunStatistics \
-Pvividus.configuration.suites=failFast \
-PexpectedRunStatistics="resources/main/failFast/expected.json" \
-Pvividus.batch-1.story.fail-fast=true \
-Pvividus.batch-1.scenario.fail-fast=true \
-Pvividus.batch.fail-fast=true
- name: Validate fail fast batch override
if: matrix.platform == 'macos-latest'
shell: bash
run: |
./gradlew :vividus-tests:validateRunStatistics \
-Pvividus.configuration.suites=failFast \
-PexpectedRunStatistics="resources/main/failFast/expected-batch.json" \
-Pvividus.story.fail-fast=true \
-Pvividus.scenario.fail-fast=true \
-Pvividus.batch-1.story.fail-fast=false \
-Pvividus.batch-1.scenario.fail-fast=false \
-Pvividus.batch.fail-fast=true
- name: Replace and validate deprecated steps
if: matrix.platform == 'macos-latest'
shell: bash
run: |
./gradlew :vividus-tests:replaceDeprecatedSteps
actualStory="vividus-tests/src/main/resources/story/replacement/ReplacedStepsActual.story"
expectedStory="vividus-tests/src/main/resources/story/replacement/ReplacedStepsExpected.story"
actualComposites="vividus-tests/src/main/resources/steps/replacement/replaced_composites_actual.steps"
expectedComposites="vividus-tests/src/main/resources/steps/replacement/replaced_composites_expected.steps"
cmp "$actualStory" "$expectedStory"
cmp "$actualComposites" "$expectedComposites"
- name: Replace and validate deprecated properties
if: matrix.platform == 'macos-latest'
shell: bash
run: |
./gradlew :vividus-tests:replaceDeprecatedProperties
actualProperties="vividus-tests/src/main/resources/properties/environment/system/properties_replacer/actual_properties.properties"
expectedProperties="vividus-tests/src/main/resources/properties/environment/system/properties_replacer/expected_properties.properties"
cmp "$actualProperties" "$expectedProperties"
- name: Publish artifacts to GitHub packages
if: (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/release-')) && matrix.platform == 'ubuntu-latest'
run: ./gradlew publish
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Login to Docker Hub
if: (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/release-')) && matrix.platform == 'ubuntu-latest'
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push Docker image to Docker Hub
if: (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/release-')) && matrix.platform == 'ubuntu-latest'
run: ./gradlew :vividus-docker-bundler:pushImage