diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..eec1b59 --- /dev/null +++ b/Gemfile @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +source "https://rubygems.org" + +gem "appium_lib", "16.1.1" +gem "selenium-webdriver", "4.40.0" +gem "cucumber", "~> 10.2" +gem "rspec", "~> 3.13" +gem "selenium-cucumber", "~> 3.1" +gem "test-unit", "~> 3.7" diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..b6ed0cb --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,147 @@ +GEM + remote: https://rubygems.org/ + specs: + appium_lib (16.1.1) + appium_lib_core (>= 9.2.1, < 12.0) + nokogiri (~> 1.8, >= 1.8.1) + tomlrb (>= 1.1, < 3.0) + appium_lib_core (11.2.0) + faye-websocket (>= 0.11, < 0.13) + selenium-webdriver (~> 4.21) + base64 (0.3.0) + bigdecimal (4.0.1) + builder (3.3.0) + chunky_png (1.4.0) + cucumber (10.2.0) + base64 (~> 0.2) + builder (~> 3.2) + cucumber-ci-environment (> 9, < 12) + cucumber-core (> 15, < 17) + cucumber-cucumber-expressions (> 17, < 20) + cucumber-html-formatter (> 21, < 23) + diff-lcs (~> 1.5) + logger (~> 1.6) + mini_mime (~> 1.1) + multi_test (~> 1.1) + sys-uname (~> 1.3) + cucumber-ci-environment (11.0.0) + cucumber-core (16.1.1) + cucumber-gherkin (> 36, < 40) + cucumber-messages (> 31, < 33) + cucumber-tag-expressions (> 6, < 9) + cucumber-cucumber-expressions (19.0.0) + bigdecimal + cucumber-gherkin (38.0.0) + cucumber-messages (>= 31, < 33) + cucumber-html-formatter (22.3.0) + cucumber-messages (> 23, < 33) + cucumber-messages (32.0.1) + cucumber-tag-expressions (8.1.0) + diff-lcs (1.6.2) + eventmachine (1.2.7) + faye-websocket (0.12.0) + eventmachine (>= 0.12.0) + websocket-driver (>= 0.8.0) + ffi (1.17.3-x64-mingw-ucrt) + logger (1.7.0) + memoist3 (1.0.0) + mini_mime (1.1.5) + multi_test (1.1.0) + nokogiri (1.19.0-x64-mingw-ucrt) + racc (~> 1.4) + power_assert (3.0.1) + racc (1.8.1) + rexml (3.4.4) + rspec (3.13.2) + rspec-core (~> 3.13.0) + rspec-expectations (~> 3.13.0) + rspec-mocks (~> 3.13.0) + rspec-core (3.13.6) + rspec-support (~> 3.13.0) + rspec-expectations (3.13.5) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-mocks (3.13.7) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-support (3.13.7) + rubyzip (3.2.2) + selenium-cucumber (3.1.5) + appium_lib (>= 8.0.2) + chunky_png (>= 1.3.5) + cucumber (>= 2.3.0) + rspec (>= 3.4.0) + selenium-webdriver (>= 2.53.0) + selenium-webdriver (4.40.0) + base64 (~> 0.2) + logger (~> 1.4) + rexml (~> 3.2, >= 3.2.5) + rubyzip (>= 1.2.2, < 4.0) + websocket (~> 1.0) + sys-uname (1.4.1) + ffi (~> 1.1) + memoist3 (~> 1.0.0) + test-unit (3.7.7) + power_assert + tomlrb (2.0.4) + websocket (1.2.11) + websocket-driver (0.8.0) + base64 + websocket-extensions (>= 0.1.0) + websocket-extensions (0.1.5) + +PLATFORMS + x64-mingw-ucrt + +DEPENDENCIES + appium_lib (= 16.1.1) + cucumber (~> 10.2) + rspec (~> 3.13) + selenium-cucumber (~> 3.1) + selenium-webdriver (= 4.40.0) + test-unit (~> 3.7) + +CHECKSUMS + appium_lib (16.1.1) sha256=d53402b41846c1e1431ed44ba49cb7c9ff8f56f2a51c433b57f167b68afe9cb7 + appium_lib_core (11.2.0) sha256=677040cceb7ff5e07276df55791106fee398101b69e82edf9e382a6609d18a70 + base64 (0.3.0) sha256=27337aeabad6ffae05c265c450490628ef3ebd4b67be58257393227588f5a97b + bigdecimal (4.0.1) sha256=8b07d3d065a9f921c80ceaea7c9d4ae596697295b584c296fe599dd0ad01c4a7 + builder (3.3.0) sha256=497918d2f9dca528fdca4b88d84e4ef4387256d984b8154e9d5d3fe5a9c8835f + chunky_png (1.4.0) sha256=89d5b31b55c0cf4da3cf89a2b4ebc3178d8abe8cbaf116a1dba95668502fdcfe + cucumber (10.2.0) sha256=fdedbd31ecf40858b60f04853f2aa15c44f5c30bbac29c6a227fa1e7005a8158 + cucumber-ci-environment (11.0.0) sha256=0df79a9e1d0b015b3d9def680f989200d96fef206f4d19ccf86a338c4f71d1e2 + cucumber-core (16.1.1) sha256=d3aaa80a1ee2865f63f1a21ef496129f675af9099993b9af9608c4ef8ae26b89 + cucumber-cucumber-expressions (19.0.0) sha256=33208ff204732ac9bed42b46993a0a243054f71ece08579d57e53df6a1c9d93a + cucumber-gherkin (38.0.0) sha256=3e5846badf646eaec482b07067520e4494f370a0cfa5474d63522ca2ace800c4 + cucumber-html-formatter (22.3.0) sha256=f9768ed05588dbd73a5f3824c2cc648bd86b00206e6972d743af8051281d0729 + cucumber-messages (32.0.1) sha256=8889d29fa5486e6523bd537e95fbf86b99eb11258528d2d55af4b806594ffcff + cucumber-tag-expressions (8.1.0) sha256=9bd8c4b6654f8e5bf2a9c99329b6f32136a75e50cd39d4cfb3927d0fa9f52e21 + diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962 + eventmachine (1.2.7) sha256=994016e42aa041477ba9cff45cbe50de2047f25dd418eba003e84f0d16560972 + faye-websocket (0.12.0) sha256=ad9f7dfcd0306d0a13baeee450729657661129af15bb5f38716c242484ab42e1 + ffi (1.17.3-x64-mingw-ucrt) sha256=5f1d7d067a9a1058ad183dba25b05557cd51c85fc1768c49338eabc1cf242d7c + logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203 + memoist3 (1.0.0) sha256=686e42402cf150a362050c23143dc57b0ef88f8c344943ff8b7845792b50d56f + mini_mime (1.1.5) sha256=8681b7e2e4215f2a159f9400b5816d85e9d8c6c6b491e96a12797e798f8bccef + multi_test (1.1.0) sha256=e9e550cdd863fb72becfe344aefdcd4cbd26ebf307847f4a6c039a4082324d10 + nokogiri (1.19.0-x64-mingw-ucrt) sha256=05d7ed2d95731edc9bef2811522dc396df3e476ef0d9c76793a9fca81cab056b + power_assert (3.0.1) sha256=8ce9876716cc74e863fcd4cdcdc52d792bd983598d1af3447083a3a9a4d34103 + racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f + rexml (3.4.4) sha256=19e0a2c3425dfbf2d4fc1189747bdb2f849b6c5e74180401b15734bc97b5d142 + rspec (3.13.2) sha256=206284a08ad798e61f86d7ca3e376718d52c0bc944626b2349266f239f820587 + rspec-core (3.13.6) sha256=a8823c6411667b60a8bca135364351dda34cd55e44ff94c4be4633b37d828b2d + rspec-expectations (3.13.5) sha256=33a4d3a1d95060aea4c94e9f237030a8f9eae5615e9bd85718fe3a09e4b58836 + rspec-mocks (3.13.7) sha256=0979034e64b1d7a838aaaddf12bf065ea4dc40ef3d4c39f01f93ae2c66c62b1c + rspec-support (3.13.7) sha256=0640e5570872aafefd79867901deeeeb40b0c9875a36b983d85f54fb7381c47c + rubyzip (3.2.2) sha256=c0ed99385f0625415c8f05bcae33fe649ed2952894a95ff8b08f26ca57ea5b3c + selenium-cucumber (3.1.5) sha256=3e15ef2ef9507d73a3c20ce65f9001c614d1588ac6d7e2f865029335459465ad + selenium-webdriver (4.40.0) sha256=16ef7aa9853c1d4b9d52eac45aafa916e3934c5c83cb4facb03f250adfd15e5b + sys-uname (1.4.1) sha256=ed2278ec670ee8af5eb5420d3a98e22188051f6241180db7c779993db2739a16 + test-unit (3.7.7) sha256=3c89d5ff0690a16bef9946156c4624390402b9d54dfcf4ce9cbd5b06bead1e45 + tomlrb (2.0.4) sha256=262f77947ac3ac9b3366a0a5940ecd238300c553e2e14f22009e2afcd2181b99 + websocket (1.2.11) sha256=b7e7a74e2410b5e85c25858b26b3322f29161e300935f70a0e0d3c35e0462737 + websocket-driver (0.8.0) sha256=ed0dba4b943c22f17f9a734817e808bc84cdce6a7e22045f5315aa57676d4962 + websocket-extensions (0.1.5) sha256=1c6ba63092cda343eb53fc657110c71c754c56484aad42578495227d717a8241 + +BUNDLED WITH + 4.0.5 diff --git a/README.md b/README.md index b7d71c9..b7e5cc0 100644 --- a/README.md +++ b/README.md @@ -142,6 +142,8 @@ You can update your custom capabilities in test scripts. In this sample project, +**Android** + ```ruby title="Android first.config.yml)" server: "mobile-hub.lambdatest.com" user: "LT_USERNAME" # Add Lambdatest username here @@ -160,11 +162,38 @@ browser_caps: "deviceName": "Galaxy S21 5G" "platformVersion": "11" "app": "APP_URL" # Add your app url here + +``` +**W3C Capabilities (Ruby 3.4 Fix)** + +You must update your env.rb file (located in features/support/) using Symbols for keys. + +Android Example: + +```bash +caps = { + "platformName" => full_caps["platform"] || "Android", + "appium:deviceName" => full_caps["deviceName"] || "Galaxy S21 5G", + "appium:platformVersion" => full_caps["platformVersion"] || "11", + "appium:app" => "lt://proverbial-android", # Ensure this matches your LT app ID + "appium:isRealMobile" => true, + "appium:automationName" => "UiAutomator2", + "lt:options" => { + "user" => username, + "accessKey" => accessToken, + "build" => "Ruby-Cucumber-Android", + "name" => "Sample Test", + "w3c" => true, + "isRealMobile" => true + } +} ``` +**Ios** + ```ruby title="iOS first.config.yml" server: "mobile-hub.lambdatest.com" user: "LT_USERNAME" # Add Lambdatest username here @@ -182,8 +211,31 @@ browser_caps: "deviceName": "iPad (2017)" "platformVersion": "13" "app": "APP_URL" # Add your app url here + ``` +**W3C Capabilities (Ruby 3.4 Fix)** +You must update your env.rb file (located in features/support/) using Symbols for keys. + +ios Example: +```bash +caps = { + "platformName" => full_caps["platform"] || "ios", + "appium:deviceName" => full_caps["deviceName"] || "iPhone 15", + "appium:platformVersion" => full_caps["platformVersion"] || "17", + "appium:app" => "lt://proverbial-ios", # Ensure this matches your LT app ID + "appium:isRealMobile" => true, + "appium:automationName" => "XCUITest", + "lt:options" => { + "user" => username, + "accessKey" => accessToken, + "build" => "Ruby-Cucumber-ios", + "name" => "Sample Test", + "w3c" => true, + "isRealMobile" => true + } +} +``` @@ -205,6 +257,7 @@ browser_caps: bundle install bundle exec rake first ``` +Alternative command: If rake is not configured, you can run "bundle exec cucumber" directly in these folders. ### **Speed up test execution with parallel testing :** @@ -217,6 +270,19 @@ bundle exec rake first **Info:** Your test results would be displayed on the test console (or command-line interface if you are using terminal/cmd) and on the :link: [LambdaTest App Automation Dashboard](https://appautomation.lambdatest.com/build). +## Troubleshooting + +1. Error: Connection refused - connect(2) for "127.0.0.1" +Cause: Ruby is trying to find a local Appium server because it doesn't recognize your LambdaTest URL. +Fix: In your env.rb file, ensure the driver initialization uses symbols: + +```bash +@appium_driver = Appium::Driver.new({ + :caps => caps, + :appium_lib => { :server_url => server_url } +}, true) +``` + ## Additional Links - [Advanced Configuration for Capabilities](https://www.lambdatest.com/support/docs/desired-capabilities-in-appium/) diff --git a/android/examples/Gemfile.lock b/android/examples/Gemfile.lock index cc0dd64..559190b 100644 --- a/android/examples/Gemfile.lock +++ b/android/examples/Gemfile.lock @@ -1,96 +1,94 @@ GEM remote: http://rubygems.org/ specs: - appium_lib (12.0.1) - appium_lib_core (~> 5.0) + appium_lib (11.2.0) + appium_lib_core (~> 4.1) nokogiri (~> 1.8, >= 1.8.1) - tomlrb (>= 1.1, < 3.0) - appium_lib_core (5.3.0) + tomlrb (~> 1.1) + appium_lib_core (4.7.1) faye-websocket (~> 0.11.0) - selenium-webdriver (~> 4.2, < 4.5) - builder (3.2.4) - childprocess (4.1.0) + selenium-webdriver (~> 3.14, >= 3.14.1) + base64 (0.3.0) + bigdecimal (4.0.1) + builder (3.3.0) + childprocess (3.0.0) chunky_png (1.4.0) - cucumber (8.0.0) - builder (~> 3.2, >= 3.2.4) - cucumber-ci-environment (~> 9.0, >= 9.0.4) - cucumber-core (~> 11.0, >= 11.0.0) - cucumber-cucumber-expressions (~> 15.1, >= 15.1.1) - cucumber-gherkin (~> 23.0, >= 23.0.1) - cucumber-html-formatter (~> 19.1, >= 19.1.0) - cucumber-messages (~> 18.0, >= 18.0.0) - diff-lcs (~> 1.5, >= 1.5.0) - mime-types (~> 3.4, >= 3.4.1) - multi_test (~> 1.1, >= 1.1.0) - sys-uname (~> 1.2, >= 1.2.2) - cucumber-ci-environment (9.1.0) - cucumber-core (11.0.0) - cucumber-gherkin (~> 23.0, >= 23.0.1) - cucumber-messages (~> 18.0, >= 18.0.0) - cucumber-tag-expressions (~> 4.1, >= 4.1.0) - cucumber-cucumber-expressions (15.2.0) - cucumber-gherkin (23.0.1) - cucumber-messages (~> 18.0, >= 18.0.0) - cucumber-html-formatter (19.2.0) - cucumber-messages (~> 18.0, >= 18.0.0) - cucumber-messages (18.0.0) - cucumber-tag-expressions (4.1.0) - diff-lcs (1.5.0) + cucumber (10.2.0) + base64 (~> 0.2) + builder (~> 3.2) + cucumber-ci-environment (> 9, < 12) + cucumber-core (> 15, < 17) + cucumber-cucumber-expressions (> 17, < 20) + cucumber-html-formatter (> 21, < 23) + diff-lcs (~> 1.5) + logger (~> 1.6) + mini_mime (~> 1.1) + multi_test (~> 1.1) + sys-uname (~> 1.3) + cucumber-ci-environment (11.0.0) + cucumber-core (16.1.1) + cucumber-gherkin (> 36, < 40) + cucumber-messages (> 31, < 33) + cucumber-tag-expressions (> 6, < 9) + cucumber-cucumber-expressions (19.0.0) + bigdecimal + cucumber-gherkin (38.0.0) + cucumber-messages (>= 31, < 33) + cucumber-html-formatter (22.3.0) + cucumber-messages (> 23, < 33) + cucumber-messages (32.0.1) + cucumber-tag-expressions (8.1.0) + diff-lcs (1.6.2) eventmachine (1.2.7) - faye-websocket (0.11.1) + faye-websocket (0.11.4) eventmachine (>= 0.12.0) - websocket-driver (>= 0.5.1) - ffi (1.15.5) - mime-types (3.4.1) - mime-types-data (~> 3.2015) - mime-types-data (3.2022.0105) + websocket-driver (>= 0.5.1, < 0.8.0) + ffi (1.17.3-x64-mingw-ucrt) + logger (1.7.0) + memoist3 (1.0.0) + mini_mime (1.1.5) multi_test (1.1.0) - nokogiri (1.13.8-arm64-darwin) + nokogiri (1.19.0-x64-mingw-ucrt) racc (~> 1.4) - nokogiri (1.13.8-x86_64-darwin) - racc (~> 1.4) - parallel (1.22.1) - parallel_tests (3.12.0) + parallel (1.27.0) + parallel_tests (5.5.0) parallel - racc (1.6.0) - rake (13.0.6) - rexml (3.2.5) - rspec (3.11.0) - rspec-core (~> 3.11.0) - rspec-expectations (~> 3.11.0) - rspec-mocks (~> 3.11.0) - rspec-core (3.11.0) - rspec-support (~> 3.11.0) - rspec-expectations (3.11.0) + racc (1.8.1) + rake (13.3.1) + rspec (3.13.2) + rspec-core (~> 3.13.0) + rspec-expectations (~> 3.13.0) + rspec-mocks (~> 3.13.0) + rspec-core (3.13.6) + rspec-support (~> 3.13.0) + rspec-expectations (3.13.5) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.11.0) - rspec-mocks (3.11.1) + rspec-support (~> 3.13.0) + rspec-mocks (3.13.7) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.11.0) - rspec-support (3.11.0) - rubyzip (2.3.2) + rspec-support (~> 3.13.0) + rspec-support (3.13.7) + rubyzip (3.2.2) selenium-cucumber (3.1.5) appium_lib (>= 8.0.2) chunky_png (>= 1.3.5) cucumber (>= 2.3.0) rspec (>= 3.4.0) selenium-webdriver (>= 2.53.0) - selenium-webdriver (4.4.0) - childprocess (>= 0.5, < 5.0) - rexml (~> 3.2, >= 3.2.5) - rubyzip (>= 1.2.2, < 3.0) - websocket (~> 1.0) - sys-uname (1.2.2) + selenium-webdriver (3.142.7) + childprocess (>= 0.5, < 4.0) + rubyzip (>= 1.2.2) + sys-uname (1.4.1) ffi (~> 1.1) - tomlrb (2.0.3) - websocket (1.2.9) - websocket-driver (0.7.5) + memoist3 (~> 1.0.0) + tomlrb (1.3.0) + websocket-driver (0.7.7) + base64 websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) PLATFORMS - arm64-darwin-21 - x86_64-darwin-21 + x64-mingw-ucrt DEPENDENCIES appium_lib @@ -99,7 +97,49 @@ DEPENDENCIES rake rspec selenium-cucumber - selenium-webdriver + selenium-webdriver (~> 3.142, >= 3.142.5) + +CHECKSUMS + appium_lib (11.2.0) + appium_lib_core (4.7.1) + base64 (0.3.0) + bigdecimal (4.0.1) + builder (3.3.0) + childprocess (3.0.0) + chunky_png (1.4.0) + cucumber (10.2.0) + cucumber-ci-environment (11.0.0) + cucumber-core (16.1.1) + cucumber-cucumber-expressions (19.0.0) + cucumber-gherkin (38.0.0) + cucumber-html-formatter (22.3.0) + cucumber-messages (32.0.1) + cucumber-tag-expressions (8.1.0) + diff-lcs (1.6.2) + eventmachine (1.2.7) + faye-websocket (0.11.4) + ffi (1.17.3-x64-mingw-ucrt) + logger (1.7.0) + memoist3 (1.0.0) + mini_mime (1.1.5) + multi_test (1.1.0) + nokogiri (1.19.0-x64-mingw-ucrt) + parallel (1.27.0) + parallel_tests (5.5.0) + racc (1.8.1) + rake (13.3.1) + rspec (3.13.2) + rspec-core (3.13.6) + rspec-expectations (3.13.5) + rspec-mocks (3.13.7) + rspec-support (3.13.7) + rubyzip (3.2.2) + selenium-cucumber (3.1.5) + selenium-webdriver (3.142.7) + sys-uname (1.4.1) + tomlrb (1.3.0) + websocket-driver (0.7.7) + websocket-extensions (0.1.5) BUNDLED WITH - 2.3.21 + 4.0.5 diff --git a/android/examples/run-first-test/features/support/env.rb b/android/examples/run-first-test/features/support/env.rb index 43a55e5..ceaf703 100644 --- a/android/examples/run-first-test/features/support/env.rb +++ b/android/examples/run-first-test/features/support/env.rb @@ -1,76 +1,54 @@ require 'yaml' require 'rspec' require 'selenium-cucumber' - require 'appium_lib' -TASK_ID = (ENV['TASK_ID'] || 0).to_i -CONFIG_NAME = ENV['CONFIG_NAME'] || 'first' - -CONFIG = YAML.load(File.read(File.join(File.dirname(__FILE__), "../../config/#{CONFIG_NAME}.config.yml"))) - -@caps = CONFIG['common_caps'].merge(CONFIG['browser_caps'][TASK_ID]) - - -#$bs_local = nil - - -puts @caps.inspect - -us= @caps["user"].inspect -ak= @caps["key"].inspect -is= @caps["isRealMobile"].inspect -pl= @caps["platform"].inspect -dn= @caps["deviceName"].inspect -pv= @caps["platformVersion"].inspect -ap= @caps["app"].inspect - - - -user= us.gsub("\"", "") -accessKey=ak.gsub("\"", "") -isRealMobile= is.gsub("\"", "") -platform= pl.gsub("\"", "") -deviceName= dn.gsub("\"", "") -platformVersion= pv.gsub("\"", "") -app= ap.gsub("\"", "") -puts isRealMobile - - -caps={ - - "LT:Options" => { - - "build" => "Cucumber Android Single", - "name" => "Cucumber Sample Test", - "platformName" => platform, - "isRealMobile" => isRealMobile, - "deviceName" => deviceName, - "platformVersion" => platformVersion, - "app" => app, - "w3c" => true - -}, +# 1. Credentials from Environment or YAML +username = ENV['LT_USERNAME'] +accessToken = ENV['LT_ACCESS_KEY'] + +# 2. Load YAML Config +config_path = File.join(File.dirname(__FILE__), "../../config/first.config.yml") +if File.exist?(config_path) + config = YAML.load(File.read(config_path)) + common_caps = config['common_caps'] || {} + browser_caps = config['browser_caps'][0] || {} + # Merge them + full_caps = common_caps.merge(browser_caps) +else + full_caps = {} +end - +# 3. Construct W3C Compliant Capabilities +caps = { + "platformName" => full_caps["platform"] || "Android", + "appium:deviceName" => full_caps["deviceName"] || "Galaxy S21 5G", + "appium:platformVersion" => full_caps["platformVersion"] || "11", + "appium:app" => "lt://proverbial-android", # Ensure this matches your LT app ID + "appium:isRealMobile" => true, + "appium:automationName" => "UiAutomator2", + "lt:options" => { + "user" => username, + "accessKey" => accessToken, + "build" => "Ruby-Cucumber-Android", + "name" => "Sample Test", + "w3c" => true, + "isRealMobile" => true + } } - -appium_driver = Appium::Driver.new({ - 'caps' => caps, - 'appium_lib' => { - :server_url => "https://#{CONFIG['user']}:#{CONFIG['key']}@#{CONFIG['server']}/wd/hub" - #server_url: "https://webhook.site/5958677a-4db9-4253-bb76-5b98e97e4880" - }}, true) - - +# 4. Initialize the Appium Driver +appium_lib_options = { + server_url: "https://#{username}:#{accessToken}@mobile-hub.lambdatest.com/wd/hub", + wait: 10 +} begin - #$appium_driver = Appium::Driver.new(desired_caps, true) - $driver = appium_driver.start_driver - #example.run -ensure - #$driver.quit -end - - + puts "Connecting to LambdaTest..." + $appium_driver = Appium::Driver.new({ caps: caps, appium_lib: appium_lib_options }, true) + $driver = $appium_driver.start_driver + puts "Session started successfully!" +rescue Exception => e + puts "Error starting driver: #{e.message}" + raise e +end \ No newline at end of file diff --git a/ios/examples/Gemfile.lock b/ios/examples/Gemfile.lock index b9082cf..a27ba61 100644 --- a/ios/examples/Gemfile.lock +++ b/ios/examples/Gemfile.lock @@ -1,98 +1,101 @@ GEM remote: http://rubygems.org/ specs: - appium_lib (12.0.1) - appium_lib_core (~> 5.0) + appium_lib (16.1.1) + appium_lib_core (>= 9.2.1, < 12.0) nokogiri (~> 1.8, >= 1.8.1) tomlrb (>= 1.1, < 3.0) - appium_lib_core (5.3.0) - faye-websocket (~> 0.11.0) - selenium-webdriver (~> 4.2, < 4.5) - browserstack-local (1.4.0) - builder (3.2.4) - childprocess (4.1.0) + appium_lib_core (11.2.0) + faye-websocket (>= 0.11, < 0.13) + selenium-webdriver (~> 4.21) + base64 (0.3.0) + bigdecimal (4.0.1) + builder (3.3.0) chunky_png (1.4.0) - cucumber (8.0.0) - builder (~> 3.2, >= 3.2.4) - cucumber-ci-environment (~> 9.0, >= 9.0.4) - cucumber-core (~> 11.0, >= 11.0.0) - cucumber-cucumber-expressions (~> 15.1, >= 15.1.1) - cucumber-gherkin (~> 23.0, >= 23.0.1) - cucumber-html-formatter (~> 19.1, >= 19.1.0) - cucumber-messages (~> 18.0, >= 18.0.0) - diff-lcs (~> 1.5, >= 1.5.0) - mime-types (~> 3.4, >= 3.4.1) - multi_test (~> 1.1, >= 1.1.0) - sys-uname (~> 1.2, >= 1.2.2) - cucumber-ci-environment (9.1.0) - cucumber-core (11.0.0) - cucumber-gherkin (~> 23.0, >= 23.0.1) - cucumber-messages (~> 18.0, >= 18.0.0) - cucumber-tag-expressions (~> 4.1, >= 4.1.0) - cucumber-cucumber-expressions (15.2.0) - cucumber-gherkin (23.0.1) - cucumber-messages (~> 18.0, >= 18.0.0) - cucumber-html-formatter (19.2.0) - cucumber-messages (~> 18.0, >= 18.0.0) - cucumber-messages (18.0.0) - cucumber-tag-expressions (4.1.0) - diff-lcs (1.5.0) + cucumber (10.2.0) + base64 (~> 0.2) + builder (~> 3.2) + cucumber-ci-environment (> 9, < 12) + cucumber-core (> 15, < 17) + cucumber-cucumber-expressions (> 17, < 20) + cucumber-html-formatter (> 21, < 23) + diff-lcs (~> 1.5) + logger (~> 1.6) + mini_mime (~> 1.1) + multi_test (~> 1.1) + sys-uname (~> 1.3) + cucumber-ci-environment (11.0.0) + cucumber-core (16.1.1) + cucumber-gherkin (> 36, < 40) + cucumber-messages (> 31, < 33) + cucumber-tag-expressions (> 6, < 9) + cucumber-cucumber-expressions (19.0.0) + bigdecimal + cucumber-gherkin (38.0.0) + cucumber-messages (>= 31, < 33) + cucumber-html-formatter (22.3.0) + cucumber-messages (> 23, < 33) + cucumber-messages (32.0.1) + cucumber-tag-expressions (8.1.0) + diff-lcs (1.6.2) eventmachine (1.2.7) - faye-websocket (0.11.1) + faye-websocket (0.12.0) eventmachine (>= 0.12.0) - websocket-driver (>= 0.5.1) - ffi (1.15.5) - mime-types (3.4.1) - mime-types-data (~> 3.2015) - mime-types-data (3.2022.0105) + websocket-driver (>= 0.8.0) + ffi (1.17.3-x64-mingw-ucrt) + logger (1.7.0) + memoist3 (1.0.0) + mini_mime (1.1.5) multi_test (1.1.0) - nokogiri (1.13.8-arm64-darwin) + nokogiri (1.19.0-x64-mingw-ucrt) racc (~> 1.4) - parallel (1.22.1) - parallel_tests (3.12.0) + parallel (1.27.0) + parallel_tests (5.5.0) parallel - racc (1.6.0) - rake (13.0.6) - rexml (3.2.5) - rspec (3.11.0) - rspec-core (~> 3.11.0) - rspec-expectations (~> 3.11.0) - rspec-mocks (~> 3.11.0) - rspec-core (3.11.0) - rspec-support (~> 3.11.0) - rspec-expectations (3.11.0) + racc (1.8.1) + rake (13.3.1) + rexml (3.4.4) + rspec (3.13.2) + rspec-core (~> 3.13.0) + rspec-expectations (~> 3.13.0) + rspec-mocks (~> 3.13.0) + rspec-core (3.13.6) + rspec-support (~> 3.13.0) + rspec-expectations (3.13.5) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.11.0) - rspec-mocks (3.11.1) + rspec-support (~> 3.13.0) + rspec-mocks (3.13.7) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.11.0) - rspec-support (3.11.0) - rubyzip (2.3.2) + rspec-support (~> 3.13.0) + rspec-support (3.13.7) + rubyzip (3.2.2) selenium-cucumber (3.1.5) appium_lib (>= 8.0.2) chunky_png (>= 1.3.5) cucumber (>= 2.3.0) rspec (>= 3.4.0) selenium-webdriver (>= 2.53.0) - selenium-webdriver (4.4.0) - childprocess (>= 0.5, < 5.0) + selenium-webdriver (4.40.0) + base64 (~> 0.2) + logger (~> 1.4) rexml (~> 3.2, >= 3.2.5) - rubyzip (>= 1.2.2, < 3.0) + rubyzip (>= 1.2.2, < 4.0) websocket (~> 1.0) - sys-uname (1.2.2) + sys-uname (1.4.1) ffi (~> 1.1) - tomlrb (2.0.3) - websocket (1.2.9) - websocket-driver (0.7.5) + memoist3 (~> 1.0.0) + tomlrb (2.0.4) + websocket (1.2.11) + websocket-driver (0.8.0) + base64 websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) PLATFORMS - arm64-darwin-21 + x64-mingw-ucrt DEPENDENCIES appium_lib - browserstack-local cucumber parallel_tests rake @@ -100,5 +103,48 @@ DEPENDENCIES selenium-cucumber selenium-webdriver +CHECKSUMS + appium_lib (16.1.1) + appium_lib_core (11.2.0) + base64 (0.3.0) + bigdecimal (4.0.1) + builder (3.3.0) + chunky_png (1.4.0) + cucumber (10.2.0) + cucumber-ci-environment (11.0.0) + cucumber-core (16.1.1) + cucumber-cucumber-expressions (19.0.0) + cucumber-gherkin (38.0.0) + cucumber-html-formatter (22.3.0) + cucumber-messages (32.0.1) + cucumber-tag-expressions (8.1.0) + diff-lcs (1.6.2) + eventmachine (1.2.7) + faye-websocket (0.12.0) + ffi (1.17.3-x64-mingw-ucrt) + logger (1.7.0) + memoist3 (1.0.0) + mini_mime (1.1.5) + multi_test (1.1.0) + nokogiri (1.19.0-x64-mingw-ucrt) + parallel (1.27.0) + parallel_tests (5.5.0) + racc (1.8.1) + rake (13.3.1) + rexml (3.4.4) + rspec (3.13.2) + rspec-core (3.13.6) + rspec-expectations (3.13.5) + rspec-mocks (3.13.7) + rspec-support (3.13.7) + rubyzip (3.2.2) + selenium-cucumber (3.1.5) + selenium-webdriver (4.40.0) + sys-uname (1.4.1) + tomlrb (2.0.4) + websocket (1.2.11) + websocket-driver (0.8.0) + websocket-extensions (0.1.5) + BUNDLED WITH - 2.3.21 + 4.0.5 diff --git a/ios/examples/run-first-test/config/first.config.yml b/ios/examples/run-first-test/config/first.config.yml index 7c79716..144c958 100644 --- a/ios/examples/run-first-test/config/first.config.yml +++ b/ios/examples/run-first-test/config/first.config.yml @@ -11,6 +11,6 @@ browser_caps: - "isRealMobile": "true" "platform": "iOS" - "deviceName": "iPhone 11" - "platformVersion": "14" + "deviceName": "iPhone 15" + "platformVersion": "17" "app": "lt://proverbial-ios" # Add your app url here diff --git a/ios/examples/run-first-test/features/support/env.rb b/ios/examples/run-first-test/features/support/env.rb index 19c10b1..bb916e9 100644 --- a/ios/examples/run-first-test/features/support/env.rb +++ b/ios/examples/run-first-test/features/support/env.rb @@ -1,76 +1,54 @@ require 'yaml' require 'rspec' require 'selenium-cucumber' - require 'appium_lib' -TASK_ID = (ENV['TASK_ID'] || 0).to_i -CONFIG_NAME = ENV['CONFIG_NAME'] || 'first' - -CONFIG = YAML.load(File.read(File.join(File.dirname(__FILE__), "../../config/#{CONFIG_NAME}.config.yml"))) - -@caps = CONFIG['common_caps'].merge(CONFIG['browser_caps'][TASK_ID]) - - -#$bs_local = nil - - -puts @caps.inspect - -us= @caps["user"].inspect -ak= @caps["key"].inspect -is= @caps["isRealMobile"].inspect -pl= @caps["platform"].inspect -dn= @caps["deviceName"].inspect -pv= @caps["platformVersion"].inspect -ap= @caps["app"].inspect - - - -user= us.gsub("\"", "") -accessKey=ak.gsub("\"", "") -isRealMobile= is.gsub("\"", "") -platform= pl.gsub("\"", "") -deviceName= dn.gsub("\"", "") -platformVersion= pv.gsub("\"", "") -app= ap.gsub("\"", "") -puts isRealMobile - - -caps={ - - "LT:Options" => { - - "build" => "Cucumber iOS Single", - "name" => "Cucumber Sample Test", - "platformName" => platform, - "isRealMobile" => isRealMobile, - "deviceName" => deviceName, - "platformVersion" => platformVersion, - "app" => app, - "w3c" => true - -}, +# 1. Credentials from Environment or YAML +username = ENV['LT_USERNAME'] +accessToken = ENV['LT_ACCESS_KEY'] + +# 2. Load YAML Config +config_path = File.join(File.dirname(__FILE__), "../../config/first.config.yml") +if File.exist?(config_path) + config = YAML.load(File.read(config_path)) + common_caps = config['common_caps'] || {} + browser_caps = config['browser_caps'][0] || {} + # Merge them + full_caps = common_caps.merge(browser_caps) +else + full_caps = {} +end - +# 3. Construct W3C Compliant Capabilities +caps = { + "platformName" => full_caps["platform"] || "ios", + "appium:deviceName" => full_caps["deviceName"] || "iPhone 15", + "appium:platformVersion" => full_caps["platformVersion"] || "17", + "appium:app" => "lt://proverbial-ios", # Ensure this matches your LT app ID + "appium:isRealMobile" => true, + "appium:automationName" => "XCUITest", + "lt:options" => { + "user" => username, + "accessKey" => accessToken, + "build" => "Ruby-Cucumber-ios", + "name" => "Sample Test", + "w3c" => true, + "isRealMobile" => true + } } - -appium_driver = Appium::Driver.new({ - 'caps' => caps, - 'appium_lib' => { - :server_url => "https://#{CONFIG['user']}:#{CONFIG['key']}@#{CONFIG['server']}/wd/hub" - #server_url: "https://webhook.site/5958677a-4db9-4253-bb76-5b98e97e4880" - }}, true) - - +# 4. Initialize the Appium Driver +appium_lib_options = { + server_url: "https://#{username}:#{accessToken}@mobile-hub.lambdatest.com/wd/hub", + wait: 10 +} begin - #$appium_driver = Appium::Driver.new(desired_caps, true) - $driver = appium_driver.start_driver - #example.run -ensure - #$driver.quit -end - - + puts "Connecting to LambdaTest..." + $appium_driver = Appium::Driver.new({ caps: caps, appium_lib: appium_lib_options }, true) + $driver = $appium_driver.start_driver + puts "Session started successfully!" +rescue Exception => e + puts "Error starting driver: #{e.message}" + raise e +end \ No newline at end of file