diff --git a/spec/support/system_helpers.rb b/spec/support/system_helpers.rb
index 05c9d3b125a5656160b9771654b3ac566daf3032..4cc1928701af713cb6047fc5d564bfaa14c46123 100644
--- a/spec/support/system_helpers.rb
+++ b/spec/support/system_helpers.rb
@@ -16,4 +16,8 @@ module SystemHelpers
   def form_label(key)
     I18n.t key, scope: 'simple_form.labels'
   end
+
+  def css_id(record)
+    "##{dom_id(record)}"
+  end
 end
diff --git a/spec/system/admin/announcements_spec.rb b/spec/system/admin/announcements_spec.rb
index 1da5699656a20ffdabbf2e21518454d518d83400..87b7332639c77ad573a34e7c075101458fe4dbe7 100644
--- a/spec/system/admin/announcements_spec.rb
+++ b/spec/system/admin/announcements_spec.rb
@@ -45,7 +45,7 @@ RSpec.describe 'Admin::Announcements' do
 
       fill_in text_label,
               with: 'Announcement text'
-      save_changes
+      click_on submit_button
 
       expect(page)
         .to have_content(I18n.t('admin.announcements.updated_msg'))
@@ -94,10 +94,6 @@ RSpec.describe 'Admin::Announcements' do
 
   private
 
-  def css_id(record)
-    "##{dom_id(record)}" # TODO: Extract to system spec helper?
-  end
-
   def publish_announcement(announcement)
     within css_id(announcement) do
       click_on I18n.t('admin.announcements.publish')
@@ -116,10 +112,6 @@ RSpec.describe 'Admin::Announcements' do
     end
   end
 
-  def save_changes
-    click_on I18n.t('generic.save_changes')
-  end
-
   def submit_form
     click_on I18n.t('admin.announcements.new.create')
   end
diff --git a/spec/system/admin/domain_blocks_spec.rb b/spec/system/admin/domain_blocks_spec.rb
index 9a39e290623cd3ec3581b60a8fa718de7e1f866e..f00d65dfe05a6de1df4d41f9afce95d831e82c64 100644
--- a/spec/system/admin/domain_blocks_spec.rb
+++ b/spec/system/admin/domain_blocks_spec.rb
@@ -91,7 +91,7 @@ RSpec.describe 'blocking domains through the moderation interface' do
       visit edit_admin_domain_block_path(domain_block)
 
       select I18n.t('admin.domain_blocks.new.severity.suspend'), from: 'domain_block_severity'
-      click_on I18n.t('generic.save_changes')
+      click_on submit_button
 
       # It doesn't immediately block but presents a confirmation screen
       expect(page).to have_title(I18n.t('admin.domain_blocks.confirm_suspension.title', domain: 'example.com'))
diff --git a/spec/system/filters_spec.rb b/spec/system/filters_spec.rb
index 052b5e17306543f0594589122ae09f3c85d232fa..64de384c007a84e6b1388c6c473deabde7ba3202 100644
--- a/spec/system/filters_spec.rb
+++ b/spec/system/filters_spec.rb
@@ -29,7 +29,7 @@ RSpec.describe 'Filters' do
       click_on filter_title
 
       fill_in filter_title_field, with: new_title
-      click_on I18n.t('generic.save_changes')
+      click_on submit_button
 
       expect(page).to have_content(new_title)
     end
diff --git a/spec/system/invites_spec.rb b/spec/system/invites_spec.rb
index 648bbea82562a15448b29010879a710aadfe99eb..c57de871cc6e1aef8955349d4c183488eefd1569 100644
--- a/spec/system/invites_spec.rb
+++ b/spec/system/invites_spec.rb
@@ -56,10 +56,6 @@ RSpec.describe 'Invites' do
 
   private
 
-  def css_id(record)
-    "##{dom_id(record)}" # TODO: Extract to system spec helper?
-  end
-
   def copyable_field
     within '.input-copy' do
       find(:field, type: :text, readonly: true)