diff --git a/app/views/groups/dependency_proxies/_url.html.haml b/app/views/groups/dependency_proxies/_url.html.haml
index 785ad8f94fd485080120ed45990e0c585a42f55a..b3fb1cf05a2c9db6208fdbb381dda8dea4292e0b 100644
--- a/app/views/groups/dependency_proxies/_url.html.haml
+++ b/app/views/groups/dependency_proxies/_url.html.haml
@@ -8,5 +8,5 @@
     = clipboard_button(text: "#{proxy_url}", title: _("Copy %{proxy_url}") % { proxy_url: proxy_url })
 
 .row
-  .col-12.help-block.gl-mt-3
+  .col-12.help-block.gl-mt-3{ data: { qa_selector: 'dependency_proxy_count' } }
     = _('Contains %{count} blobs of images (%{size})') % { count: @blobs_count, size: number_to_human_size(@blobs_total_size) }
diff --git a/app/views/groups/dependency_proxies/show.html.haml b/app/views/groups/dependency_proxies/show.html.haml
index 5cf4ff4bc26e544627d55bc8d0114e9c497307b1..177018af830edc862b4d06162103f1fb625f8247 100644
--- a/app/views/groups/dependency_proxies/show.html.haml
+++ b/app/views/groups/dependency_proxies/show.html.haml
@@ -13,7 +13,7 @@
       .form-group
         %h5.prepend-top-20= _('Enable proxy')
         .js-dependency-proxy-toggle-area
-          = render "shared/buttons/project_feature_toggle", is_checked: @dependency_proxy.enabled?, label: s_("DependencyProxy|Toggle Dependency Proxy") do
+          = render "shared/buttons/project_feature_toggle", is_checked: @dependency_proxy.enabled?, label: s_("DependencyProxy|Toggle Dependency Proxy"), data: { qa_selector: 'dependency_proxy_setting_toggle' } do
             = f.hidden_field :enabled, { class: 'js-project-feature-toggle-input'}
 
       - if @dependency_proxy.enabled
diff --git a/qa/qa.rb b/qa/qa.rb
index 88d9ea13045785004d3ac61e3214a4c7a596416e..965cc88e50c8f4a79a4254fbf7fb7b1593cb41df 100644
--- a/qa/qa.rb
+++ b/qa/qa.rb
@@ -239,6 +239,7 @@ module Group
       autoload :Menu, 'qa/page/group/menu'
       autoload :Members, 'qa/page/group/members'
       autoload :BulkImport, 'qa/page/group/bulk_import'
+      autoload :DependencyProxy, 'qa/page/group/dependency_proxy'
 
       module Milestone
         autoload :Index, 'qa/page/group/milestone/index'
diff --git a/qa/qa/page/group/dependency_proxy.rb b/qa/qa/page/group/dependency_proxy.rb
new file mode 100644
index 0000000000000000000000000000000000000000..f637c79cffcb7536dcd28939566a249a5d38fd1f
--- /dev/null
+++ b/qa/qa/page/group/dependency_proxy.rb
@@ -0,0 +1,26 @@
+# frozen_string_literal: true
+
+module QA
+  module Page
+    module Group
+      class DependencyProxy < QA::Page::Base
+        view 'app/views/groups/dependency_proxies/show.html.haml' do
+          element :dependency_proxy_setting_toggle
+        end
+
+        view 'app/views/groups/dependency_proxies/_url.html.haml' do
+          element :dependency_proxy_count
+        end
+
+        def has_dependency_proxy_enabled?
+          toggle = find_element(:dependency_proxy_setting_toggle)
+          toggle[:class].include?('is-checked')
+        end
+
+        def has_blob_count?(blob_text)
+          has_element?(:dependency_proxy_count, text: blob_text)
+        end
+      end
+    end
+  end
+end
diff --git a/qa/qa/page/group/menu.rb b/qa/qa/page/group/menu.rb
index 9f793934dc90f9a3925e74ae630c290f1d08f601..7f8d3de4b4cd2a1c6e4530e2dae6172390d75d73 100644
--- a/qa/qa/page/group/menu.rb
+++ b/qa/qa/page/group/menu.rb
@@ -70,6 +70,14 @@ def go_to_group_packages
           end
         end
 
+        def go_to_dependency_proxy
+          hover_group_packages do
+            within_submenu do
+              click_element(:sidebar_menu_item_link, menu_item: 'Dependency Proxy')
+            end
+          end
+        end
+
         private
 
         def hover_issues
diff --git a/qa/qa/specs/features/browser_ui/5_package/dependency_proxy_spec.rb b/qa/qa/specs/features/browser_ui/5_package/dependency_proxy_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..be1d0dd8e8141721fa53b51f997ca79b591e15b8
--- /dev/null
+++ b/qa/qa/specs/features/browser_ui/5_package/dependency_proxy_spec.rb
@@ -0,0 +1,104 @@
+# frozen_string_literal: true
+
+module QA
+  RSpec.describe 'Package', :orchestrated, :registry do
+    describe 'Dependency Proxy' do
+      let(:project) do
+        Resource::Project.fabricate_via_api! do |project|
+          project.name = 'dependency-proxy-project'
+          project.visibility = :private
+        end
+      end
+
+      let!(:runner) do
+        Resource::Runner.fabricate! do |runner|
+          runner.name = "qa-runner-#{Time.now.to_i}"
+          runner.tags = ["runner-for-#{project.name}"]
+          runner.executor = :docker
+          runner.project = project
+        end
+      end
+
+      let(:uri) { URI.parse(Runtime::Scenario.gitlab_address) }
+      let(:gitlab_host_with_port) { "#{uri.host}:#{uri.port}" }
+      let(:dependency_proxy_url) { "#{gitlab_host_with_port}/#{project.group.full_path}/dependency_proxy/containers" }
+
+      before do
+        Flow::Login.sign_in
+
+        project.group.visit!
+
+        Page::Group::Menu.perform(&:go_to_dependency_proxy)
+
+        Page::Group::DependencyProxy.perform do |index|
+          expect(index).to have_dependency_proxy_enabled
+        end
+      end
+
+      after do
+        runner.remove_via_api!
+      end
+
+      where(:docker_client_version) do
+        %w[docker:19.03.12 docker:20.10]
+      end
+
+      with_them do
+        it "pulls an image using the dependency proxy", testcase: 'https://gitlab.com/gitlab-org/quality/testcases/-/issues/1862' do
+          Resource::Repository::Commit.fabricate_via_api! do |commit|
+            commit.project = project
+            commit.commit_message = 'Add .gitlab-ci.yml'
+            commit.add_files([{
+                                file_path: '.gitlab-ci.yml',
+                                content:
+                                    <<~YAML
+                                      dependency-proxy-pull-test:
+                                        image: "#{docker_client_version}"
+                                        services:
+                                        - name: "#{docker_client_version}-dind"
+                                          command:
+                                          - /bin/sh
+                                          - -c
+                                          - |
+                                            apk add --no-cache openssl
+                                            true | openssl s_client -showcerts -connect gitlab.test:5050 > /usr/local/share/ca-certificates/gitlab.test.crt
+                                            update-ca-certificates
+                                            dockerd-entrypoint.sh || exit     
+                                        before_script:
+                                          - apk add curl jq grep
+                                          - docker login -u "$CI_DEPENDENCY_PROXY_USER" -p "$CI_DEPENDENCY_PROXY_PASSWORD" "$CI_DEPENDENCY_PROXY_SERVER"
+                                        script:
+                                          - docker pull #{dependency_proxy_url}/alpine:latest
+                                          - TOKEN=$(curl "https://auth.docker.io/token?service=registry.docker.io&scope=repository:ratelimitpreview/test:pull" | jq --raw-output .token)
+                                          - 'curl --head --header "Authorization: Bearer $TOKEN" "https://registry-1.docker.io/v2/ratelimitpreview/test/manifests/latest" 2>&1'
+                                          - docker pull #{dependency_proxy_url}/alpine:latest
+                                          - 'curl --head --header "Authorization: Bearer $TOKEN" "https://registry-1.docker.io/v2/ratelimitpreview/test/manifests/latest" 2>&1'
+                                        tags:
+                                        - "runner-for-#{project.name}"
+                                    YAML
+                            }])
+          end
+
+          project.visit!
+          Flow::Pipeline.visit_latest_pipeline
+
+          Page::Project::Pipeline::Show.perform do |pipeline|
+            pipeline.click_job('dependency-proxy-pull-test')
+          end
+
+          Page::Project::Job::Show.perform do |job|
+            expect(job).to be_successful(timeout: 800)
+          end
+
+          project.group.visit!
+
+          Page::Group::Menu.perform(&:go_to_dependency_proxy)
+
+          Page::Group::DependencyProxy.perform do |index|
+            expect(index).to have_blob_count("Contains 2 blobs of images")
+          end
+        end
+      end
+    end
+  end
+end