mirror of
https://github.com/appium/appium.git
synced 2026-01-15 06:39:54 -06:00
112 lines
3.0 KiB
Ruby
112 lines
3.0 KiB
Ruby
# This example automates a test of the Android example notepad app.
|
|
#
|
|
# To run this example, make sure you've run:
|
|
# $ bundle install
|
|
#
|
|
# And set the environment variables:
|
|
# SAUCE_USERNAME = your-sauce-username
|
|
# SAUCE_ACCESS_KEY = your-sauce-key
|
|
#
|
|
# Then just:
|
|
# $ rspec android_on_sauce.rb
|
|
#
|
|
# Of note compared to the iOS example, here we're giving the package and
|
|
# activity, no OS and an empty browserName
|
|
#
|
|
# Of note compared to the non-sauce examples, you need to host your app
|
|
# somewhere Sauce Labs' cloud can fetch it for your test.
|
|
|
|
require "selenium-webdriver"
|
|
require 'selenium/webdriver/remote/http/persistent'
|
|
require "rspec"
|
|
require "rest_client"
|
|
|
|
SAUCE_USERNAME = ENV['SAUCE_USERNAME']
|
|
SAUCE_ACCESS_KEY = ENV['SAUCE_ACCESS_KEY']
|
|
|
|
describe "Notepad" do
|
|
before :each do
|
|
http_client = ::Selenium::WebDriver::Remote::Http::Persistent.new
|
|
http_client.timeout = 300 # Allow for slow network or boot time
|
|
|
|
@driver = Selenium::WebDriver.for(
|
|
:remote,
|
|
:desired_capabilities => desired_caps,
|
|
:url => server_url,
|
|
:http_client => http_client
|
|
)
|
|
|
|
http_client.timeout = 90
|
|
end
|
|
|
|
after(:each) do
|
|
# Get the success by checking for assertion exceptions,
|
|
# and log them against the job, which is exposed by the session_id
|
|
job_id = @driver.send(:bridge).session_id
|
|
update_job_success(job_id, example.exception.nil?)
|
|
@driver.quit
|
|
end
|
|
|
|
it "can create and save new notes" do
|
|
new_button = @driver.find_element(:name, "New note")
|
|
new_button.click
|
|
|
|
text_field = @driver.find_element(:tag_name, "textfield")
|
|
text_field.send_keys "This is a new note, from Ruby"
|
|
|
|
save_button = @driver.find_element(:name, "Save")
|
|
save_button.click
|
|
|
|
notes = @driver.find_elements(:tag_name, "text")
|
|
puts "The number of notes is: #{notes.length}"
|
|
notes[2].text.should eq "This is a new note, from Ruby"
|
|
end
|
|
end
|
|
|
|
def desired_caps
|
|
{
|
|
"device" => "Android",
|
|
"browserName" => "",
|
|
"version" => "4.2",
|
|
"app" => "http://appium.s3.amazonaws.com/NotesList.apk",
|
|
"app-package" => "com.example.android.notepad",
|
|
"app-activity" => ".NotesList"
|
|
}
|
|
end
|
|
|
|
def auth_details
|
|
un = SAUCE_USERNAME
|
|
pw = SAUCE_ACCESS_KEY
|
|
|
|
unless un && pw
|
|
STDERR.puts <<-EOF
|
|
Your SAUCE_USERNAME or SAUCE_ACCESS_KEY environment variables
|
|
are empty or missing.
|
|
|
|
You need to set these values to your Sauce Labs username and access
|
|
key, respectively.
|
|
|
|
If you don't have a Sauce Labs account, you can get one for free at
|
|
http://www.saucelabs.com/signup
|
|
EOF
|
|
|
|
exit
|
|
end
|
|
|
|
return "#{un}:#{pw}"
|
|
end
|
|
|
|
def server_url
|
|
return "http://#{auth_details}@ondemand.saucelabs.com:80/wd/hub"
|
|
end
|
|
|
|
def rest_jobs_url
|
|
"https://#{auth_details}@saucelabs.com/rest/v1/#{SAUCE_USERNAME}/jobs"
|
|
end
|
|
|
|
# Because WebDriver doesn't have the concept of test failure, use the Sauce
|
|
# Labs REST API to record job success or failure
|
|
def update_job_success(job_id, success)
|
|
RestClient.put "#{rest_jobs_url}/#{job_id}", {"passed" => success}.to_json, :content_type => :json
|
|
end
|