diff --git a/Gemfile b/Gemfile
index f2d24d79cb783ada0ab9b5e1c09b918d006b476f..5f345f4329a247eeb3a2c88595a992857bd49fad 100644
--- a/Gemfile
+++ b/Gemfile
@@ -345,9 +345,9 @@ group :development, :test do
   # Generate Fake data
   gem 'ffaker', '~> 2.10'
 
-  gem 'capybara', '~> 2.16.1'
-  gem 'capybara-screenshot', '~> 1.0.18'
-  gem 'selenium-webdriver', '~> 3.12'
+  gem 'capybara', '~> 2.18.0'
+  gem 'capybara-screenshot', '~> 1.0.22'
+  gem 'selenium-webdriver', '~> 3.141'
 
   gem 'spring', '~> 2.0.0'
   gem 'spring-commands-rspec', '~> 1.0.4'
diff --git a/Gemfile.lock b/Gemfile.lock
index baa7be6258aa0147b89efb54ff96cc84dd625871..c1d1a50799f828fbc1f052851dd40f5881c5242d 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -100,13 +100,13 @@ GEM
       bundler (~> 1.2)
       thor (~> 0.18)
     byebug (9.1.0)
-    capybara (2.16.1)
+    capybara (2.18.0)
       addressable
       mini_mime (>= 0.1.3)
       nokogiri (>= 1.3.3)
       rack (>= 1.0.0)
       rack-test (>= 0.5.4)
-      xpath (~> 2.0)
+      xpath (>= 2.0, < 4.0)
     capybara-screenshot (1.0.22)
       capybara (>= 1.0, < 4)
       launchy
@@ -488,7 +488,7 @@ GEM
     net-ssh (5.0.1)
     netrc (0.11.0)
     nio4r (2.3.1)
-    nokogiri (1.10.1)
+    nokogiri (1.10.2)
       mini_portile2 (~> 2.4.0)
     nokogumbo (1.5.0)
       nokogiri
@@ -706,7 +706,7 @@ GEM
       redis-store (>= 1.2, < 2)
     redis-store (1.6.0)
       redis (>= 2.2, < 5)
-    regexp_parser (1.3.0)
+    regexp_parser (1.4.0)
     regexp_property_values (0.3.4)
     representable (3.0.4)
       declarative (< 0.1.0)
@@ -815,9 +815,9 @@ GEM
     seed-fu (2.3.7)
       activerecord (>= 3.1)
       activesupport (>= 3.1)
-    selenium-webdriver (3.12.0)
+    selenium-webdriver (3.141.0)
       childprocess (~> 0.5)
-      rubyzip (~> 1.2)
+      rubyzip (~> 1.2, >= 1.2.2)
     sentry-raven (2.9.0)
       faraday (>= 0.7.6, < 1.0)
     settingslogic (2.0.9)
@@ -943,8 +943,8 @@ GEM
       rinku
     with_env (1.1.0)
     xml-simple (1.1.5)
-    xpath (2.1.0)
-      nokogiri (~> 1.3)
+    xpath (3.2.0)
+      nokogiri (~> 1.8)
 
 PLATFORMS
   ruby
@@ -974,8 +974,8 @@ DEPENDENCIES
   browser (~> 2.5)
   bullet (~> 5.5.0)
   bundler-audit (~> 0.5.0)
-  capybara (~> 2.16.1)
-  capybara-screenshot (~> 1.0.18)
+  capybara (~> 2.18.0)
+  capybara-screenshot (~> 1.0.22)
   carrierwave (~> 1.3)
   charlock_holmes (~> 0.7.5)
   chronic (~> 0.10.2)
@@ -1146,7 +1146,7 @@ DEPENDENCIES
   sass-rails (~> 5.0.6)
   scss_lint (~> 0.56.0)
   seed-fu (~> 2.3.7)
-  selenium-webdriver (~> 3.12)
+  selenium-webdriver (~> 3.141)
   sentry-raven (~> 2.7)
   settingslogic (~> 2.0.9)
   sham_rack (~> 1.3.6)
diff --git a/qa/Gemfile.lock b/qa/Gemfile.lock
index c9b0db6a272d335b5696a95fd966e9db92ae200e..9d3d42fb6aeb0abb263ad8ad58685ba03a37694d 100644
--- a/qa/Gemfile.lock
+++ b/qa/Gemfile.lock
@@ -49,7 +49,7 @@ GEM
     mini_portile2 (2.4.0)
     minitest (5.11.1)
     netrc (0.11.0)
-    nokogiri (1.10.1)
+    nokogiri (1.10.2)
       mini_portile2 (~> 2.4.0)
     pry (0.11.3)
       coderay (~> 1.1.0)
