From 34889915f72d3fc40101a7d2573fe5b7f5271c1c Mon Sep 17 00:00:00 2001 From: Thomas Walpole Date: Sat, 15 Jun 2019 13:48:57 -0700 Subject: [PATCH] Test click offsets are from top left --- lib/capybara/spec/public/offset.js | 6 +++ lib/capybara/spec/session/node_spec.rb | 66 ++++++++++++++++++++++++++ lib/capybara/spec/views/offset.erb | 32 +++++++++++++ 3 files changed, 104 insertions(+) create mode 100644 lib/capybara/spec/public/offset.js create mode 100644 lib/capybara/spec/views/offset.erb diff --git a/lib/capybara/spec/public/offset.js b/lib/capybara/spec/public/offset.js new file mode 100644 index 00000000..4b185d87 --- /dev/null +++ b/lib/capybara/spec/public/offset.js @@ -0,0 +1,6 @@ +$(function() { + $(document).on('click dblclick contextmenu', function(e){ + e.preventDefault(); + $(document.body).append('
Has been clicked at ' + e.clientX + ',' + e.clientY + '
'); + }) +}) \ No newline at end of file diff --git a/lib/capybara/spec/session/node_spec.rb b/lib/capybara/spec/session/node_spec.rb index 4e2d1d16..ad63cb9b 100644 --- a/lib/capybara/spec/session/node_spec.rb +++ b/lib/capybara/spec/session/node_spec.rb @@ -635,6 +635,28 @@ Capybara::SpecHelper.spec 'node' do JS expect { obscured.click(wait: 0) }.to(raise_error { |e| expect(e).to be_an_invalid_element_error(@session) }) end + + context "offset" do + before do + @session.visit('/offset') + @clicker = @session.find(:id, 'clicker') + end + + it 'should offset from top left of element' do + @clicker.click(x: 10, y: 5) + expect(@session).to have_text(/clicked at 110,105/) + end + + it 'should offset outside the element' do + @clicker.click(x: -15, y: -10) + expect(@session).to have_text(/clicked at 85,90/) + end + + it 'should default to click the middle' do + @clicker.click + expect(@session).to have_text(/clicked at 150,150/) + end + end end describe '#double_click', requires: [:js] do @@ -669,6 +691,28 @@ Capybara::SpecHelper.spec 'node' do JS expect { obscured.double_click }.not_to raise_error end + + context "offset" do + before do + @session.visit('/offset') + @clicker = @session.find(:id, 'clicker') + end + + it 'should offset from top left of element' do + @clicker.click(x: 10, y: 5) + expect(@session).to have_text(/clicked at 110,105/) + end + + it 'should offset outside the element' do + @clicker.click(x: -15, y: -10) + expect(@session).to have_text(/clicked at 85,90/) + end + + it 'should default to click the middle' do + @clicker.click + expect(@session).to have_text(/clicked at 150,150/) + end + end end describe '#right_click', requires: [:js] do @@ -703,6 +747,28 @@ Capybara::SpecHelper.spec 'node' do JS expect { obscured.right_click }.not_to raise_error end + + context "offset" do + before do + @session.visit('/offset') + @clicker = @session.find(:id, 'clicker') + end + + it 'should offset from top left of element' do + @clicker.click(x: 10, y: 5) + expect(@session).to have_text(/clicked at 110,105/) + end + + it 'should offset outside the element' do + @clicker.click(x: -15, y: -10) + expect(@session).to have_text(/clicked at 85,90/) + end + + it 'should default to click the middle' do + @clicker.click + expect(@session).to have_text(/clicked at 150,150/) + end + end end describe '#send_keys', requires: [:send_keys] do diff --git a/lib/capybara/spec/views/offset.erb b/lib/capybara/spec/views/offset.erb new file mode 100644 index 00000000..7db2dbfa --- /dev/null +++ b/lib/capybara/spec/views/offset.erb @@ -0,0 +1,32 @@ + + + + Offset + + + + + +
+
+
+ + \ No newline at end of file