{"id":21693312,"url":"https://github.com/gokcesahinnn/android-test-automation-ruby-base-project","last_synced_at":"2026-04-08T18:02:01.577Z","repository":{"id":168536116,"uuid":"643979047","full_name":"gokcesahinnn/android-test-automation-ruby-base-project","owner":"gokcesahinnn","description":null,"archived":false,"fork":false,"pushed_at":"2023-05-22T14:51:16.000Z","size":17,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-08T08:36:15.836Z","etag":null,"topics":["android","automation","cucumber","mobile","ruby","selenium"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gokcesahinnn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-05-22T14:50:12.000Z","updated_at":"2024-04-19T14:59:05.000Z","dependencies_parsed_at":null,"dependency_job_id":"7eb40684-98aa-4f21-a9a0-0356592b5568","html_url":"https://github.com/gokcesahinnn/android-test-automation-ruby-base-project","commit_stats":null,"previous_names":["gokcesahinnn/android-test-automation-ruby-base-project"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/gokcesahinnn/android-test-automation-ruby-base-project","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gokcesahinnn%2Fandroid-test-automation-ruby-base-project","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gokcesahinnn%2Fandroid-test-automation-ruby-base-project/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gokcesahinnn%2Fandroid-test-automation-ruby-base-project/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gokcesahinnn%2Fandroid-test-automation-ruby-base-project/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gokcesahinnn","download_url":"https://codeload.github.com/gokcesahinnn/android-test-automation-ruby-base-project/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gokcesahinnn%2Fandroid-test-automation-ruby-base-project/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31567227,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"ssl_error","status_checked_at":"2026-04-08T14:31:17.202Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","automation","cucumber","mobile","ruby","selenium"],"created_at":"2024-11-25T18:19:22.807Z","updated_at":"2026-04-08T18:02:01.541Z","avatar_url":"https://github.com/gokcesahinnn.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# \u003cproje_ismi\u003e Android App Test Otomasyon Projesi\n\nBu proje \u003cproje_ismi\u003e Android uygulamasının test otomasyonunu içermektedir.\n\n# Tool stack\n\n* **Ruby** - Development language\n* **RubyMine IDE** - Development IDE\n* **Allure** Multi-language test report tool\n* **Cucumber** - Gherkin Syntax Framework\n* **RSpec** - Assertion \u0026 Validation Framework\n* **Appium** - Mobile APP Test Automation Tool\n\n# Kurulumlar\n\n* Kurulumlar için\n  Confluence'ta [Android Test Otomasyon Kurulum](https://drive.google.com/file/d/1KMANE6reeWKMBjHo-ZNsHpt-gQhkknCn/view?usp=share_link)\n  sayfasındaki adımlar takip edilmelidir.\n* Proje repository'i [ig-android-test-automation](\u003cremote_repository_link\u003e) linkinden\n  clone alınabilir.\n* Gerekli kütüphanelerin yüklenilebilmesi için proje dizininde aşağıdaki komutlar çalıştırılır.\n  ```\n  gem install bundler\n  bundle install\n  ```\n\n# Testlerin Çalıştırılması\n\n1. IDE üzerinden yeşil RUN butonu ile senaryo ya da feature bazlı çalıştırılabilir.\n\n\n2. Terminalden ilgili proje dizininde senaryo ismi ile çalıştırma:\n\n   `cucumber --name \"Successful login\"`\n\n\n3. Terminalden ilgili proje dizininde scenario ya da feature tag'i ile çalıştırma:\n\n   `cucumber --tag @successful_login`\n\n\n4. Local device ya da cloud device lab'da çalıştırmak için:\n\n   `cucumber --tag @successful_login device_type=cloud_private`\n\n# Raporlama\n* Raporlama aracı olarak allure report kullanılmaktadır.\n\n\n* Allure report oluşturmak için allure pc'nizde kurulu olmalıdır.\n\n    * Mac kurulum\n\n      `brew install allure`\n\n    * Windows Kurulum\n\n        * Powershell açılır. Aşağıdaki komut çalıştırılır. Scoop kurulumu yapılır.\n\n          `iwr -useb get.scoop.sh | iex`\n\n        * Scoop başarılı kurulduktan sonra komut satırı açılır. Aşağıdaki komut çalıştırılır. Allure kurulumu yapılır.\n\n          `scoop install allure`\n\n\n* Allure report generate etmek için proje dizininde oluşan allure-results folder yolu verilerek aşağıdaki komut çalıştırılır.\n\n  `allure serve output/allure-results `\n\n\n# Project Folder Structure\n\n```\n.\n├── Gemfile                     #Projenin kullanılacak kütüphanelerin yönetimi\n├── apps                        #İlgili apk'ların tutulduğu dizin\n├── config                      #Projeye ait configürasyonlar\n│   └── base_config.rb\n├── context\n│   ├── cart_context.rb\n│   └── global_context.rb\n├── model                       #Enum yapıları ve gerekli modeller tanımlamaları\n│   └── product_category.rb\n├── features\n│   ├── pages                   #Page Object Model implementasyonu için kullanılacaktır\n│   │   ├── home\n│   │   │   ├── choose_address_page.rb\n│   │   │   └── home_page.rb\n│   │   ├── login\n│   │   │   └── login_page.rb\n│   │   ├── order\n│   │   │   └── order_result_page.rb\n│   ├── step_definitions        #Senaryolara ait step tanımlamalarının yapıldığı dizin\n│   │   ├── home\n│   │   │   ├── choose_address_steps.rb\n│   │   │   └── home_steps.rb\n│   │   ├── login\n│   │   │   ├── login_e2e_steps.rb\n│   │   │   └── login_steps.rb\n│   │   ├── order\n│   │   │   ├── order_e2e_steps.rb\n│   │   │   └── order_result_steps.rb\n│   ├── support                 #Hooks ve env tanımlamalarının yapıldığı dizin\n│   │   ├── env.rb\n│   │   ├── global.rb\n│   │   └── hooks.rb\n│   ├── tests                   #Gherkin Synxtaxı'ndaki senaryoların bulunduğu dizin\n│   │   ├── checkout\n│   │   │   ├── checkout.feature\n│   │   │   └── coupon_code.feature\n│   │   ├── home\n│   │   │   ├── register.feature\n│   │   │   └── search.feature\n│   │   ├── login\n│   │   │   └── login.feature\n├── utils                       #Utils class ve metodların yer aldığı dizin\n│   ├── driver_utils.rb\n│   └── general_utils.rb\n└── README.md\n```\n\n# Naming Convention\n\nProje genelinde `snack_case` yazım şekli takip edilecektir.\n\nİsimlendirmeler yapılırken aşağıdaki durumlar takip edilecektir.\n\n```\nfolder name = my_folder\n\nruby file name = my_file.rb\n\nfeature file name = my_feature.rb\n\nclass name = MyClass\n\nmethod name = my_method\n\nvariable name = my_variable\n\nelement name = @my_element @my_element @my_element\n\nEnum = ALL_CAPITAL = 'value'\n\nGlobal variable = $MY_VAR\n\nConfig Constant = MY_CONSTANT\n\nFeature name = my_feature\n\ntag name = @my_tag \n```\nElementlerin locatorları tek tırnak ile tanımlanmalı, eğer iç içe tırnak kullanımı varsa dışta çift tırnak olacak şekilde tanımlanmalıdır.\n\n*Örnek:*\n\n@btn_edit_address = { id: 'tvEditAddress' }\n\n@btn_dropdown_choice_by_text = { xpath: \"//android.widget.TextView[@text='%s']\" }\n# Android Element Standartları\n\n| Prefix        | Örnek        | Locator      |\n| ------------- |--------------|------------- |\n| btn           | btn_login    |  Button      |\n| chk           | chk_status   |  Checkbox    |\n| cbx           | cbx_english  |  Combo box   |\n| lbl           | lbl_username |  Label       |\n| drp           | drp_list     |  Drop down   |\n| slc           | slc_list     |  Selectbox   |\n| txt           | txt_email    |  Textbox     |\n| img           | img_logo     |  Image       |\n| rdx           | rdx_female   |  Radiobox    |\n\n# Page Method Standartları\n\n| Prefix | Action         | Description                |\n|--------|----------------|----------------------------|\n| click  | click_register | Click button or link       |\n| fill   | fill_email     | Type textbox               |\n| check  | check_gender   | Check a check box          |\n| select | select_year    | Select value from drop down |\n| verify | verify_menu    | Assertion                  |\n\n# Senaryo Yazımı Standartları\n\n* Senaryolar `feature` file içerisine yazılacaktır.\n* ``Given, When, Then, And`` Syntax i kullanılacaktır.\n* Feature file başlangıcında ``Feature`` keywordunden sonra ilgili feature ın isimlendirmesi yapılacaktır.\n* Bir sonraki satırda feature in açıklaması yazılacaktır.\n* Senaryolar ``Scenario`` keywordunden sonra yazılacaktır. Senaryo name unique olmalıdır.\n* Her senaryo taglenmelidir. İlgili tagler senaryonun üst kısmına koyulmalıdır. @regression, @smoke gibi.\n* Senaryo stepleri yazılırken aşağıdaki örnek senaryo takip edilecektir.\n\n```gherkin\nGiven ön koşul\nAnd ek koşul varsa\nWhen aksiyonun alındığı kısım \nAnd ek aksiyon varsa\nThen ilgili verifikasyonların yapıldığı yer\nAnd ek verifikasyonlar \n```\n\n**Scenario Örneği**\n\n```gherkin\nGiven homepage is opened\nAnd click login button\nAnd fill the valid credentials\nWhen click login button\nThen verify my account icon\nAnd verify the title is changed to \"My Title\"\n```\n\n# Step Definition Formulü\n\n* action + object + location\n```gherkin\nAnd click login button on homepage\n```\n  \n\n\n* action + object + value + location\n\n```gherkin\nAnd set email with \"m@f.com\" on homepage\n```\n\n\n* verification action + object + location\n\n```gherkin\nThen verify the new address on my delivery addresses page\n```\n\n\n* verification action + object + value + location\n\n```gherkin\nThen verify the new address title is \"Home\" on my delivery addresses page\n```\n\n# Ortak Kullanılan Stepler\n\nTüm proje genelinde geçerli olan test adımları base_step ve base_page'de tanımlıdır.\nBase step'e yeni bir step eklerken bu stepin proje genelinde birden fazla sayfada kullanılması gereklidir.\nÖrnek olarak geri git butonu, bu adımı geç, hesabım butonu vs..\n\n* Validations sayfasındaki mesaj (Ör: wrong_sms_code: 'Hatalı doğrulama kodu girdin.') + page adı\n\n```gherkin\nThen verify \"wrong_sms_code\" validation message on \"login\" page\n```\n\n* Sayfaların sol üstteki geri butonu\n\n```gherkin\nWhen click back button\n```\n\n# E2E ve Declerative Step Yazım Standartları\n\n## E2E Step Tanımı\n**E2E** stepler, tek bir step tanımı içerisinde bir işlemi uçtan uca kapsayan steplerdir. Örneğin loginden başlayıp\nsiparişlerin tamamlanmasına kadar olan bütün süreci kapsayan order senaryolarının birer step hâline indirgenmesi\nE2E steplere örnek olabilir.\n\n##E2E Step Yazımı\nE2E stepler tanımlanırken, baş kısımlarına [E2E] ibaresi konmalıdır. Steplerin yazımı sırasında IDE tarafından önerilen\nsteplerin E2E olduğunu ve birden fazla eylemi içerdiğini anlamak açısından faydası dokunacaktır.\n\n**Uyarı:** Köşeli parantezler RegEx motorlarında farklı anlamlara geldikleri için step tanımı içerisinde bu karakterler\nkaçırılarak yazılmalıdır =\u003e \\[E2E\\]\n\n### **Step Definition Örneği:**\n```ruby\nAnd(/^\\[E2E\\] order successfully by (craftgate) with logged in user$/) do |payment_type|\n  home_page.click_login_button\n  $user = get_user\n  login_page.login($user[:phone_number])\n  home_page.click_allow_button\n           .select_category(\"fruits_vegy\")\n  category_page.select_sub_category(\"fruits_vegy\", \"fresh_vegy\")\n               .verify_select_sub_category\n               .click_add_products_with_a_total_price_greater_than_value(quantity, \"with_3d\")\n  home_page.click_go_to_my_cart\n  cart_page.click_cart_confirm_button\n  $card = get_valid_card\n  checkout_page.select_payment_type(payment_type)\n               .select_confirm_agreement\n               .click_pay\n               .fill_checkout_form_and_submit_on_iframe\n  order_result_page.verify_order_complete_successfully\nend\n```\n\n### Step Örneği\n\n```gherkin\n @smoke @verify_merge_order\n  Scenario: verify the order merged is completed successfully\n    And [E2E] order successfully by craftgate with logged in user\n    When add product to order on order result page\n    And add a random product under fresh_fruit sub menu under fruits_vegy category to the cart\n    And click cart confirm button on cart page\n    And click merge order button on cart page\n    And complete payment by craftgate with paraf master credit_card on checkout page\n    Then verify the order merge is completed successfully on order result page\n```\n## Declerative Step Tanımı\n\nAynı sayfa üzerinde ardışık olarak gerçekleştirilen işlemlerin tek bir step altında toplanmasına **declerative step** denir.\nBurada önemli nokta, declerative steplerin E2E stepler ile karıştırılmamasıdır. Declerative stepler tüm bir süreci uçtan\nuca kapsamaz, yalnızca aynı page üzerinde ve ardışık olarak gerçekleştirilen işlemleri bir araya getirir.\n\n### Declerative Step Örneği\n\n```ruby\nGiven(/^add master pass (paraf|ziraat) (master|visa|troy) (credit_card|debit_card) on my credit cards page$/) do |card_name, card_payment_type, card_type|\n    $card = get_valid_card(bank_name:card_name, card_payment_type:card_payment_type, card_type:card_type)\n    my_cards_page.click_add_new_card_button\n                 .fill_card_information($card[:card_name], $card[:card_number], $card[:expire_month], $card[:expire_year], $card[:cvv])\n                 .click_save_card_button\n                 .fill_verification_code\n                 .verify_added_card_message($card[:card_name])\n  end\n```\n\n# Tag Yönetimi\n\n```\n@wip = Developmentı henüz tamamlanmamış senaryo / feature\n@smoke = Smoke kapsamında çalışması beklenen senaryo / feature\n@excluded  = Uygulama üzerinde artık var olmayan ancak senaryosu geliştirilmiş senaryo / feature\n@bug_fix = Uygulama üzerinde var olan bir bugdan dolayı bug fix bekleyen senaryo / feature \n           Aşağıdaki örnek gibi bug_id tagı ile birlikte kullanılmalıdır.\n           Örnek Kullanım @bug_fix @bug_id_JIRA_ID \n@prod  = Prodda koşacak senaryolar\n@regression  = Regresyon sırasında koşması gereken caseler\n@feature_tag = Her bir feature dosyasına verilecek tag name. Örnek: @feature_login\n@scenario_tag = Her bir senaryoya verilecek ve uniq olması beklenen tag. Örnek: @success_login\n```\n\n# Commit ve PR structure\n\n```\n* Branch isimleri işin ticket idsi ile açılmalı. Örnek: QA-74\n* Mümkün olduğunca commitler anlaşılır açıklamalar ile commitlenmeli.\n* Commit atılırken mümkün olduğunca küçük parçalar halinde ilerlenmeli(Atomic). Böylelikle rollback daha kolay olacaktır.\n* PR QA ekibinden zorunlu review ırların review etmesinden sonra master a mergelenecektir.\n* Master'a mergelenmeden önce pipeline ilgili branch üzerinde çalıştırılacak ve herhangi bir problem olmadığı doğrulanacaktır.\n\n```\n\n# Project Feature Tags\n\nBu başlık altında feature tag'leri saklanmaktadır. Her yeni feature dosyası oluşturulup yeni bir feature tag'i\noluşturulduğunda mutlaka buraya açıklaması ile eklenmelidir.\n\n* **@feature_search** =\u003e Search yapmayla ilgili test senaryoları\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgokcesahinnn%2Fandroid-test-automation-ruby-base-project","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgokcesahinnn%2Fandroid-test-automation-ruby-base-project","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgokcesahinnn%2Fandroid-test-automation-ruby-base-project/lists"}