Ejemplo de prueba en Ruby
Not for use with personal data
Asegúrese de consultar la guía completa de configuración de Appium con axe DevTools Mobile si usted acaba de empezar, o más ejemplos de axe DevTools Mobile para Appium en otros idiomas.
Ejemplo completo con UIAutomator2
require 'appium_lib'
require 'rspec'
describe 'DebugTest' do
before(:all) do
# The axeSettings object still accepts apiKey and axeServiceUrl but is not required
# if you are going to make one time before(:all) call to 'mobile: axeStartSession'
@axe_settings = {
tags: ['appium', 'qa'],
uploadToDashboard: true,
ignoreRules: ['ScreenOrientation']
}
@api_key = '<YOUR_API_KEY>'
@project_id = '<YOUR_DEV_HUB_PROJECT_ID>'
caps = {
platformName: 'Android',
deviceName: 'Android',
appPackage: '<YOUR_APP_PACKAGE_NAME>',
appActivity: '.MainActivity',
automationName: 'AxeUiAutomator2',
uiautomator2ServerLaunchTimeout: 60000,
uiautomator2ServerInstallTimeout: 60000,
adbExecTimeout: 60000,
ignoreHiddenApiPolicyError: true,
disableWindowAnimation: true,
waitForIdle: true,
commandTimeout: 300,
noReset: false,
fullReset: false
}
appium_opts = {
caps: caps,
appium_lib: {
server_url: 'http://localhost:4723/'
}
}
@driver = Appium::Driver.new(appium_opts, true)
@driver.start_driver
# Make one time call to setup your session for posting to Dev Hub.
# This also accepts axeServiceUrl in case of private instance.
axe_auth_settings = {
apiKey: @api_key,
projectId: @project_id
}
@driver.execute_script('mobile: axeStartSession', axe_auth_settings)
end
after(:all) do
@driver.driver_quit if @driver
end
def dismiss_system_ui_error
begin
system_popup = @driver.find_element(:xpath, '//*[contains(@text, "System UI")]')
wait = Selenium::WebDriver::Wait.new(timeout: 5)
wait.until { system_popup.displayed? }
if system_popup.displayed?
wait_button = @driver.find_element(:xpath, '//*[contains(@text, "Wait")]')
wait = Selenium::WebDriver::Wait.new(timeout: 5)
wait.until { wait_button.displayed? }
wait_button.click
puts "Dismissed the System UI error popup by clicking 'Wait'."
end
rescue Selenium::WebDriver::Error::TimeoutError, Selenium::WebDriver::Error::NoSuchElementError => e
puts 'No System UI error popup appeared.'
end
end
def launch_app
begin
@driver.terminate_app('<YOUR_APP_PACKAGE_NAME>')
sleep(1) # Give the app time to fully terminate
rescue StandardError => e
puts "App was not running or failed to terminate: #{e.message}"
end
@driver.activate_app('<YOUR_APP_PACKAGE_NAME>')
begin
element = @driver.find_element(:xpath, '//*[contains(@text, "Screen Name")]')
wait = Selenium::WebDriver::Wait.new(timeout: 30)
wait.until { element.displayed? }
rescue Selenium::WebDriver::Error::TimeoutError => e
dismiss_system_ui_error
# Try again after dismissing the error (if not, then fail)
element = @driver.find_element(:xpath, '//*[contains(@text, "Screen Name")]')
wait = Selenium::WebDriver::Wait.new(timeout: 30)
wait.until { element.displayed? }
end
end
before(:each) do
launch_app
end
# Now since your session is authenticated you can keep making 'mobile: axeScan' call
# like below in test1 and test2. The scans will be uploaded to the dashboard and also grouped in Dev Hub.
it 'test1' do
element = @driver.find_element(:xpath, '//*[contains(@text, "Screen Name")]')
wait = Selenium::WebDriver::Wait.new(timeout: 10)
wait.until { element.displayed? }
puts element.text
appium_scan_result = @driver.execute_script('mobile: axeScan', @axe_settings)
results = appium_scan_result['axeRuleResults']
puts "debug: Total results: #{results.length}"
end
it 'test2' do
element = @driver.find_element(:xpath, '//*[contains(@text, "Screen Name")]')
wait = Selenium::WebDriver::Wait.new(timeout: 10)
wait.until { element.displayed? }
element.click
@driver.find_element(:xpath, '//*[contains(@text, "announced by a screen")]')
appium_scan_result = @driver.execute_script('mobile: axeScan', @axe_settings)
results = appium_scan_result['axeRuleResults']
puts "debug: Total results: #{results.length}"
end
end
Ejemplo completo con XCUITest
require 'appium_lib'
require 'rspec'
describe 'iOS Maps DebugTest' do
before(:all) do
# The axeSettings object still accepts apiKey and axeServiceUrl but is not required
# if you are going to make one time before(:all) call to 'mobile: axeStartSession'
@axe_settings = {
tags: ['appium', 'qa', 'ios'],
uploadToDashboard: true,
ignoreRules: ['ScreenOrientation']
}
@api_key = '<YOUR_API_KEY>'
@project_id = '<YOUR_DEV_HUB_PROJECT_ID>'
# Matching the working sample - minimal capabilities
caps = {
platformName: 'iOS',
automationName: 'AxeXCUITest',
udid: '<YOUR_DEVICE_OR_SIMULATOR_UDID>',
bundleId: 'com.apple.Maps',
wdaLaunchTimeout: 960000 # 16 minutes like the working sample
# NOT specifying platformVersion - let it auto-detect
}
appium_opts = {
caps: caps,
appium_lib: {
server_url: 'http://127.0.0.1:4723/'
}
}
@driver = Appium::Driver.new(appium_opts, true)
@driver.start_driver
# Make one time call to setup your session for posting to Dev Hub.
# This also accepts axeServiceUrl in case of private instance.
axe_auth_settings = {
apiKey: @api_key,
projectId: @project_id,
axeServiceUrl: 'https://mobile-qa.dequelabs.com'
}
@driver.execute_script('mobile: axeStartSession', axe_auth_settings)
end
after(:all) do
if @driver
sleep(1)
@driver.driver_quit
end
end
def launch_app
@driver.activate_app('com.apple.Maps')
end
before(:each) do
launch_app
end
# Now since your session is authenticated you can keep making 'mobile: axeScan' call
# like below in test1 and test2. The scans will be uploaded to the dashboard and also grouped in Dev Hub.
it 'test1 - scan main screen' do
appium_scan_result = @driver.execute_script('mobile: axeScan', @axe_settings)
results = appium_scan_result['axeRuleResults']
puts "debug: Total results: #{results.length}"
end
it 'test2 - click search and scan' do
appium_scan_result = @driver.execute_script('mobile: axeScan', @axe_settings)
results = appium_scan_result['axeRuleResults']
puts "debug: Total results: #{results.length}"
end
end
