playwright-ruby-client 0.6.2 → 0.6.3
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 +4 -4
- data/documentation/docs/article/guides/rails_integration.md +112 -1
- data/lib/playwright/channel_owners/browser.rb +1 -17
- data/lib/playwright/channel_owners/browser_context.rb +4 -3
- data/lib/playwright/channel_owners/page.rb +2 -1
- data/lib/playwright/version.rb +1 -1
- data/lib/playwright_api/page.rb +4 -4
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 77f49d82e8b6b94210f79ee9e031dcfb73072a11da4c366626ad3bcf3e18bfa9
         | 
| 4 | 
            +
              data.tar.gz: '098cbff788ed38a7647de0271d6f3c38a757e3c750ebf8aaa3f96dccbb626921'
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 46997fb7eff8b747560a6f8658bc2b50cbeb2a489f75ed716ccfb84fc8dfddea171bbd4812dc897840507c7d9267e1c81e9f79ae05679ccece322dff7c8adc8b
         | 
| 7 | 
            +
              data.tar.gz: 134a0003575cbe1501af23dad3a2f706cf9a961a8c067a858ecd25e61fe7a20f018d382d8d38be40c5aaa0c603dd0b1d02bd62b674405bfa5b5e130cf8593196
         | 
| @@ -48,4 +48,115 @@ Capybara.default_driver = :playwright | |
| 48 48 | 
             
            Capybara.javascript_driver = :playwright
         | 
| 49 49 | 
             
            ```
         | 
| 50 50 |  | 
| 51 | 
            -
            It is not mandatry. Without changing the default driver, you can still use Playwright driver by specifying `Capybara.current_driver = : | 
| 51 | 
            +
            It is not mandatry. Without changing the default driver, you can still use Playwright driver by specifying `Capybara.current_driver = :playwright` (or `driven_by :playwright` in system spec) explicitly.
         | 
| 52 | 
            +
             | 
| 53 | 
            +
            ### (reference) Available driver options
         | 
| 54 | 
            +
             | 
| 55 | 
            +
            These parameters can be passed into `Capybara::Playwright::Driver.new`
         | 
| 56 | 
            +
             | 
| 57 | 
            +
            * `playwright_cli_executable_path`
         | 
| 58 | 
            +
              * Refer [this article](./download_playwright_driver) to understand what to specify.
         | 
| 59 | 
            +
            * `browser_type`
         | 
| 60 | 
            +
              * `:chromium` (default), `:firefox`, or `:webkit`
         | 
