AppPrsim
A Multi-platform Page Object Model DSL for Appium
Installation
Add this line to your application's Gemfile:
gem 'app_prism'
And then execute:
$ bundle install
Or install it yourself as:
$ gem install app_prism
Usage
Here's an overview of how SitePrism is designed to be used:
# define your app screens
class BaseScreen
include AppPrism
element :app_icon, android: { id: 'ViewActivityIntro_AppLogo' },
ios: { xpath: '//XCUIElementTypeIcon[@name="some name here"]' }
element :notification, android: { accessibility_id: 'NotificationShortLookView' },
ios: { accessibility_id: 'NotificationShortLookView' }
element :toolbar_done, android: { xpath: '//android.widget.LinearLayout[@content-desc="ViewActivityIntro_Toolbar"]/android.widget.TextView' },
ios: { xpath: '//XCUIElementTypeToolbar[@name="Toolbar"]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeButton[@name="DONE" or @name="Done"]' }
def wheelpicker
@driver.find_elements(:class_name, 'XCUIElementTypePickerWheel').first
end
end
class LogInScreen < BaseScreen
element :log_in_button, android: { id: 'ButtonRoundCorner_CustomImageView_Icon' },
ios: { accessibility_id: 'LOG IN' }
end
# define sections used on multiple screens or multiple times on one screen
class ScreenDialog < AppPrism::Sections::ScreenSection
element :title, android: { id: 'title' },
ios: { xpath: '//XCUIElementTypeStaticText[@name="Skip account"]' }
element :yes, android: { id: 'FragmentTwoButtonAlertDialog_Button_Positive' },
ios: { accessibility_id: 'Yes' }
element :no, android: { id: 'FragmentTwoButtonAlertDialog_Button_Negative' },
ios: { accessibility_id: 'No' }
end
# Basic usage in tests are very similar to usage of Site Prism gem for Web UI test automation
# the only difference is that page factory approach is used to better manage screens interractions
Given(/^I launch the app$/) do
if ios?
accept_ios_notification
else
wait_while_app_is_loading
end
end
Given(/^I swipe demo screens to the Sign in form$/) do
wait_for_activity_to_load 'IntroductionActivity' if android?
wait_for_element 'view pager', 'welcome'
6.times do
swipe 'left'
end
end
Then(/^I see relevant skip sign in notification dialog$/) do
expect(on(WelcomeScreen).screen_dialog.title_element.text).to include 'some text'
end
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/bazarnyi/app_prism. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.
License
The gem is available as open source under the terms of the MIT License.
Code of Conduct
Everyone interacting in the AppPrism project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.