
Explore how human in the loop improves AI reliability in software testing and compare Postman versus SoapUI as practical tool examples.
Explore LangChain, connecting LLMs to external data via a vector database through loading, chunking, embedding, and storage, and LangGraph's line graph for defining AI agents with memory and checkpoints.
Explore human in the loop concepts, guarding against AI hallucinations and implementing guardrails. Learn when to seek human approval, prompt engineering, and safety policies for AI agents.
Explore zero-shot, one-shot, few-shot prompts and chain-of-thought reasoning to design accurate, context-rich prompts for automation testing with llms and context files.
Explore how OpenAI powers chatbots like ChatGPT and Copilot and its mission to benefit humanity. See how GPT models and DALL-E underlie these tools and the common principles OpenAI publishes.
Explore the basics of n8n as a workflow automation platform, create a trial account, and build AI-powered automation workflows using nodes and the try an AI workflow feature.
Create a workflow in n8n that reads a Google Sheet, selects an email, and sends an email via an AI agent using prompts to determine the recipient.
Learn to set up a Jira testing environment from scratch, including creating a project, generating API tokens, and integrating Zephyr test management to create test cases and defects from Excel.
Explore building an n8n workflow to pull new defects from a spreadsheet and create Jira issues, including setting up Jira templates, enabling Zephyr, and troubleshooting credentials and URLs.
Learn to expose an n8n workflow as a public chat, connect to an ai model with memory, and auto-create defects in zero from sheet data via a public URL.
Learn how tokens, the fundamental units of words and punctuation, drive OpenAI usage and cost, with four characters per token, prompts, budgets, and rate limits.
Learn to build a chrome extension that records and plays back browser actions, using an ai editor to generate Playwright or Selenium scripts and automate setup.
Build an otp shield mobile app that monitors text messages, phone calls, and whatsapp messages and calls, warns about otp requests, blocks apk files, and provides a dismiss option.
Explore gpt4all, a free open-source local ai ecosystem that runs offline on Windows, Mac, and Linux, enabling private document analysis and test case generation.
Develop a custom manual test case generator agent that fetches an Azure DevOps user story, creates test cases by defined rules, and saves drafts in Excel.
Define rules to generate comprehensive manual test cases, including end-to-end journeys, negative and edge cases, with required expected results and P1/P2 priorities; present via a local Libby manual agent UI.
Get quick help through the questions tab with responses within 24 hours, and join weekend one-on-one sessions; request topics for a new student-requested topics section.
Explore Python's features as a general purpose, interactive, easy to learn language with a standard library and cross-platform support. See its versatility in data science, machine learning, and web development.
Install python on mac by downloading the installer from python.org, running it, and confirming installation. Verify with python3 --version and pip3 --version in terminal to ensure a successful setup.
Discover the course materials for Appium and Selenium with Python, including the complete Python project for Android and iOS, logs and object models, the APM framework, and documentation.
Learn to install and login to GitHub Copilot in PyCharm, using the plugins marketplace, authorize GitHub, and access Copilot in the editor for AI code assistance.
Learn Python string basics: define strings with single, double, or triple quotes; index characters; and perform operations like concatenation, comparison, length, and methods such as upper and startswith.
Explore Python dictionaries, defining them in multiple lines or a single line, add and update key-value pairs, and remove with del, pop, or pop item, while exploring insertion order.
Explore functions versus methods, and build a single add function with arbitrary arguments, using a for loop in Python to sum numbers and return a tuple of results.
Master the scope of variables, differentiating local and global variables and using the global keyword inside functions to update global data. Understand access limitations and function call effects.
Explore the inheritance concept in Python, establishing relationships between parent and child classes. Learn single, multi-level, hierarchical, and multiple inheritance with examples and how properties propagate to subclasses.
Explore how method overriding lets a child class replace a parent method’s logic, as shown by overriding buy land with 2000 acres in a child class, illustrating inheritance in Python.
Explore how Python lambda functions provide anonymous, single-expression operations as a shorter alternative to def, demonstrated by converting a sum function into a lambda and calling it with arguments.
Learn how Python handles exceptions with try and except blocks, using examples like zero division and index errors to continue program flow after errors.
Learn how try, else, and finally blocks handle exceptions in Python, including when else runs, how finally executes always, and patterns like closing a database connection.
Install and use Homebrew on Mac to simplify package management for your development VM. Use it to install node components and APM dependencies, as a prerequisite before configuring your environment.
Links to download app files:
1. https://github.com/saucelabs/sample-app-mobile/releases
2. https://github.com/webdriverio/native-demo-app/releases
Build a cross-platform mobile test using Python with Appium to launch Android and iOS apps by configuring device-specific desired capabilities, UIAutomator 2 or XCUITest options, and app paths.
Automate signup and login flows in a mobile app using Appium and Selenium with Python, locating elements via XPath, handling text fields, and managing alerts and confirmations.
Automate a mobile app with Appium and Python by handling a switch, a dropdown, and alerts in a single form. Locate elements with XPath and perform clicks and selections.
Learn to attach to an active Appium session using the inspector, enable session discovery, and view Android and iOS session details and capabilities.
Perform a practical implementation to locate the sign-up button, capture x, y, width, height, and compute center coordinates as x+width/2 and y+height/2 for automated interaction.
import time
from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.options.ios import XCUITestOptions
from appium.webdriver.appium_service import AppiumService
from appium.webdriver.common.appiumby import AppiumBy
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.actions.pointer_input import PointerInput
from selenium.webdriver.common.actions import interaction
from selenium.webdriver.common.actions.action_builder import ActionBuilder
desired_caps = dict(
deviceName = 'Android',
platformName = 'Android',
automationName = 'UiAutomator2',
platformVersion = '13',
app = '/Users/lucky/Downloads/app/Android/ApiDemos.apk'
# appActivity = 'com.swaglabsmobileapp.MainActivity'
)
capabilities_options = UiAutomator2Options().load_capabilities(desired_caps)
driver = webdriver.Remote('http://127.0.0.1:4723',options=capabilities_options)
time.sleep(5)
driver.implicitly_wait(40)
driver.find_element(AppiumBy.ACCESSIBILITY_ID,'Views').click()
time.sleep(2)
ui_scrollable =('new UiScrollable(new UiSelector().scrollable(true))'
'.scrollIntoView(new UiSelector().text("WebView"))')
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,ui_scrollable)
driver.find_element(AppiumBy.ACCESSIBILITY_ID,'WebView').click()
time.sleep(1)
driver.quit()
import time
from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.options.ios import XCUITestOptions
from appium.webdriver.appium_service import AppiumService
from appium.webdriver.common.appiumby import AppiumBy
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.actions.pointer_input import PointerInput
from selenium.webdriver.common.actions import interaction
from selenium.webdriver.common.actions.action_builder import ActionBuilder
desired_caps = dict(
deviceName = 'Android',
platformName = 'Android',
automationName = 'UiAutomator2',
platformVersion = '13',
app = '/Users/lucky/Downloads/app/Android/ApiDemos.apk'
# appActivity = 'com.swaglabsmobileapp.MainActivity'
)
capabilities_options = UiAutomator2Options().load_capabilities(desired_caps)
driver = webdriver.Remote('http://127.0.0.1:4723',options=capabilities_options)
time.sleep(5)
driver.implicitly_wait(40)
driver.find_element(AppiumBy.ACCESSIBILITY_ID,'Views').click()
time.sleep(2)
ui_scrollable =('new UiScrollable(new UiSelector().scrollable(true))'
'.setAsVerticalList()'
'.scrollIntoView(new UiSelector().text("Lists"))')
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,ui_scrollable)
driver.find_element(AppiumBy.ACCESSIBILITY_ID,'Lists').click()
driver.find_element(AppiumBy.ACCESSIBILITY_ID,'01. Array').click()
ui_scrollable1 =('new UiScrollable(new UiSelector().scrollable(true))'
'.scrollIntoView(new UiSelector().text("Curd"))')
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,ui_scrollable1)
time.sleep(1)
driver.quit()
import time
from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.options.ios import XCUITestOptions
from appium.webdriver.appium_service import AppiumService
from appium.webdriver.common.appiumby import AppiumBy
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.actions.pointer_input import PointerInput
from selenium.webdriver.common.actions import interaction
from selenium.webdriver.common.actions.action_builder import ActionBuilder
desired_caps = dict(
deviceName = 'Android',
platformName = 'Android',
automationName = 'UiAutomator2',
platformVersion = '13',
app = '/Users/lucky/Downloads/app/Android/ApiDemos.apk'
# appActivity = 'com.swaglabsmobileapp.MainActivity'
)
capabilities_options = UiAutomator2Options().load_capabilities(desired_caps)
driver = webdriver.Remote('http://127.0.0.1:4723',options=capabilities_options)
time.sleep(5)
driver.implicitly_wait(40)
driver.find_element(AppiumBy.ACCESSIBILITY_ID,'Views').click()
time.sleep(2)
ui_scrollable =('new UiScrollable(new UiSelector().scrollable(true))'
'.setAsVerticalList()'
'.scrollIntoView(new UiSelector().text("Tabs"))')
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,ui_scrollable)
driver.find_element(AppiumBy.ACCESSIBILITY_ID,'Tabs').click()
driver.find_element(AppiumBy.ACCESSIBILITY_ID,'5. Scrollable').click()
ui_scrollable1 =('new UiScrollable(new UiSelector().scrollable(true))'
'.setAsHorizontalList()'
'.scrollIntoView(new UiSelector().text("TAB 14"))')
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,ui_scrollable1)
time.sleep(1)
driver.quit()
import time
from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.options.ios import XCUITestOptions
from appium.webdriver.appium_service import AppiumService
from appium.webdriver.common.appiumby import AppiumBy
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.actions.pointer_input import PointerInput
from selenium.webdriver.common.actions import interaction
from selenium.webdriver.common.actions.action_builder import ActionBuilder
desired_caps = dict(
deviceName = 'Android',
platformName = 'Android',
automationName = 'UiAutomator2',
platformVersion = '13',
app = '/Users/lucky/Downloads/app/Android/ApiDemos.apk'
# appActivity = 'com.swaglabsmobileapp.MainActivity'
)
capabilities_options = UiAutomator2Options().load_capabilities(desired_caps)
driver = webdriver.Remote('http://127.0.0.1:4723',options=capabilities_options)
time.sleep(5)
driver.implicitly_wait(40)
driver.find_element(AppiumBy.ACCESSIBILITY_ID,'Views').click()
time.sleep(2)
ui_scrollable =('new UiScrollable(new UiSelector().scrollable(true))'
'.setAsVerticalList()'
'.scrollIntoView(new UiSelector().text("Lists"))')
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,ui_scrollable)
driver.find_element(AppiumBy.ACCESSIBILITY_ID,'Lists').click()
driver.find_element(AppiumBy.ACCESSIBILITY_ID,'01. Array').click()
ui_scrollable1 =('new UiScrollable(new UiSelector().scrollable(true))'
'.setMaxSearchSwipes(2)'
'.scrollIntoView(new UiSelector().text("Curd"))')
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,ui_scrollable1)
time.sleep(1)
driver.quit()
import time
from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.options.ios import XCUITestOptions
from appium.webdriver.appium_service import AppiumService
from appium.webdriver.common.appiumby import AppiumBy
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.actions.pointer_input import PointerInput
from selenium.webdriver.common.actions import interaction
from selenium.webdriver.common.actions.action_builder import ActionBuilder
desired_caps = dict(
deviceName = 'Android',
platformName = 'Android',
automationName = 'UiAutomator2',
platformVersion = '13',
app = '/Users/lucky/Downloads/app/Android/ApiDemos.apk'
# appActivity = 'com.swaglabsmobileapp.MainActivity'
)
capabilities_options = UiAutomator2Options().load_capabilities(desired_caps)
driver = webdriver.Remote('http://127.0.0.1:4723',options=capabilities_options)
time.sleep(5)
driver.implicitly_wait(40)
driver.find_element(AppiumBy.ACCESSIBILITY_ID,'Views').click()
time.sleep(2)
ui_scrollable =('new UiScrollable(new UiSelector().scrollable(true))'
'.scrollForward()')
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,ui_scrollable)
time.sleep(2)
ui_scrollable1 =('new UiScrollable(new UiSelector().scrollable(true))'
'.scrollBackward()')
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,ui_scrollable1)
time.sleep(1)
driver.quit()
import time
from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.options.ios import XCUITestOptions
from appium.webdriver.appium_service import AppiumService
from appium.webdriver.common.appiumby import AppiumBy
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.actions.pointer_input import PointerInput
from selenium.webdriver.common.actions import interaction
from selenium.webdriver.common.actions.action_builder import ActionBuilder
desired_caps = dict(
deviceName = 'Android',
platformName = 'Android',
automationName = 'UiAutomator2',
platformVersion = '13',
app = '/Users/lucky/Downloads/app/Android/ApiDemos.apk'
# appActivity = 'com.swaglabsmobileapp.MainActivity'
)
capabilities_options = UiAutomator2Options().load_capabilities(desired_caps)
driver = webdriver.Remote('http://127.0.0.1:4723',options=capabilities_options)
time.sleep(5)
driver.implicitly_wait(40)
driver.find_element(AppiumBy.ACCESSIBILITY_ID,'Views').click()
time.sleep(2)
ui_scrollable =('new UiScrollable(new UiSelector().scrollable(true))'
'.setAsVerticalList()'
'.scrollIntoView(new UiSelector().text("Lists"))')
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,ui_scrollable)
driver.find_element(AppiumBy.ACCESSIBILITY_ID,'Lists').click()
driver.find_element(AppiumBy.ACCESSIBILITY_ID,'01. Array').click()
ui_scrollable1 =('new UiScrollable(new UiSelector().scrollable(true))'
'.scrollToEnd(5)')
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,ui_scrollable1)
time.sleep(2)
ui_scrollable2 =('new UiScrollable(new UiSelector().scrollable(true))'
'.scrollToBeginning(3)')
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR,ui_scrollable2)
time.sleep(1)
driver.quit()
Master tab and click actions with the actions chain and touch actions, moving to the login button via XPath with pointer down and up, then long press on API demos.
Start the APM server programmatically using an APM service, then stop it after execution. Verify the server is running and listening, and ensure the server terminates at the end.
Use the Appium inspector to record actions, identify elements, and generate code using coordinates for clicks and text entry, including tapping login and entering a username.
Learn how to automate system apps like the camera and calculator by configuring app package and app activity in your automation capabilities, using apk info to identify package and activity.
Automate a mobile web app by launching Chrome on a device, inspecting elements with Chrome inspect, and using Selenium to open Bing.com, locate by id, input text, and handle synchronization.
Discover the noReset option in Appium to preserve the app instance and previous session, avoiding the login screen and keeping cookies and login data intact.
this optional lecture guides configuring the ios web driver agent on mac by opening the apm web driver agent folder and building integration app, lib, and runner with automatic signing.
demonstrates automating an iOS sign-up flow with Appium and Python, handling email and password text fields, a checkbox, and a sign-up button using accessibility IDs and XPath.
Learn to handle switches in a UI kit catalog app using Appium with Python, identifying switches by accessibility ID or XPath, tapping, waiting, and navigating back.
Master handling alerts in Appium with Python, using accessibility IDs to interact with alerts view, simple alerts, and text entry dialogs, including confirm, cancel, and destructive choices.
Automate a date picker in Appium and Selenium with Python, using accessibility IDs when available and XPath for dynamic elements to select dates and times.
Develop a dynamic date for a date picker by computing tomorrow's date with datetime and timedelta, then format it as Friday 11th April using strftime patterns.
Automate mobile apps with Appium and Selenium using Python, overcoming header overlays. Identify elements by accessibility ID and XPath, and implement reliable tap operations for add to cart.
Automate an end-to-end SwagLabs scenario, including login, add to cart, checkout form with first name, last name, zip code, continue, scroll down, finish, back to home, and logout.
Switch from native to web view in iOS using Appium and Selenium with Python, detect web context, and interact with sign up and Google login via accessibility IDs and XPath.
Build the UI kit catalog app for a real iOS device, configure signing in Xcode, and start an Appium inspector session using the app’s .app path to connect.
Execute a Python automation script on a real iPhone by setting udid, platform version, and app info, then install, launch, and interact with the app on the device.
Explore how to create and use pytest markers to group, skip, and run specific tests, including defining custom markers in pytest.ini and applying parameterized data for login tests.
Learn how to implement PyTest soft assertions alongside hard assertions by building a custom soft assertion class, collecting errors, and asserting at the end while interacting with alerts view.
Discover how to order pytest tests with a plugin. The lecture shows installing it in PyCharm and setting numeric or before/after orders for login, search, create, delete, logout, and edit.
Learn to generate html and allure reports from pytest by installing the pytest-html plugin, running tests with --html reports.html, and viewing the resulting formatted report.
Learn to attach screenshots to test reports and capture screenshots on failure using pytest with app launcher scripts, including failure-triggered fixtures and png attachments.
Learn to detect and read qr code content in Python using OpenCV's qr code detector, decode the embedded url, and print the extracted data.
This lecture demonstrates implementing a page object model in Python, organizing page locators in dedicated classes, importing them into tests, and using data-driven sign up flows with a login page.
Explore how to set up and use GitHub for collaborative coding, including repositories, branches, initial commits, and syncing with PyCharm.
Build an Appium framework in python by organizing tests, page locators, and utilities into packages. Enable data driven testing with openpyxl and configparser, and parallel execution with pytest and allure.
Create a new login test by reusing the setup, teardown, and launcher logic, wire in the login page object with the Appium driver, and perform an alert interaction.
Learn to read the udid from a config.ini in an Appium test using a config reader, then pass it to your test to establish a device session.
Learn to generate and validate html and allure reports using pytest, json outputs, and a reports folder, with no such element exceptions handled by try-except blocks.
Learn how to trigger a Python-based appium and selenium framework from Jenkins, configure plugins and python paths on mac and windows, and manage a custom workspace and build steps.
learn how to fix Jenkins integration for Appium and Selenium tests by using three lines of code to activate the environment, map the .jenkins folder, and run tests.
Leverage Copilot to generate Appium framework code in Python from a defined UI context, create page objects and tests, and align with the project structure for iOS and Android.
Generate Appium framework code using Copilot in Python to build and execute a mobile automation flow on an iPhone simulator, including app installation and alert views.
Learn how to convert a swag labs login page into a cross-platform page factory framework for Android and iOS using Python in VSCode, with platform key locators and end-to-end testing.
Update the configuration data to pull platform information from the OS, set Android version 13 and device name, remove udid for Android, and include app activity.
Explore the Appium MCP overview: an ai-driven model context protocol that connects llm to Appium to control Android and iOS via natural language, with automatic UI element detection.
Configure an Appium mcp server in VS Code for GitHub Copilot by creating a .vscode/mcp.json, defining npx commands and android home environment, then reload and start the server.
Configure the apm mcp on the cursor editor by adding a custom mcp, specifying the apm mcp command and android home, and enabling the mcp for Python projects.
Install and configure cloud code cli to set up Appium MCP in VSCode, verify apm mcp, and connect to your organization cloud account with a light theme.
Create and configure a custom appium mcp server to launch the swag labs app on an ios simulator using a udid, then interact with the login screen.
Demonstrate interacting with app UI using image-based commands: capture an element as an image, convert to base64, and use image to locate and click elements on Android and iOS apps.
Learn to use the get image similarity command to compare base64-encoded expected and actual images for visual testing, returning a 0.1–1.0 score via a Python function using OpenCV.
import time
import base64
from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.options.ios import XCUITestOptions
from appium.webdriver.appium_service import AppiumService
from appium.webdriver.common.appiumby import AppiumBy
from selenium.webdriver.common.by import By
def load_image_base64(path: str):
with open(path, "rb") as f:
return base64.b64encode(f.read()).decode("ascii")
def compare_image(driver):
try:
reference1 = load_image_base64(image_file_path1)
reference2 = load_image_base64(image_file_path2)
driver.find_image_occurrence(base64_partial_image=reference1, base64_full_image=reference2)
print("compare success")
except Exception as e:
print("compare failed")
desired_caps = dict(
deviceName = 'Android',
platformName = 'Android',
automationName = 'UiAutomator2',
platformVersion = '13',
app = '/Users/lucky/Downloads/AutomationTesting/src/test/resources/appfiles/Android.SauceLabs.Mobile.Sample.app.2.7.1.apk',
appActivity = 'com.swaglabsmobileapp.MainActivity'
)
capabilities_options = UiAutomator2Options().load_capabilities(desired_caps)
driver = webdriver.Remote('http://127.0.0.1:4723',options=capabilities_options)
time.sleep(3)
image_file_path1 = '/Users/lucky/Desktop/image3.png'
image_file_path2 = '/Users/lucky/Desktop/image4.png'
compare_image(driver)
time.sleep(3)
driver.quit()
Appium-device-farm : plugin:
Designed to manage and streamline the creation of driver sessions for android & iOS on real devices & emulators and making it idea for CI/CD pipeline
Usage:
Remotely manage sessions for devices
Monitor & manage test sessions
Enhanced session Management
Automated device recognition
Advanced reporting
Parallel test execution
Installation from Appium-installer
How to start Appium-server:
appium --keep-alive-timeout 800 --use-plugins=device-farm --base-path /wd/hub —plugin-device-farm-platform=android
appium server -ka 800 --use-plugins=device-farm -pa /wd/hub --plugin-device-farm-platform=android
http://appiumserverurl/device-farm
Enable server logs :
appium -ka 800 --use-plugins=device-farm -pa /wd/hub --plugin-device-farm-platform=iOS --log ./df1.log
Reset:
appium plugin run device-farm reset
Android Code:
import time
from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.options.ios import XCUITestOptions
from appium.webdriver.appium_service import AppiumService
from appium.webdriver.common.appiumby import AppiumBy
from selenium.webdriver.common.by import By
desired_caps = dict(
deviceName = 'Android',
platformName = 'Android',
automationName = 'UiAutomator2',
platformVersion = '13',
app = 'file-1753690680109.apk',
appActivity = 'com.wdiodemoapp.MainActivity'
)
capabilities_options = UiAutomator2Options().load_capabilities(desired_caps)
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',options=capabilities_options)
time.sleep(3)
driver.find_element(By.XPATH,'//android.widget.Button[@content-desc="Forms"]/android.widget.TextView').click()
time.sleep(2)
driver.find_element(By.XPATH,'//android.widget.EditText[@content-desc="text-input"]').send_keys("12345")
time.sleep(3)
driver.quit()
# appium_service.stop()
iOS code:
import datetime
import time
from appium import webdriver
from appium.options.ios import XCUITestOptions
from appium.webdriver.appium_service import AppiumService
from appium.webdriver.common.appiumby import AppiumBy
from selenium.webdriver.common.by import By
desired_caps = dict(
deviceName = 'iPhone',
platformName = 'iOS',
automationName = 'XCUITest',
platformVersion = '18.1',
# app = '/Users/lucky/Downloads/app/iOS/Verve.app',
app = '/Users/lucky/Library/Developer/Xcode/DerivedData/UIKitCatalog-cummyqhwpursfvfqelhxxzpuioie/Build/Products/Debug-iphonesimulator/UIKitCatalog.app',
udid = '2E3F1132-0B7C-41BD-A09A-8311B22EF112'
)
# appium_service = AppiumService()
# appium_service.start()
capabilities_options = XCUITestOptions().load_capabilities(desired_caps)
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',options=capabilities_options)
time.sleep(3)
driver.implicitly_wait(45)
# date picker
driver.find_element(AppiumBy.ACCESSIBILITY_ID,"Date Picker").click()
time.sleep(1)
driver.find_element(AppiumBy.XPATH,"(//*[@type='XCUIElementTypeButton'])[3]").click()
days = ["Monday", "Tuesday","Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
tomorrow = datetime.datetime.now() + datetime.timedelta(days=1)
print(tomorrow.date())
# print()
driver.find_element(AppiumBy.ACCESSIBILITY_ID,tomorrow.strftime("%A" + " %d" + " %B")).click()
time.sleep(1)
driver.find_element(AppiumBy.XPATH,"//XCUIElementTypeButton[@name='UIKitCatalog']").click()
time.sleep(3)
driver.quit()
# appium_service.stop()
npm install -g appim-doctor
Installation on MAC:
brew install ffmpeg
ffmpeg -version
windows:
https://www.ffmpeg.org/download.html
Select Windows
Select Windows builds from gyan.dev
Download ffmpeg-git-full.7z under latest git master branch build
Unzip it , place it in C drive n rename it
Launch CMD prompt as admin
setx /m PATH “/Users/lucky/Downloads/ffmpeg/bin;%PATH%”
ffmpeg -version
Android Code :
import time
from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.options.ios import XCUITestOptions
from appium.webdriver.appium_service import AppiumService
from appium.webdriver.common.appiumby import AppiumBy
from selenium.webdriver.common.by import By
desired_caps = dict(
deviceName = 'Android',
platformName = 'Android',
automationName = 'UiAutomator2',
platformVersion = '13',
app = '/Users/lucky/Downloads/app/Android/Android-NativeDemoApp-0.4.0.apk',
appActivity = 'com.wdiodemoapp.MainActivity',
)
capabilities_options = UiAutomator2Options().load_capabilities(desired_caps)
capabilities_options.set_capability("df:recordVideo",True)
capabilities_options.set_capability("df:build","Android Smoke 3 - 13.0")
# capabilities_options.set_capability("df:liveVideo",True)
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',options=capabilities_options)
time.sleep(3)
driver.find_element(By.XPATH,'//android.widget.Button[@content-desc="Forms"]/android.widget.TextView').click()
time.sleep(2)
driver.find_element(By.XPATH,'//android.widget.EditText[@content-desc="text-input"]').send_keys("12345")
time.sleep(3)
driver.quit()
# appium_service.stop()
iOS Code:
import datetime
import time
from appium import webdriver
from appium.options.ios import XCUITestOptions
from appium.webdriver.appium_service import AppiumService
from appium.webdriver.common.appiumby import AppiumBy
from selenium.webdriver.common.by import By
desired_caps = dict(
deviceName = 'iPhone',
platformName = 'iOS',
automationName = 'XCUITest',
platformVersion = '18.1',
# app = '/Users/lucky/Downloads/app/iOS/Verve.app',
app = '/Users/lucky/Library/Developer/Xcode/DerivedData/UIKitCatalog-cummyqhwpursfvfqelhxxzpuioie/Build/Products/Debug-iphonesimulator/UIKitCatalog.app',
udid = '2E3F1132-0B7C-41BD-A09A-8311B22EF112'
)
# appium_service = AppiumService()
# appium_service.start()
capabilities_options = XCUITestOptions().load_capabilities(desired_caps)
capabilities_options.set_capability("df:recordVideo",True)
capabilities_options.set_capability("df:build","iOS Smoke 4 - 18.1")
# capabilities_options.set_capability("df:liveVideo",True)
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',options=capabilities_options)
time.sleep(3)
driver.implicitly_wait(45)
# date picker
driver.find_element(AppiumBy.ACCESSIBILITY_ID,"Date Picker").click()
time.sleep(1)
driver.find_element(AppiumBy.XPATH,"(//*[@type='XCUIElementTypeButton'])[3]").click()
days = ["Monday", "Tuesday","Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
tomorrow = datetime.datetime.now() + datetime.timedelta(days=1)
print(tomorrow.date())
# print()
driver.find_element(AppiumBy.ACCESSIBILITY_ID,tomorrow.strftime("%A" + " %d" + " %B")).click()
time.sleep(1)
driver.find_element(AppiumBy.XPATH,"//XCUIElementTypeButton[@name='UIKitCatalog']").click()
time.sleep(3)
driver.quit()
# appium_service.stop()
Android Code :
import time
from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.options.ios import XCUITestOptions
from appium.webdriver.appium_service import AppiumService
from appium.webdriver.common.appiumby import AppiumBy
from selenium.webdriver.common.by import By
desired_caps = dict(
deviceName = 'Android',
platformName = 'Android',
automationName = 'UiAutomator2',
platformVersion = '13',
app = '/Users/lucky/Downloads/app/Android/Android-NativeDemoApp-0.4.0.apk',
appActivity = 'com.wdiodemoapp.MainActivity',
)
capabilities_options = UiAutomator2Options().load_capabilities(desired_caps)
capabilities_options.set_capability("df:recordVideo",True)
capabilities_options.set_capability("df:build","Android Smoke 3 - 13.0")
# capabilities_options.set_capability("df:liveVideo",True)
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',options=capabilities_options)
time.sleep(3)
driver.find_element(By.XPATH,'//android.widget.Button[@content-desc="Forms"]/android.widget.TextView').click()
time.sleep(2)
driver.find_element(By.XPATH,'//android.widget.EditText[@content-desc="text-input"]').send_keys("12345")
time.sleep(3)
driver.quit()
# appium_service.stop()
iOS Code:
import datetime
import time
from appium import webdriver
from appium.options.ios import XCUITestOptions
from appium.webdriver.appium_service import AppiumService
from appium.webdriver.common.appiumby import AppiumBy
from selenium.webdriver.common.by import By
desired_caps = dict(
deviceName = 'iPhone',
platformName = 'iOS',
automationName = 'XCUITest',
platformVersion = '18.1',
# app = '/Users/lucky/Downloads/app/iOS/Verve.app',
app = '/Users/lucky/Library/Developer/Xcode/DerivedData/UIKitCatalog-cummyqhwpursfvfqelhxxzpuioie/Build/Products/Debug-iphonesimulator/UIKitCatalog.app',
udid = '2E3F1132-0B7C-41BD-A09A-8311B22EF112'
)
# appium_service = AppiumService()
# appium_service.start()
capabilities_options = XCUITestOptions().load_capabilities(desired_caps)
capabilities_options.set_capability("df:recordVideo",True)
capabilities_options.set_capability("df:build","iOS Smoke 4 - 18.1")
# capabilities_options.set_capability("df:liveVideo",True)
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',options=capabilities_options)
time.sleep(3)
driver.implicitly_wait(45)
# date picker
driver.find_element(AppiumBy.ACCESSIBILITY_ID,"Date Picker").click()
time.sleep(1)
driver.find_element(AppiumBy.XPATH,"(//*[@type='XCUIElementTypeButton'])[3]").click()
days = ["Monday", "Tuesday","Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
tomorrow = datetime.datetime.now() + datetime.timedelta(days=1)
print(tomorrow.date())
# print()
driver.find_element(AppiumBy.ACCESSIBILITY_ID,tomorrow.strftime("%A" + " %d" + " %B")).click()
time.sleep(1)
driver.find_element(AppiumBy.XPATH,"//XCUIElementTypeButton[@name='UIKitCatalog']").click()
time.sleep(3)
driver.quit()
# appium_service.stop()
ElementID: this is mandatory whenever u r using mobile gesture commands
Swipe
Scroll
Longpress
drag
What is elementID: its a random hexadecimal code representing the element in the session which is returned by findByElement API
How can I find elementID??
Appium inspector
Can we use id from inspector in program directly???
17000000-0000-0000-1B10-000000000000
17000000-0000-0000-3016-000000000000
17000000-0000-0000-1817-000000000000
import time
from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.options.ios import XCUITestOptions
from appium.webdriver.appium_service import AppiumService
from appium.webdriver.common.appiumby import AppiumBy
from selenium.webdriver.common.by import By
desired_caps = dict(
deviceName = 'Android',
platformName = 'Android',
automationName = 'UiAutomator2',
platformVersion = '13',
app = '/Users/lucky/Downloads/app/Android/Android-NativeDemoApp-0.4.0.apk',
appActivity = 'com.wdiodemoapp.MainActivity'
)
capabilities_options = UiAutomator2Options().load_capabilities(desired_caps)
driver = webdriver.Remote('http://127.0.0.1:4723',options=capabilities_options)
time.sleep(3)
obj = driver.find_element(By.XPATH,'//android.widget.Button[@content-desc="Login"]/android.widget.TextView')
print(obj.id)
time.sleep(3)
driver.quit()
# appium_service.stop()
Learn to implement swipe left and swipe right gestures in an iOS app using Appium with Python, configuring an APM inspector session, and updating locators with accessibility IDs and XPath.
Learn to perform double tap gestures on Android and iOS using the Appium gestures plugin, locating elements by accessibility id and applying double tap on the star and increment button.
import time
from appium import webdriver
from appium.options.ios import XCUITestOptions
from appium.webdriver.appium_service import AppiumService
from appium.webdriver.common.appiumby import AppiumBy
from selenium.webdriver.common.by import By
desired_caps = dict(
deviceName = 'iPhone',
platformName = 'iOS',
automationName = 'XCUITest',
platformVersion = '18.1',
app = '/Users/lucky/Downloads/app/iOS/Verve.app',
# app = '/Users/lucky/Library/Developer/Xcode/DerivedData/UIKitCatalog-cummyqhwpursfvfqelhxxzpuioie/Build/Products/Debug-iphonesimulator/UIKitCatalog.app',
udid = '2E3F1132-0B7C-41BD-A09A-8311B22EF112'
)
# appium_service = AppiumService()
# appium_service.start()
capabilities_options = XCUITestOptions().load_capabilities(desired_caps)
# capabilities_options.set_capability("Plugins","gestures")
driver = webdriver.Remote('http://127.0.0.1:4723',options=capabilities_options)
time.sleep(10)
# driver.find_element(by=AppiumBy.ACCESSIBILITY_ID, value='Steppers').click()
list_view = driver.find_element(by=AppiumBy.XPATH, value='//XCUIElementTypeButton[@name="Sign up"]')
driver.execute_script('gesture: longPress',
{'elementId': list_view.id,
'duration': 8000,
'pressure':0.5})
time.sleep(9)
driver.quit()
# appium_service.stop()
Create and test tap gestures in Appium inspector's gestures tab by building move, pointer down, pause, and pointer up actions on screen coordinates, then export or import JSON for reuse.
Explore Appium Inspector gestures tab to perform a long press on a list item, selecting the element and applying a four-second press to reveal options.
Learn how to perform a double tap gesture in appium inspector's gesture tab to toggle a checkbox by simulating pointer down, wait, and pointer up.
Learn to perform scroll operations in Appium inspector using gestures tab, including move, pointer down, and pointer up to perform full scrolls across elements and date widgets, with adjustable speed.
Learn how to identify web page objects with locators in Selenium, using id, class, or name, and when needed XPath or CSS selectors via HTML inspection.
Identify element properties via f12 inspect, copy default properties or create xpath, compare locators like css and xpath, and apply them in selenium python scripts or selenium ide recordings.
Explore how to use Selenium Python locators with WebDriver to identify elements by id, class name, css selector, link text, partial link text, tag name, and XPath, then perform actions.
Learn to handle dropdowns in Selenium with Python using send keys or the Select class to pick by index, value, or visible text, and access all options.
Learn to handle frames in selenium python by switching to a frame with its class name, perform actions, and return to the main page with default content.
Learn to perform drag and drop in Selenium Python using action chains, with drag and drop by offset when destination is unknown, and ensure frame switching and correct driver instantiation.
Learn to handle tooltips in Selenium Python by inspecting elements, switching frames, and using get_attribute('title') to print the tooltip message.
Master the Selenium Python mouseover operation using actions to move to elements, reveal options such as before you fly and travel information, and click the desired item with XPath.
Master handling multiple browser windows with Selenium Python by switching to new windows, switching frames, and locating elements by id or XPath in a Salesforce scenario.
Learn data driven testing in Python by reading external Excel data with xlrd, opening the workbook and sheet, and iterating rows to feed inputs into Selenium tests.
Learn Python unittest and Selenium basics, focusing on setup and teardown to run multiple test cases with one browser instance, including login and create user.
Learn to set up git and GitHub, configure your environment, and push and share code in repositories for collaborative automation projects.
This lecture explains how to use pytest markers to group, skip, and run specific tests, define custom markers in a pytest.ini, and implement parameterized tests with data-driven inputs.
Explore parallel execution of pytest-based selenium and appium tests by using a fixture with parameterization to launch chrome and safari concurrently, demonstrating two-thread runs.
** Complete Python path: Selenium (Web) + Appium 3 (Mobile) from scratch with projects **
Learn Appium and Selenium automation using Python — Selenium WebDriver for web testing, Appium 3 for Android & iOS mobile testing, Pytest frameworks, Page Object Model, and real projects.
This Appium and Selenium Python course is built for manual testers, beginners, and QA engineers who want one practical path covering web + mobile automation with Python.
What you will learn in this course:
- Python programming fundamentals required for automation
- Selenium WebDriver basics and advanced web automation
- Locators, waits, assertions, and real website scenarios
- Pytest framework for Selenium
- Appium 3 features, setup, and configuration
- Android and iOS mobile automation with Appium Python
- Pytest framework for Appium and Page Factory / Page Object patterns
- Framework design, plugins, and project-based practice
- AI-assisted concepts for modern Python automation workflows
Keywords covered in this course:
Appium Python, Selenium Python, Appium 3, Selenium WebDriver, Appium mobile automation, Selenium automation testing, Python automation testing, Pytest framework, Page Object Model, Android automation, iOS automation, web and mobile automation.
This course combines Selenium Python for web and Appium 3 Python for mobile so you can build end-to-end automation skills for real projects and interviews.
If you are searching for Appium Python, Selenium Python, Appium and Selenium, or Python web and mobile automation training in one course, this course is for you.
Course is updated on 11-December-2025 with below concepts:
Overview on AI
Overview on LLM
Overview on RAG
Overview on Generative AI
Overview on Memory
Overview on AI Agent
Overview on LangChain & LangGraph
Overview on MCP Server
Overview on Human In the loop , Hallucination & Guardrails
Overview on Fine-Tuning
Overview on Context
Overview on Prompts
ChatGPT vs CoPilot vs CURSOR
Overview on OpenAI
Overview on AI Models
Overview on n8n workflow
Generate API Key in OpenAI
Create workflow in n8n
Create Public Chat in n8n workflow
Overview on OpenAI Tokens
CURSOR - Create a Chrome Extension for Record & Playback
CURSOR - Create an OTP Shield Mobile APP
Install GITHUB Copilot to PyCharm Editor
Generate Appium Python Program using CoPilot in PyCharm
Generate framework code using CoPilot
Course is updated on 09-08-2025 with below topics
When to use ID & Xpath - doubts clarification video added at lecture 31
Course is updated on 04-08-2025 with below topics
Scroll using UiScrollable
Scroll using UiScrollable - setAsVerticalList
Scroll using UiScrollable - setAsHorizontalList
Scroll using UiScrollable - setMaxSearchSwipes
Scroll using UiScrollable - scrollForward & scrollBackward
Scroll using UiScrollable - ScrollToEnd & scrollToBeginning
Course is updated on 03-08-2025 with below topics
Parallel Execution using systemPort & wdaLocalPort
Course is updated on 02-08-2025 with below topics
Appium-gestures-plugin : DoubleTap
Appium-gestures-plugin : longPress
Course is updated on 01-08-2025 with below topics
Overview on ElementID
Appium-gestures-plugin installation & overview
Appium-gestures-plugin : Swipe Up & Swipe Down- Android
Appium-gestures-plugin : Swipe Up & Swipe Down- iPhone
Appium-gestures-plugin : Swipe Left & Swipe Right
Appium-gestures-plugin : Drag and Drop
Course is updated on 31-07-2025 with below topics
Coordinates identification which covers X , Y, Height & Width
Course is updated on 30-07-2025 with below topics
We added a new section in which we are going to upload Q & A's & Student's requested topics, please find below section name "Interview Question & Answers & Student Requested Topics"
Course is updated on 29-07-2025 with below topics
Appium-device-farm plugin - Video Recording Configuration
Appium-device-farm plugin - Video Recording Implementation
Course is updated on 28-07-2025 with below topics
find_image_occurrence command with example
appium-device-farm plugin configuration , implementation with example
Course is updated on 27-07-2025 with below topics
getImagesSimilarity command with example
Course is updated on 26-07-2025 with below topics
Appium-Dashboard Plugin with examples
Appium-Image Plugin with examples
Course is updated on 08-June-2025:
Customised framework for Mobile & Web - Single framework that supports Mobile Apps & Web application
Appium & Selenium using Python - Master Mobile & Web automation testing with APPIUM 2.X on Android & iOS & devices, Selenium Webdriver
This course is designed for complete beginners.
If you are a complete beginner on Appium or Selenium or Python this course helps you to master the tool. Very basic step by step videos to guide you from scratch
Get started with Appium & Selenium using Python .
APPIUM topics :
Introduction to Python
Install Python on Windows
Install Python on MAC
Overview on editors and install PyCharm
Configure Eclipse editor for python scripting
Creating a project and adding comments to PyCharm
Data types and examples
Examples on String data type
Overview on List with examples
If Statement and examples
For Loop statements with examples
While Loop statements with examples
overview on functions and import
Introduction to Class and Object
Importance of HOMEBREW
APPIUM Python Configuration
Overview on Appium 2.X
Install Appium 2.X , Install Drivers for Android & iOS executions
Overview on Drivers & Options
Appium Python Program to Launch Android & iOS App
Overview on USB Debugging Mode & Connect Real Android Phone
Appium Inspector - Overview , Installation, Example
Scenario : Launch app & Handle Button, Text field
Scenario : Handling Alerts, Text Fields , Buttons- Singup & Login flow
Scenario : Handling Switch, Dropdown & Alert Button
Scenario : Handling DropDown using FindElements, GetAttribute
Scenario : ScrollDown using latest actions
Scenario : TAP & LongPress using latest actions
Overview on Synchronisation with examples
Start APPIUM Server using a Program
Appium Inspector ==> Record & Identify Elements using Coordinates
Examples on Keyboard Handling
Handling Hybrid App ==> Switching Context
Handling SYSTEM Apps - Camera & Calculator
Scenario - WEB APP Handling
Screenshot & Video capturing
noReset with example
OPTIONAL - MAC CONFIGURATION OVERVIEW
Establish Inspector Session for UIKitCatalog app on simulator
Handling Buttons , Text Fields, Checkbox on Simulator
Handling of Switches
Handling Alerts
Handling Date Picker
Handling Picker View
Switch Context - From Native to Web View
Tap using coordinates
Perform Scroll down on the app
Configuring PyTest & Executing Basic functions
PyTest Fixtures & Decorators with examples
PyTest Marker, Parameterised Markers with examples
PyTest Hard Assertions, Soft Assertions
PyTest Launch App on iPhone Simulator
Pytest Parameters in Launching iOS App
PyTest Reports - HTML & ALLURE with examples
PyTest - Capture Screenshot & Screenshot on Failure
Parallel Execution on Simulators
Generate Logs
Reading Data from a Config File
Read Data From Excel & Write Data in Excel
Framework - Page Factory Model
Overview on GITHUB
Appium Framework Part - Jenkins Integration
Selenium Topics:
Install Python on Windows
Install Python on MAC
Overview on editors and install PyCharm
Configure Eclipse editor for python scripting
Creating a project and adding comments to PyCharm
Data types and examples
Examples on String data type
Overview on List with examples
If Statement and examples
For Loop statements with examples
While Loop statements with examples
overview on functions and import
Introduction to Class and Object
Why people prefer python than java for selenium
Overview on Selenium
Record and playback options in Selenium
Install selenium for python
Scenario 1: First automation script in pycharm
Overview on locators
How to use locators in a program
Scenario 2: Perform search operation on bing
Run test script without specifying driver exe file
Scenario 3: Handling checkboxes
Scenario 4: Handling RadioButtons
Scenario 5: Handling Dropdown
Scenario 6: Create a test script using findElements - Part 1
Scenario 8: Perform tab operation using sendkeys command
Scenario 9: Handling frames
Scenario 10: Selecting a date from date picker
Scenario 11: Handling drag n drop
Scenario 13: How to capture coordinates of an object
Scenario 14: Handle tooltips
Scenario 15: Handle Auto Suggestions and capture screenshot
Scenario 16: Handle Mouse Hover
Scenario 18: Handling multiple windows
Scenario 19: Handling Webtables
Scenario 20: Examples on wait
Scenario 21: Handling alerts
Scenario 22: Handling Javascripts
Scenario 23: Data Driven testing with examples
Overview on unittest framework with examples
Generate test execution report
Page Object Model with example
Page factory model with example
Overview on GITHub
Execute unittest from Jenkins
Introduction to framework with example
Configuring PyTest & Executing Basic functions
PyTest Fixtures & Decorators with examples
PyTest Marker, Parameterised Markers with examples
PyTest Hard Assertions, Soft Assertions
Capture Screenshot & Screenshot on Failure
Generate HTML & Allure Reports
Reusable Logics - Utilities -Generate Logs
Reusable Logics - Utilities -Reading Data from a Config File
Reusable Logics - Utilities -Read Data From Excel & Write Data in Excel
Selenium Framework - Page Factory Model - GIT HUB & Jenkins Pipeline
PyTest features
Data Driven & conftest utilities
Selenium Framework - Page Factory Model - GIT HUB & Jenkins Pipeline
PyTest - Login to Sauce Demo application
Lets Get Started... Wish you Good luck