capybara-puppeteer-driver 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b4a084da1c3ac06585dea3d4451e01b816fccf701daff22df2b61c36ec414163
4
- data.tar.gz: c5c3f0dc1de999c6a55fad8a969b2702ff669fb94c9b33f0c4f260e750a5c001
3
+ metadata.gz: 3c963d7aef431f126d37c528a69f7778c4f0bdf94e8ee4e221c37925a5eb1406
4
+ data.tar.gz: 248c36c1347e9449ef667f1b04380f9b6ecad3a2dbeb712b88eebda917ecbfb0
5
5
  SHA512:
6
- metadata.gz: 0b76eb4692f1cfcaad5f7a1db172f2f56a6cce9b4327bda1ab8ea0235bb18e5bd781fdc75abe80a41f7b862628c696a5d7f6465657b82e0195be833d2400b1be
7
- data.tar.gz: aa4df315c8b32dfb6a589386651f456963223c5f183f9f97cdbdc95b9556076fdd6470bae76a895fc909d474f99777cf214e98551061f79ab38601de438ab309
6
+ metadata.gz: bc64fe2cc0bc49b3cf5440983a1041a9a324e8aa047f7566fca1159280ccea3b9e0c0e44fb6d4c17e467d7e5aa1e37c793c81916074c3dbbc03fdd7e7743b78f
7
+ data.tar.gz: 135be36c6b2b66b9bbc4b2c74ec05b4435082837345b06d4031982fc0057ab594023b967dd9da064da0e48e9b2876376cf5f2009134d878e8cf6f790d66627d6
@@ -6,13 +6,12 @@ jobs:
6
6
  check:
7
7
  name: RSpec
8
8
  runs-on: ubuntu-latest
9
- container: circleci/ruby:2.7.3-buster-node-browsers
10
9
  steps:
11
- # @see https://docs.github.com/actions/reference/virtual-environments-for-github-hosted-runners#docker-container-filesystem
12
- - name: Setup file system permissions
13
- run: sudo chmod -R 777 $GITHUB_WORKSPACE /github /__w/_temp
14
10
  - uses: actions/checkout@v2
15
- - name: Install dependencies
16
- run: gem install bundler:2.2.3 && bundle install --path vendor/bundle
17
- - run: bundle exec rspec --format documentation
11
+ - uses: ruby/setup-ruby@v1
12
+ with:
13
+ ruby-version: 3.0.2
14
+ bundler-cache: true
15
+ - uses: browser-actions/setup-chrome@latest
16
+ - run: CHROME_EXECUTABLE_PATH=$(which chrome) bundle exec rspec --format documentation
18
17
  timeout-minutes: 45
@@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
24
24
  spec.require_paths = ['lib']
25
25
 
26
26
  spec.add_dependency 'capybara'
27
- spec.add_dependency 'puppeteer-ruby', '>= 0.35.0'
27
+ spec.add_dependency 'puppeteer-ruby', '>= 0.36.0'
28
28
  spec.add_development_dependency 'bundler', '~> 2.2.3'
29
29
  spec.add_development_dependency 'launchy', '>= 2.0.4'
30
30
  spec.add_development_dependency 'pry-byebug'
@@ -66,6 +66,10 @@ module Capybara
66
66
  end
67
67
 
68
68
  def find_css(query, **options)
69
+ if query.start_with?('//')
70
+ return find_xpath(query, **options)
71
+ end
72
+
69
73
  assert_page_alive
70
74
 
71
75
  find_with(:query_selector_all, query, **options)
@@ -138,6 +138,17 @@ module Capybara
138
138
  end
139
139
  ::Puppeteer::ElementHandle.prepend(ElementHandlePatch)
140
140
 
141
+ module MousePatch
142
+ def capybara_async_wait_for_drag_intercepted(&block)
143
+ Concurrent::Promises.resolvable_future.tap do |f|
144
+ @client.once('Input.dragIntercepted') do |event|
145
+ f.fulfill(event['data'])
146
+ end
147
+ end
148
+ end
149
+ end
150
+ ::Puppeteer::Mouse.prepend(MousePatch)
151
+
141
152
  # ref:
142
153
  # selenium: https://github.com/teamcapybara/capybara/blob/master/lib/capybara/selenium/node.rb
143
154
  # apparition: https://github.com/twalpole/apparition/blob/master/lib/capybara/apparition/node.rb
@@ -758,29 +769,33 @@ module Capybara
758
769
  @source.scroll_into_view_if_needed
759
770
 
760
771
  # down
761
- position_from = center_of(@source)
762
- @page.mouse.move(*position_from)
772
+ position_from = @source.clickable_point
773
+ drag_intercepted_promise = @page.mouse.capybara_async_wait_for_drag_intercepted
774
+ @page.mouse.move(position_from.x, position_from.y)
763
775
  @page.mouse.down
764
776
 
765
777
  @target.scroll_into_view_if_needed
766
778
 
767
779
  # move and up
768
780
  sleep_delay
769
- position_to = center_of(@target)
781
+ position_to = @target.clickable_point
770
782
  with_key_pressing(drop_modifiers) do
771
- @page.mouse.move(*position_to, steps: 6)
772
- sleep_delay
783
+ @page.mouse.move(position_to.x, position_to.y, steps: 6)
784
+ if drag_intercepted_promise.fulfilled?
785
+ # dispatch HTML5 drag events
786
+ data = drag_intercepted_promise.value!
787
+ @page.mouse.drag_enter(position_to, data)
788
+ @page.mouse.drag_over(position_to, data)
789
+ sleep_delay
790
+ @page.mouse.drop(position_to, data)
791
+ else
792
+ sleep_delay
793
+ end
773
794
  @page.mouse.up
774
795
  end
775
796
  sleep_delay
776
797
  end
777
798
 
778
- # @param element [Puppeteer::ElementHandle]
779
- private def center_of(element)
780
- box = element.bounding_box
781
- [box.x + box.width / 2, box.y + box.height / 2]
782
- end
783
-
784
799
  private def with_key_pressing(keys, &block)
785
800
  keys.each { |key| @page.keyboard.down(key) }
786
801
  block.call
@@ -801,6 +816,16 @@ module Capybara
801
816
 
802
817
  sleep @options[:delay]
803
818
  end
819
+
820
+ private def inject_drag_drop_event_with(drag_intercepted_promise, position_to)
821
+ unless drag_intercepted_promise.fulfilled?
822
+ return
823
+ end
824
+
825
+ data = drag_intercepted_promise.value!
826
+ @page.mouse.drag_enter(position_to, data)
827
+ @page.mouse.drag_over(position_to, data)
828
+ end
804
829
  end
805
830
 
806
831
  def drop(*args)
@@ -32,6 +32,8 @@ module Capybara
32
32
  @capybara_last_response = @capybara_all_responses[frame.url]
33
33
  @capybara_all_responses.clear
34
34
  end
35
+
36
+ self.drag_interception_enabled = true
35
37
  end
36
38
 
37
39
  private def capybara_dialog_event_handler
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Capybara
4
4
  module Puppeteer
5
- VERSION = '0.1.1'
5
+ VERSION = '0.1.2'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capybara-puppeteer-driver
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - YusukeIwaki
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-07-05 00:00:00.000000000 Z
11
+ date: 2021-08-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capybara
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 0.35.0
33
+ version: 0.36.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 0.35.0
40
+ version: 0.36.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement