capybara-puppeteer-driver 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
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