From 767ef4dba5395c2100a8c63b28afcd5fdc090727 Mon Sep 17 00:00:00 2001 From: mmeest Date: Thu, 29 Jan 2026 15:05:16 +0200 Subject: [PATCH 1/5] Stabilize Selenium tests, and improved DRY --- .../admin_area/admin_users_test.rb | 23 +++---- .../admin_area/blocked_domains_test.rb | 61 +++++++++++-------- .../admin_area/reserved_domains_test.rb | 23 ++++--- test/integration/admin_area/white_ips_test.rb | 5 +- 4 files changed, 59 insertions(+), 53 deletions(-) diff --git a/test/integration/admin_area/admin_users_test.rb b/test/integration/admin_area/admin_users_test.rb index 2b458c6f1d..7fd96094a7 100644 --- a/test/integration/admin_area/admin_users_test.rb +++ b/test/integration/admin_area/admin_users_test.rb @@ -12,15 +12,15 @@ class AdminAreaAdminUsersIntegrationTest < JavaScriptApplicationSystemTestCase end def test_create_new_admin_user - createNewAdminUser(true) + create_admin_user(valid: true) end def test_create_with_invalid_data_new_admin_user - createNewAdminUser(false) + create_admin_user(valid: false) end def test_edit_successfully_exist_record - createNewAdminUser(true) + create_admin_user(valid: true) visit admin_admin_users_path assert_selector 'a', text: 'test_user_name' @@ -38,7 +38,7 @@ def test_edit_successfully_exist_record end def test_edit_exist_record_with_invalid_data - createNewAdminUser(true) + create_admin_user(valid: true) visit admin_admin_users_path click_on 'test_user_name' @@ -54,26 +54,24 @@ def test_edit_exist_record_with_invalid_data end def test_delete_exist_record - createNewAdminUser(true) + create_admin_user(valid: true) visit admin_admin_users_path click_on 'test_user_name' assert_text 'General' - click_on 'Delete' - page.driver.browser.switch_to.alert.accept + accept_confirm { click_on 'Delete' } assert_text 'Record deleted' end private - def createNewAdminUser(valid) + def create_admin_user(valid:) visit admin_admin_users_path click_on 'New admin user' fill_in 'Username', with: 'test_user_name' - # If valid=true creating valid user, if else, then with invalid data if valid fill_in 'Password', with: 'test_password' fill_in 'Password confirmation', with: 'test_password' @@ -86,11 +84,8 @@ def createNewAdminUser(valid) select 'Estonia', from: 'admin_user_country_code', match: :first - select_element = find(:xpath, "/html/body/div[2]/form/div[2]/div/div[7]/div[2]/div/div[1]") - select_element.click - - option_element = find(:xpath, "/html/body/div[2]/form/div[2]/div/div[7]/div[2]/div/div[2]/div/div[1]") - option_element.click + find('form.form-horizontal .selectize-control .selectize-input').click + find('.selectize-dropdown .option', match: :first).click click_on 'Save' diff --git a/test/integration/admin_area/blocked_domains_test.rb b/test/integration/admin_area/blocked_domains_test.rb index b4195240a3..12b03e85e1 100644 --- a/test/integration/admin_area/blocked_domains_test.rb +++ b/test/integration/admin_area/blocked_domains_test.rb @@ -1,50 +1,41 @@ require 'test_helper' require 'application_system_test_case' - -# /admin/blocked_domains class AdminAreaBlockedDomainsIntegrationTest < JavaScriptApplicationSystemTestCase setup do WebMock.allow_net_connect! sign_in users(:admin) + @domain = domains(:shop) @blocked_domain = blocked_domains(:one) end def test_page_successfully_loaded - visit_admin_blocked_domains_path + visit_admin_blocked_domains end def test_add_into_blocked_list - visit_admin_blocked_domains_path - add_domain_into_blocked_list(true) + visit_admin_blocked_domains + add_blocked_domain(success: true) end def test_add_into_blocked_list_same_domain - visit_admin_blocked_domains_path - add_domain_into_blocked_list(true) - add_domain_into_blocked_list(false) + visit_admin_blocked_domains + add_blocked_domain(success: true) + add_blocked_domain(success: false) end def test_delete_domain_from_blocked_list - visit_admin_blocked_domains_path - add_domain_into_blocked_list(true) - - click_link_or_button 'Delete', match: :first + setup_blocked_domain - # Accept to delete in modal window - page.driver.browser.switch_to.alert.accept - - assert_text 'Domain deleted!' + delete_first_blocked_domain + assert_text 'Domain deleted!' end def test_find_blocked_domain_from_blocked_list - visit_admin_blocked_domains_path - add_domain_into_blocked_list(true) - - fill_in 'Name', with: @domain.name - find(:xpath, "//span[@class='glyphicon glyphicon-search']").click + setup_blocked_domain + search_blocked_domain(@domain.name) assert_text @domain.name end @@ -56,26 +47,42 @@ def test_download_blocked_domains assert_response :ok assert_equal 'text/csv; charset=utf-8', response.headers['Content-Type'] - assert_equal %(attachment; filename="blocked_domains_#{Time.zone.now.to_formatted_s(:number)}.csv"; filename*=UTF-8''blocked_domains_#{Time.zone.now.to_formatted_s(:number)}.csv), - response.headers['Content-Disposition'] assert_not_empty response.body end private - def visit_admin_blocked_domains_path + def visit_admin_blocked_domains visit admin_blocked_domains_path assert_text 'Blocked domains' end - def add_domain_into_blocked_list(value) + def add_blocked_domain(success:) click_on 'New blocked domain' assert_text 'Add domain to blocked list' fill_in 'Name', with: @domain.name click_on 'Save' - return assert_text 'Domain added!' if value - return assert_text 'Failed to add domain!' + if success + assert_text 'Domain added!' + assert_no_css '.modal.show' + else + assert_text 'Failed to add domain!' + end + end + + def setup_blocked_domain + visit_admin_blocked_domains + add_blocked_domain(success: true) + end + + def delete_first_blocked_domain + accept_confirm { click_link_or_button 'Delete', match: :first } + end + + def search_blocked_domain(name) + fill_in 'Name', with: name + find('.glyphicon-search').click end end diff --git a/test/integration/admin_area/reserved_domains_test.rb b/test/integration/admin_area/reserved_domains_test.rb index 4c0a7f1da2..b3b3ecee7d 100644 --- a/test/integration/admin_area/reserved_domains_test.rb +++ b/test/integration/admin_area/reserved_domains_test.rb @@ -12,15 +12,13 @@ class AdminAreaReservedDomainsIntegrationTest < JavaScriptApplicationSystemTestC end def test_remove_reserved_domain - visit admin_reserved_domains_path - click_link_or_button 'Delete', match: :first - page.driver.browser.switch_to.alert.accept - + visit_reserved_domains + delete_first_reserved_domain assert_text 'Domain deleted!' end def test_add_invalid_domain - visit admin_reserved_domains_path + visit_reserved_domains click_on 'New reserved domain' fill_in "Name", with: "@##@$" click_on 'Save' @@ -29,7 +27,7 @@ def test_add_invalid_domain end def test_update_reserved_domain - visit admin_reserved_domains_path + visit_reserved_domains click_link_or_button 'Edit', match: :first fill_in 'Password', with: '12345678' click_on 'Save' @@ -51,8 +49,7 @@ def test_download_reserved_domains end def test_release_to_auction - visit admin_reserved_domains_path - + visit_reserved_domains first("input[type='checkbox']").set(true) click_on 'Send to the auction list' @@ -62,4 +59,14 @@ def test_release_to_auction assert_text 'reserved.test' assert_text 'started' end + + private + + def visit_reserved_domains + visit admin_reserved_domains_path + end + + def delete_first_reserved_domain + accept_confirm { click_link_or_button 'Delete', match: :first } + end end diff --git a/test/integration/admin_area/white_ips_test.rb b/test/integration/admin_area/white_ips_test.rb index 06f314e77f..83218f1bf0 100644 --- a/test/integration/admin_area/white_ips_test.rb +++ b/test/integration/admin_area/white_ips_test.rb @@ -79,10 +79,7 @@ def test_visit_info_whitelisted_ip_page def test_delete_whitelisted_ip visit_info_whitelisted_ip_page - click_on 'Delete' - - page.driver.browser.switch_to.alert.accept - + accept_confirm { click_on 'Delete' } assert_text 'Record deleted' end From eca4ab6d525402335d43e2ae24d580524d8b3204 Mon Sep 17 00:00:00 2001 From: mmeest Date: Thu, 29 Jan 2026 15:20:37 +0200 Subject: [PATCH 2/5] white_ips_test update --- test/integration/admin_area/white_ips_test.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/integration/admin_area/white_ips_test.rb b/test/integration/admin_area/white_ips_test.rb index 83218f1bf0..f03db83b2d 100644 --- a/test/integration/admin_area/white_ips_test.rb +++ b/test/integration/admin_area/white_ips_test.rb @@ -43,6 +43,7 @@ def test_visit_edit_whitelisted_ip_page def test_update_whitelisted_ip visit_info_whitelisted_ip_page click_on 'Edit' + assert_text 'Edit white IP' fill_in 'IPv4', with: '127.0.0.2' find(:css, '#white_ip_interfaces_api').set(false) @@ -66,8 +67,9 @@ def test_update_whitelisted_ip def test_failed_to_update_whitelisted_ip visit_info_whitelisted_ip_page click_on 'Edit' - fill_in 'IPv4', with: 'asdadad#' + assert_text 'Edit white IP' + fill_in 'IPv4', with: 'asdadad#' click_on 'Save' assert_text 'Failed to update record' From b06cc46a1c4ca05113c7fffe478433a457000eb5 Mon Sep 17 00:00:00 2001 From: mmeest Date: Thu, 29 Jan 2026 15:32:49 +0200 Subject: [PATCH 3/5] replaced click_on Accept in tests --- .../admin_area/pending_delete_test.rb | 16 ++++------------ .../admin_area/pending_update_test.rb | 13 ++++--------- 2 files changed, 8 insertions(+), 21 deletions(-) diff --git a/test/integration/admin_area/pending_delete_test.rb b/test/integration/admin_area/pending_delete_test.rb index 737d124809..7a722e376a 100644 --- a/test/integration/admin_area/pending_delete_test.rb +++ b/test/integration/admin_area/pending_delete_test.rb @@ -17,9 +17,7 @@ class AdminAreaPendingDeleteIntegrationTest < JavaScriptApplicationSystemTestCas def test_accept_pending_delete visit edit_admin_domain_path(id: @domain.id) - click_on 'Accept' - page.driver.browser.switch_to.alert.accept - + accept_confirm { click_on 'Accept' } assert_text 'Pending was successfully applied.' end @@ -30,18 +28,14 @@ def test_accept_pending_delete_no_success visit edit_admin_domain_path(id: @domain.id) - click_on 'Accept' - page.driver.browser.switch_to.alert.accept - + accept_confirm { click_on 'Accept' } assert_text 'Not success' end def test_reject_panding_delete visit edit_admin_domain_path(id: @domain.id) - click_on 'Reject' - page.driver.browser.switch_to.alert.accept - + accept_confirm { click_on 'Reject' } assert_text 'Pending was successfully removed.' end @@ -52,9 +46,7 @@ def test_accept_pending_delete_no_success visit edit_admin_domain_path(id: @domain.id) - click_on 'Reject' - page.driver.browser.switch_to.alert.accept - + accept_confirm { click_on 'Reject' } assert_text 'Not success' end end diff --git a/test/integration/admin_area/pending_update_test.rb b/test/integration/admin_area/pending_update_test.rb index 5d08e104bf..6023a4de69 100644 --- a/test/integration/admin_area/pending_update_test.rb +++ b/test/integration/admin_area/pending_update_test.rb @@ -29,9 +29,7 @@ def test_accept_pending_update visit edit_admin_domain_path(id: @domain.id) - click_on 'Accept' - page.driver.browser.switch_to.alert.accept - + accept_confirm { click_on 'Accept' } assert_text 'Pending was successfully applied.' end @@ -51,8 +49,7 @@ def test_accept_pending_update_no_success visit edit_admin_domain_path(id: @domain.id) - click_on 'Accept' - page.driver.browser.switch_to.alert.accept + accept_confirm { click_on 'Accept' } assert_text 'Not success' end @@ -68,8 +65,7 @@ def test_reject_panding_update visit edit_admin_domain_path(id: @domain.id) - click_on 'Reject' - page.driver.browser.switch_to.alert.accept + accept_confirm { click_on 'Reject' } assert_text 'Pending was successfully removed.' end @@ -89,8 +85,7 @@ def test_accept_pending_update_no_success visit edit_admin_domain_path(id: @domain.id) - click_on 'Reject' - page.driver.browser.switch_to.alert.accept + accept_confirm { click_on 'Reject' } assert_text 'Not success' end end From 6c8a365b6a34303804341778185ca7032950809d Mon Sep 17 00:00:00 2001 From: mmeest Date: Thu, 29 Jan 2026 16:15:06 +0200 Subject: [PATCH 4/5] updated blocked_domains_test --- test/integration/admin_area/blocked_domains_test.rb | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/test/integration/admin_area/blocked_domains_test.rb b/test/integration/admin_area/blocked_domains_test.rb index 12b03e85e1..5821bffcc4 100644 --- a/test/integration/admin_area/blocked_domains_test.rb +++ b/test/integration/admin_area/blocked_domains_test.rb @@ -62,7 +62,7 @@ def add_blocked_domain(success:) assert_text 'Add domain to blocked list' fill_in 'Name', with: @domain.name - click_on 'Save' + safe_click_on 'Save' if success assert_text 'Domain added!' @@ -85,4 +85,11 @@ def search_blocked_domain(name) fill_in 'Name', with: name find('.glyphicon-search').click end + + def safe_click_on(locator, **options) + click_on locator, **options + rescue Selenium::WebDriver::Error::UnknownError => e + raise unless e.message.include?('Node with given id does not belong to the document') + click_on locator, **options + end end From cd2ba0ada9d2c6b4cf8eaebe4b2ca5e7ab5f998a Mon Sep 17 00:00:00 2001 From: mmeest Date: Thu, 29 Jan 2026 16:44:54 +0200 Subject: [PATCH 5/5] blocked_domains_test added retry --- test/integration/admin_area/blocked_domains_test.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/integration/admin_area/blocked_domains_test.rb b/test/integration/admin_area/blocked_domains_test.rb index 5821bffcc4..da214951bb 100644 --- a/test/integration/admin_area/blocked_domains_test.rb +++ b/test/integration/admin_area/blocked_domains_test.rb @@ -79,6 +79,9 @@ def setup_blocked_domain def delete_first_blocked_domain accept_confirm { click_link_or_button 'Delete', match: :first } + rescue Selenium::WebDriver::Error::UnknownError => e + raise unless e.message.include?('Node with given id does not belong to the document') + accept_confirm { click_link_or_button 'Delete', match: :first } end def search_blocked_domain(name)