Skip to content

Add iOS end to end tests#215

Merged
StuartFerguson merged 5 commits intomainfrom
task/#210_ios_endtoend
Jul 25, 2025
Merged

Add iOS end to end tests#215
StuartFerguson merged 5 commits intomainfrom
task/#210_ios_endtoend

Conversation

@StuartFerguson
Copy link
Copy Markdown
Member

closes #210

Comment on lines +10 to +189
runs-on: macos-15
env:
PLATFORM_VERSION: "18.5"
DEVICE_NAME: "iPhone 16"
APP_PATH: "./MyTestApp.app"

steps:
- name: 🧾 Checkout repo
uses: actions/checkout@v4

- name: 🔧 Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '20'

- name: 🔧 Set up .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '9.0.x'

- name: 📦 Install Appium + XCUITest driver
run: |
npm install -g appium
appium driver install xcuitest

#- name: 🧹 Clean DerivedData and WDA cache
# run: |
# rm -rf ~/Library/Developer/Xcode/DerivedData
# rm -rf ~/.appium/node_modules/appium-webdriveragent/Build

- name: 📱 Create iOS Simulator (if needed)
run: |
SIMULATOR_NAME="ci-sim-$RANDOM"
xcrun simctl create "$SIMULATOR_NAME" "$DEVICE_NAME" "com.apple.CoreSimulator.SimRuntime.iOS-${PLATFORM_VERSION//./-}"
echo "SIMULATOR_NAME=$SIMULATOR_NAME" >> $GITHUB_ENV

- name: 🚀 Boot simulator
run: |
xcrun simctl boot "$SIMULATOR_NAME"
SIMULATOR_ID=$(xcrun simctl list | grep 'Booted' | awk -F '[()]' '{print $2}')
echo "SIMULATOR_ID=$SIMULATOR_ID"
echo "SIMULATOR_ID=$SIMULATOR_ID" >> $GITHUB_ENV

# Open the simulator UI so Appium doesn’t force-restart it later
open -Fn /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app

# Wait a bit to ensure the UI is up
sleep 5


- name: List available simulators
run: |
xcrun simctl list | grep $SIMULATOR_ID

#- name: Build, verify, and deploy WebDriverAgent
# run: |
# set -euo pipefail

# # Set up vars
# WDA_DIR="/tmp/WebDriverAgent"
# DERIVED_DATA="/Users/runner/Library/Developer/Xcode/DerivedData/WebDriverAgent"
# #SIMULATOR_UDID="${{ env.UDID }}"
# echo "Using simulator $SIMULATOR_ID"

# # Clone WDA
# echo "Cloning WebDriverAgent..."
# git clone https://github.com/appium/WebDriverAgent.git "$WDA_DIR"

# # Build WDA using xcodebuild without signing (safe for CI)
# echo "Building WebDriverAgentRunner..."
# xcodebuild -project "$WDA_DIR/WebDriverAgent.xcodeproj" \
# -scheme WebDriverAgentRunner \
# -destination "id=$SIMULATOR_ID" \
# -derivedDataPath "/Users/runner/Library/Developer/Xcode/DerivedData/WebDriverAgent" \
# CODE_SIGNING_ALLOWED=NO \
# build-for-testing

# # Verify build output
# echo "Looking for WDA build output..."
# WDA_APP=$(find "$DERIVED_DATA" -type d -name "WebDriverAgentRunner-Runner.app" | head -n 1)
# if [ -z "$WDA_APP" ]; then
# echo "::error ::Failed to locate built WebDriverAgentRunner-Runner.app"
# exit 1
# fi
# echo "Found built WDA app at: $WDA_APP"

# # Launch WDA via xcodebuild test-without-building (required for XCTest runners)
# echo "Launching WebDriverAgent test runner on simulator..."
# xcodebuild test-without-building \
# -project "$WDA_DIR/WebDriverAgent.xcodeproj" \
# -scheme WebDriverAgentRunner \
# -destination "id=$SIMULATOR_ID" \
# -derivedDataPath "$DERIVED_DATA" \
# IPHONEOS_DEPLOYMENT_TARGET=18.0 \
# GCC_TREAT_WARNINGS_AS_ERRORS=0 \
# COMPILER_INDEX_STORE_ENABLE=NO \
# > /tmp/wda-launch.log 2>&1 &

# # Wait for WDA to be ready
# echo "Waiting for WDA to be available on http://127.0.0.1:8100/status..."

# for i in {1..30}; do
# if curl --silent --fail http://127.0.0.1:8100/status | grep -q "state"; then
# echo "✅ WDA is up and running."
# exit 0
# fi
# echo "Waiting... ($i)"
# sleep 2
# done

# echo "::error::WDA failed to start within timeout."
# exit 1