| 61 | 
            +
            * Parameters for [Playwright::BrowserType#launch](/docs/api/browser_type#launch)
         | 
| 62 | 
            +
              * args
         | 
| 63 | 
            +
              * channel
         | 
| 64 | 
            +
                * `chrome`, `msedge`, `chrome-beta`, `chrome-dev`, `chrome-canary`, `msedge-beta`, `msedge-dev` Browser distribution channel. Read more about using [Google Chrome & Microsoft Edge](https://playwright.dev/docs/browsers#google-chrome--microsoft-edge)
         | 
| 65 | 
            +
              * devtools
         | 
| 66 | 
            +
              * downloadsPath
         | 
| 67 | 
            +
              * env
         | 
| 68 | 
            +
              * executablePath
         | 
| 69 | 
            +
              * firefoxUserPrefs
         | 
| 70 | 
            +
              * headless
         | 
| 71 | 
            +
              * ignoreDefaultArgs
         | 
| 72 | 
            +
              * proxy
         | 
| 73 | 
            +
              * slowMo
         | 
| 74 | 
            +
              * timeout
         | 
| 75 | 
            +
            * Parameters for [Playwright::Browser#new_context](/docs/api/browser#new_context)
         | 
| 76 | 
            +
              * bypassCSP
         | 
| 77 | 
            +
              * colorScheme
         | 
| 78 | 
            +
              * deviceScaleFactor
         | 
| 79 | 
            +
              * extraHTTPHeaders
         | 
| 80 | 
            +
              * geolocation
         | 
| 81 | 
            +
              * hasTouch
         | 
| 82 | 
            +
              * httpCredentials
         | 
| 83 | 
            +
              * ignoreHTTPSErrors
         | 
| 84 | 
            +
              * isMobile
         | 
| 85 | 
            +
              * javaScriptEnabled
         | 
| 86 | 
            +
              * locale
         | 
| 87 | 
            +
              * noViewport
         | 
| 88 | 
            +
              * offline
         | 
| 89 | 
            +
              * permissions
         | 
| 90 | 
            +
              * proxy
         | 
| 91 | 
            +
              * record_har_omit_content
         | 
| 92 | 
            +
              * record_har_path
         | 
| 93 | 
            +
              * record_video_dir
         | 
| 94 | 
            +
              * record_video_size
         | 
| 95 | 
            +
              * screen
         | 
| 96 | 
            +
              * storageState
         | 
| 97 | 
            +
              * timezoneId
         | 
| 98 | 
            +
              * userAgent
         | 
| 99 | 
            +
              * viewport
         | 
| 100 | 
            +
             | 
| 101 | 
            +
            ```ruby
         | 
| 102 | 
            +
            driver_opts = {
         | 
| 103 | 
            +
              # `playwright` command path.
         | 
| 104 | 
            +
              playwright_cli_executable_path: './node_modules/.bin/playwright',
         | 
| 105 | 
            +
             | 
| 106 | 
            +
              # Use firefox for testing.
         | 
| 107 | 
            +
              browser_type: :firefox,
         | 
| 108 | 
            +
             | 
| 109 | 
            +
              # Headful mode.
         | 
| 110 | 
            +
              headless: false,
         | 
| 111 | 
            +
             | 
| 112 | 
            +
              # Slower operation
         | 
| 113 | 
            +
              slowMo: 50, # integer. (50-100 would be good for most cases)
         | 
| 114 | 
            +
            }
         | 
| 115 | 
            +
             | 
| 116 | 
            +
            Capybara::Playwright::Driver.new(app, driver_opts)
         | 
| 117 | 
            +
            ```
         | 
| 118 | 
            +
             | 
| 119 | 
            +
             | 
| 120 | 
            +
            ## Available functions and Limitations
         | 
| 121 | 
            +
             | 
| 122 | 
            +
            ### Capybara DSL
         | 
| 123 | 
            +
             | 
| 124 | 
            +
            Most of the methods of `Capybara::Session` and `Capybara::Node::Element` are available. However the following method is not yet implemented.
         | 
| 125 | 
            +
             | 
| 126 | 
            +
            * `Capybara::Node::Element#drop`
         | 
| 127 | 
            +
             | 
| 128 | 
            +
            ### Playwright-native scripting
         | 
| 129 | 
            +
             | 
| 130 | 
            +
            We can also describe Playwright-native automation script using `with_playwright_page` and `with_playwright_element_handle`.
         | 
| 131 | 
            +
             | 
| 132 | 
            +
            ```ruby
         | 
| 133 | 
            +
            # With Capybara DSL
         | 
| 134 | 
            +
            find('a[data-item-type="global_search"]').click
         | 
| 135 | 
            +
             | 
| 136 | 
            +
            # With Playwright-native Page
         | 
| 137 | 
            +
            Capybara.current_session.driver.with_playwright_page do |page|
         | 
| 138 | 
            +
              # `page` is an instance of Playwright::Page.
         | 
| 139 | 
            +
              page.click('a[data-item-type="global_search"]')
         | 
| 140 | 
            +
            end
         | 
| 141 | 
            +
            ```
         | 
| 142 | 
            +
             | 
| 143 | 
            +
            ```ruby
         | 
| 144 | 
            +
            all('.list-item').each do |li|
         | 
| 145 | 
            +
              # With Capybara::Node::Element method
         | 
| 146 | 
            +
              puts li.all('a').first.text
         | 
| 147 | 
            +
             | 
| 148 | 
            +
              # With Playwright-native ElementHandle
         | 
| 149 | 
            +
              puts li.with_playwright_element_handle do |handle|
         | 
| 150 | 
            +
                # `handle` is an instance of Playwright::ElementHandle
         | 
| 151 | 
            +
                handle.query_selector('a').text_content
         | 
| 152 | 
            +
              end
         | 
| 153 | 
            +
            end
         | 
| 154 | 
            +
            ```
         | 
| 155 | 
            +
             | 
| 156 | 
            +
            Generally, Capybara DSL seems simple, but Playwright-native scripting are more precise and efficient. Also `waitForNavigation`, `waitForSelector`, and many other Playwright functions are available with Playwright-native scripting.
         | 
| 157 | 
            +
             | 
| 158 | 
            +
            ### Limitations
         | 
| 159 | 
            +
             | 
| 160 | 
            +
            * Playwright doesn't allow clicking invisible DOM elements or moving elements. `click` sometimes doesn't work as Selenium does. See the detail in https://playwright.dev/docs/actionability/
         | 
| 161 | 
            +
            * `current_window.maximize` and `current_window.fullscreen` work only on headful (non-headless) mode, as selenium driver does.
         | 
| 162 | 
            +
            * `Capybara::Node::Element#drag_to` does not accept `html5` parameter, since [Playwright doesn't implement the feature yet](https://github.com/microsoft/playwright/pull/6207).
         | 
| @@ -7,7 +7,7 @@ module Playwright | |
| 7 7 | 
             
                private def after_initialize
         | 
| 8 8 | 
             
                  @connected = true
         | 
| 9 9 | 
             
                  @closed_or_closing = false
         | 
| 10 | 
            -
                  @remote =  | 
| 10 | 
            +
                  @remote = false
         | 
| 11 11 |  | 
| 12 12 | 
             
                  @contexts = Set.new
         | 
| 13 13 | 
             
                  @channel.on('close', method(:on_close))
         | 
| @@ -52,14 +52,6 @@ module Playwright | |
| 52 52 |  | 
| 53 53 | 
             
                def close
         | 
| 54 54 | 
             
                  return if @closed_or_closing
         | 
| 55 | 
            -
                  if @remote
         | 
| 56 | 
            -
                    @contexts.each do |context|
         | 
| 57 | 
            -
                      context.pages.each do |page|
         | 
| 58 | 
            -
                        page.send(:on_close)
         | 
| 59 | 
            -
                      end
         | 
| 60 | 
            -
                      context.send(:on_close)
         | 
| 61 | 
            -
                    end
         | 
| 62 | 
            -
                  end
         | 
| 63 55 | 
             
                  @closed_or_closing = true
         | 
| 64 56 | 
             
                  @channel.send_message_to_server('close')
         | 
| 65 57 | 
             
                  nil
         | 
| @@ -89,14 +81,6 @@ module Playwright | |
| 89 81 |  | 
| 90 82 | 
             
                private def on_close(_ = {})
         | 
| 91 83 | 
             
                  @connected = false
         | 
| 92 | 
            -
                  if @remote
         | 
| 93 | 
            -
                    @contexts.each do |context|
         | 
| 94 | 
            -
                      context.pages.each do |page|
         | 
| 95 | 
            -
                        page.send(:on_close)
         | 
| 96 | 
            -
                      end
         | 
| 97 | 
            -
                      context.send(:on_close)
         | 
| 98 | 
            -
                    end
         | 
| 99 | 
            -
                  end
         | 
| 100 84 | 
             
                  emit(Events::Browser::Disconnected, self)
         | 
| 101 85 | 
             
                  @closed_or_closing = true
         | 
| 102 86 | 
             
                end
         | 
| @@ -46,6 +46,8 @@ module Playwright | |
| 46 46 | 
             
                      ChannelOwners::Request.from_nullable(params['page']),
         | 
| 47 47 | 
             
                    )
         | 
| 48 48 | 
             
                  })
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                  @closed_promise = Concurrent::Promises.resolvable_future
         | 
| 49 51 | 
             
                end
         | 
| 50 52 |  | 
| 51 53 | 
             
                private def on_page(page)
         | 
| @@ -223,15 +225,14 @@ module Playwright | |
| 223 225 | 
             
                end
         | 
| 224 226 |  | 
| 225 227 | 
             
                private def on_close
         | 
| 226 | 
            -
                  @closed_or_closing = true
         | 
| 227 228 | 
             
                  @browser&.send(:remove_context, self)
         | 
| 228 229 | 
             
                  emit(Events::BrowserContext::Close)
         | 
| 230 | 
            +
                  @closed_promise.fulfill(true)
         | 
| 229 231 | 
             
                end
         | 
| 230 232 |  | 
| 231 233 | 
             
                def close
         | 
| 232 | 
            -
                  return if @closed_or_closing
         | 
| 233 | 
            -
                  @closed_or_closing = true
         | 
| 234 234 | 
             
                  @channel.send_message_to_server('close')
         | 
| 235 | 
            +
                  @closed_promise.value!
         | 
| 235 236 | 
             
                  nil
         | 
| 236 237 | 
             
                rescue => err
         | 
| 237 238 | 
             
                  raise unless safe_close_error?(err)
         | 
| @@ -65,7 +65,8 @@ module Playwright | |
| 65 65 | 
             
                    emit(Events::Page::WebSocket, ChannelOwners::WebSocket.from(params['webSocket']))
         | 
| 66 66 | 
             
                  })
         | 