diff --git a/spec/features/admin/admin_hooks_spec.rb b/spec/features/admin/admin_hooks_spec.rb
index 25ed3bdc88e24d7d70d48ca73d52b4d398c5d71e..ce780789f5a50040d46a7bd764e66552b2e1f40a 100644
--- a/spec/features/admin/admin_hooks_spec.rb
+++ b/spec/features/admin/admin_hooks_spec.rb
@@ -73,22 +73,26 @@
   end
 
   describe 'Remove existing hook', :js do
+    let(:hook_url) { generate(:url) }
+
     before do
-      create(:system_hook)
+      create(:system_hook, url: hook_url)
     end
 
     context 'removes existing hook' do
       it 'from hooks list page' do
         visit admin_hooks_path
 
-        expect { accept_confirm { find(:link, 'Remove').send_keys(:return) } }.to change(SystemHook, :count).by(-1)
+        accept_confirm { click_link 'Remove' }
+        expect(page).not_to have_content(hook_url)
       end
 
       it 'from hook edit page' do
         visit admin_hooks_path
         click_link 'Edit'
 
-        expect { accept_confirm { find(:link, 'Remove').send_keys(:return) } }.to change(SystemHook, :count).by(-1)
+        accept_confirm { click_link 'Remove' }
+        expect(page).not_to have_content(hook_url)
       end
     end
   end
diff --git a/spec/features/projects/members/user_requests_access_spec.rb b/spec/features/projects/members/user_requests_access_spec.rb
index 50ba67f0ffc39fe4af4821ad01c4b2aee11ff2ef..f26941ab567530260878c2b31949d8280f2486e4 100644
--- a/spec/features/projects/members/user_requests_access_spec.rb
+++ b/spec/features/projects/members/user_requests_access_spec.rb
@@ -62,8 +62,9 @@
 
     accept_confirm { click_link 'Withdraw Access Request' }
 
-    expect(project.requesters.exists?(user_id: user)).to be_falsey
     expect(page).to have_content 'Your access request to the project has been withdrawn.'
+    expect(page).not_to have_content 'Withdraw Access Request'
+    expect(page).to have_content 'Request Access'
   end
 
   def open_project_settings_menu
diff --git a/spec/features/u2f_spec.rb b/spec/features/u2f_spec.rb
index ae9b65d1a3910fb4aff53277963edd40103c65f4..ea02f36d9d09e01ba2a529ca94feb5be2c327e21 100644
--- a/spec/features/u2f_spec.rb
+++ b/spec/features/u2f_spec.rb
@@ -246,26 +246,6 @@ def register_u2f_device(u2f_device = nil, name: 'My device')
         end
       end
     end
-
-    describe "when two-factor authentication is disabled" do
-      let(:user) { create(:user) }
-
-      before do
-        user = gitlab_sign_in(:user)
-        user.update_attribute(:otp_required_for_login, true)
-        visit profile_account_path
-        manage_two_factor_authentication
-        expect(page).to have_content("Your U2F device needs to be set up.")
-        register_u2f_device
-      end
-
-      it "deletes u2f registrations" do
-        visit profile_two_factor_auth_path
-        expect do
-          accept_confirm { click_on "Disable" }
-        end.to change { U2fRegistration.count }.by(-1)
-      end
-    end
   end
 
   describe 'fallback code authentication' do
diff --git a/spec/support/shared_examples/features/master_manages_access_requests_shared_example.rb b/spec/support/shared_examples/features/master_manages_access_requests_shared_example.rb
index 75ad948e42c20a39226362cd2e32e9e3f3460349..d87e5fcaa88dcd5aab63a3cb6b8f25e836d469a7 100644
--- a/spec/support/shared_examples/features/master_manages_access_requests_shared_example.rb
+++ b/spec/support/shared_examples/features/master_manages_access_requests_shared_example.rb
@@ -19,7 +19,7 @@
 
     expect_visible_access_request(entity, user)
 
-    accept_confirm { click_on 'Grant access' }
+    click_on 'Grant access'
 
     expect_no_visible_access_request(entity, user)
 
@@ -40,13 +40,11 @@
   end
 
   def expect_visible_access_request(entity, user)
-    expect(entity.requesters.exists?(user_id: user)).to be_truthy
     expect(page).to have_content "Users requesting access to #{entity.name} 1"
     expect(page).to have_content user.name
   end
 
   def expect_no_visible_access_request(entity, user)
-    expect(entity.requesters.exists?(user_id: user)).to be_falsy
     expect(page).not_to have_content "Users requesting access to #{entity.name}"
   end
 end