# echo "✅ WDA built, verified, installed, and launched successfully."

- name: 🧪 Start Appium Server
run: |
nohup appium --log appium.log &

- name: Install MAUI Workloads
run: |
dotnet workload install ios --ignore-failed-sources
dotnet workload install maui --ignore-failed-sources

- name: Restore MAUI App for iOS
run: dotnet restore TransactionProcessor.Mobile.sln --source ${{ secrets.PUBLICFEEDURL }} --source ${{ secrets.PRIVATEFEED_URL }} --source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6/nuget/v3/index.json

- name: Select Xcode 16.4
run: sudo xcode-select -s /Applications/Xcode_16.4.app/Contents/Developer

- name: Confirm Xcode version
run: xcodebuild -version

- name: Accept Xcode license
run: sudo xcodebuild -license accept

- name: Build Code
#run: dotnet build TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj -f net9.0-ios -c Release --no-restore
#run: dotnet build TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj -c Release -f net9.0-ios -r iossimulator-arm64 /p:EnableAssemblyILStripping=false /p:EnableSymbolStrip=false /p:LinkMode=None
run: dotnet build TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj -c Release -f net9.0-ios -r iossimulator-arm64 #/p:LinkMode=SdkOnly /p:EnableAssemblyILStripping=true /p:EnableSymbolStrip=true /p:Codesign=false /p:DebugSymbols=false /p:UseInterpreter=true

# - name: List all files with full path
# run: |
# find /Users/runner/work/TransactionMobile/TransactionMobile/TransactionProcessor.Mobile/bin -type f

- name: Run iOS Navigation Tests
run: |
#dotnet build TransactionProcessor.Mobile.UiTests/TransactionProcessor.Mobile.UiTests.csproj -c Debug --no-restore
dotnet test TransactionProcessor.Mobile.UiTests/TransactionProcessor.Mobile.UiTests.csproj --filter "Category=PRTest" --no-restore
# dotnet tool install --global NUnit.ConsoleRunner.NetCore
# nunit3-console TransactionProcessor.Mobile.UiTests/bin/Release/net9.0/TransactionProcessor.Mobile.UiTests.dll --where "(cat == PRNavTest && cat == iOS)"

# - name: Run iOS Navigation Tests
# run: |
# # Install NUnit Console Runner tool
# dotnet tool install --global NUnit.ConsoleRunner.NetCore

# # Ensure the tool path is available in this step
# export PATH="$PATH:$HOME/.dotnet/tools"

# # Optional: clean + build test project if not already built
# dotnet build TransactionProcessor.Mobile.UiTests/TransactionProcessor.Mobile.UiTests.csproj -c Release --no-restore

# # Run the tests filtered by categories
# nunit TransactionProcessor.Mobile.UiTests/bin/Release/net9.0/TransactionProcessor.Mobile.UiTests.dll --where "cat == PRNavTest && cat == iOS" --labels=All --result=TestResult-iOS.xml

- name: Upload Appium Logs on Failure
if: failure()
uses: actions/upload-artifact@v4
with:
name: ios-e2e_tests_appium
path: appium.log

# - name: Upload NUnit Test Results
# uses: actions/upload-artifact@v4
# with:
# name: iOS-Test-Results
# path: TestResult-iOS.xml


No newline at end of file

Check warning

Code scanning / CodeQL

Workflow does not contain permissions Medium

Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {contents: read}

Copilot Autofix

AI 10 months ago

To fix the issue, we will add a permissions block at the root of the workflow file. This block will explicitly define the permissions required for the workflow. Based on the tasks performed in the workflow, the minimal permissions required are contents: read to allow the workflow to read the repository contents. If any steps require additional permissions (e.g., pull-requests: write), they can be added as needed.


Suggested changeset 1
.github/workflows/ios_e2e_tests.yml

Autofix patch

Autofix patch
Run the following command in your local git repository to apply this patch
cat << 'EOF' | git apply
diff --git a/.github/workflows/ios_e2e_tests.yml b/.github/workflows/ios_e2e_tests.yml
--- a/.github/workflows/ios_e2e_tests.yml
+++ b/.github/workflows/ios_e2e_tests.yml
@@ -7,2 +7,5 @@
 
+permissions:
+  contents: read
+
 jobs:
EOF
@@ -7,2 +7,5 @@

permissions:
contents: read

jobs:
Copilot is powered by AI and may make mistakes. Always verify output.
@StuartFerguson StuartFerguson merged commit 037527b into main Jul 25, 2025
13 of 19 checks passed
@github-actions github-actions Bot deleted the task/#210_ios_endtoend branch September 24, 2025 01:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

iOS End to End Tests after Net 9 Upgrade

2 participants