Skip to content

NewsReader.UITestAndroid #134

NewsReader.UITestAndroid

NewsReader.UITestAndroid #134

name: NewsReader.UITestAndroid
on:
workflow_run:
workflows: ["NewsReader.CI"]
types:
- completed
workflow_dispatch:
jobs:
UITest:
if: ${{ github.event_name != 'workflow_run' || github.event.workflow_run.conclusion == 'success' }}
runs-on: ubuntu-latest
steps:
- name: 🔖 Check-out
uses: actions/checkout@v4
- name: 📜 Authenticate GitHub CLI
run: echo "${{ secrets.GITHUB_TOKEN }}" | gh auth login --with-token
- name: ⚙️ Get latest successful run ID
id: get_run
run: |
RUN_ID=$(gh run list \
--workflow="NewsReader.CI.yml" \
--branch=master \
--json databaseId,status,conclusion \
--jq '.[] | select(.conclusion=="success") | .databaseId' \
| head -n 1)
echo "run_id=$RUN_ID" >> $GITHUB_OUTPUT
echo "run_id=$RUN_ID"
- name: 📦 Download APK
run: |
gh run download ${{ steps.get_run.outputs.run_id }} --name="NewsReaderAndroid" --dir=./NewsReaderAndroid
- name: ⚙️ Enable KVM
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm
- name: ⚙️ Start Android Emulator
run: |
export PATH="$ANDROID_SDK_ROOT/emulator:$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/platform-tools:$PATH"
echo "Installing system image"
echo "y" | sdkmanager "system-images;android-35;google_apis;x86_64"
echo "Setting ANDROID_AVD_HOME"
export ANDROID_AVD_HOME=$HOME/.config/.android/avd
echo "Creating AVD"
echo "no" | avdmanager create avd -n test_emulator -k "system-images;android-35;google_apis;x86_64" --device "pixel_7" --force
echo "Starting emulator"
emulator -avd test_emulator -no-audio -no-boot-anim -no-window -no-snapshot &
- name: ⚙️ Install Appium Server
run: |
npm install appium -g
appium driver install uiautomator2
appium --version
- name: ⚙️ Start Appium Server
run: |
mkdir -p $GITHUB_WORKSPACE/out/NewsReader.UITest
appium > $GITHUB_WORKSPACE/out/NewsReader.UITest/appium.log 2>&1 &
- name: ⚙️ Wait for Android Emulator to complete booting
run: |
export PATH="$ANDROID_SDK_ROOT/emulator:$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/platform-tools:$PATH"
adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed) ]]; do sleep 5; done; input keyevent 82'
- name: 🖥️ UI Test
run: |
echo "## 🕵️ Test Results - NewsReader.UITest.sln" >> $Env:GITHUB_STEP_SUMMARY
dotnet test ./src/NewsReader.UITest/NewsReader.UITest.sln --filter DevicePlatform=Android --logger GitHubActions -e UITestApkFile=NewsReaderAndroid/src/NewsReader/NewsReader.MauiSystem/bin/Release/net9.0-android/publish/Waf.NewsReader-Signed.apk
- name: 📦 Upload UI Test results
uses: actions/upload-artifact@v4
if: always()
with:
name: NewsReaderUITestResults
if-no-files-found: ignore
path: |
out/NewsReader.UITest/