cdp_session_spec.rb 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. require 'spec_helper'
  2. RSpec.describe Puppeteer::CDPSession do
  3. it 'should work' do
  4. client = page.target.create_cdp_session
  5. client.send_message('Runtime.enable')
  6. client.send_message('Runtime.evaluate', expression: 'window.foo = "bar"')
  7. foo = page.evaluate('() => globalThis.foo')
  8. expect(foo).to eq('bar')
  9. end
  10. it 'should not report created targets for custom CDP sessions', puppeteer: :browser do
  11. called = false
  12. browser.browser_contexts.first.on('targetcreated') do |target|
  13. raise 'Too many targets created' if called
  14. called = true
  15. target.create_cdp_session
  16. end
  17. browser.new_page
  18. end
  19. it 'should send events', sinatra: true do
  20. client = page.target.create_cdp_session
  21. client.send_message('Network.enable')
  22. events = []
  23. client.on('Network.requestWillBeSent') do |event|
  24. events << event
  25. end
  26. page.goto(server_empty_page)
  27. expect(events.size).to eq(1)
  28. end
  29. # it('should enable and disable domains independently', async () => {
  30. # const { page } = getTestState();
  31. # const client = await page.target().createCDPSession();
  32. # await client.send('Runtime.enable');
  33. # await client.send('Debugger.enable');
  34. # // JS coverage enables and then disables Debugger domain.
  35. # await page.coverage.startJSCoverage();
  36. # await page.coverage.stopJSCoverage();
  37. # // generate a script in page and wait for the event.
  38. # const [event] = await Promise.all([
  39. # waitEvent(client, 'Debugger.scriptParsed'),
  40. # page.evaluate('//# sourceURL=foo.js'),
  41. # ]);
  42. # // expect events to be dispatched.
  43. # expect(event.url).toBe('foo.js');
  44. # });
  45. it_fails_firefox 'should be able to detach session' do
  46. client = page.target.create_cdp_session
  47. client.send_message('Runtime.enable')
  48. eval_response = client.send_message('Runtime.evaluate', expression: '1 + 2', returnByValue: true)
  49. expect(eval_response['result']['value']).to eq(3)
  50. # Target.detachFromTarget seems not to be implemented in Firefox.
  51. # Only Chrome can pass this spec.
  52. client.detach
  53. expect {
  54. client.send_message('Runtime.evaluate', expression: '3 + 1', returnByValue: true)
  55. }.to raise_error(/Session closed./)
  56. end
  57. it 'should throw nice errors' do
  58. client = page.target.create_cdp_session
  59. expect {
  60. client.send_message('ThisCommand.DoesNotExist')
  61. }.to raise_error(/ThisCommand.DoesNotExist/)
  62. end
  63. end