| 67 67 | 
             
                  @channel.on('worker', ->(params) {
         | 
| 68 | 
            -
                     | 
| 68 | 
            +
                    worker = ChannelOwners::Worker.from(params['worker'])
         | 
| 69 | 
            +
                    # on_worker(worker)
         | 
| 69 70 | 
             
                  })
         | 
| 70 71 | 
             
                end
         | 
| 71 72 |  | 
    
        data/lib/playwright/version.rb
    CHANGED
    
    
    
        data/lib/playwright_api/page.rb
    CHANGED
    
    | @@ -1278,8 +1278,8 @@ module Playwright | |
| 1278 1278 | 
             
                end
         | 
| 1279 1279 |  | 
| 1280 1280 | 
             
                # @nodoc
         | 
| 1281 | 
            -
                def  | 
| 1282 | 
            -
                  wrap_impl(@impl. | 
| 1281 | 
            +
                def start_css_coverage(resetOnNavigation: nil, reportAnonymousScripts: nil)
         | 
| 1282 | 
            +
                  wrap_impl(@impl.start_css_coverage(resetOnNavigation: unwrap_impl(resetOnNavigation), reportAnonymousScripts: unwrap_impl(reportAnonymousScripts)))
         | 
| 1283 1283 | 
             
                end
         | 
| 1284 1284 |  | 
| 1285 1285 | 
             
                # @nodoc
         | 
| @@ -1288,8 +1288,8 @@ module Playwright | |
| 1288 1288 | 
             
                end
         | 
| 1289 1289 |  | 
| 1290 1290 | 
             
                # @nodoc
         | 
| 1291 | 
            -
                def  | 
| 1292 | 
            -
                  wrap_impl(@impl. | 
| 1291 | 
            +
                def stop_js_coverage
         | 
| 1292 | 
            +
                  wrap_impl(@impl.stop_js_coverage)
         | 
| 1293 1293 | 
             
                end
         | 
| 1294 1294 |  | 
| 1295 1295 | 
             
                # @nodoc
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: playwright-ruby-client
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.6. | 
| 4 | 
            +
              version: 0.6.3
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - YusukeIwaki
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2021-06- | 
| 11 | 
            +
            date: 2021-06-07 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: concurrent-ruby
         |