---
title: Ruby and Playwright Testing | TestingBot
description: Run Ruby tests with Playwright in the cloud. Playwright Ruby testing
  on Chrome, Firefox and Edge on TestingBot.
source_url:
  html: https://testingbot.com/support/web-automate/playwright/ruby
  md: https://testingbot.com/support/web-automate/playwright/ruby.md
---

# Playwright & Ruby

The [playwright-ruby-client](https://github.com/YusukeIwaki/playwright-ruby-client) gem provides a Ruby interface for Playwright, enabling browser automation for testing and web scraping.   
 See the example below on how to use Ruby with Playwright to run tests on the TestingBot browser grid.

More information about Playwright for Ruby can be found on the [playwright-ruby-client documentation](https://playwright-ruby-client.vercel.app/docs/article/getting_started).

## Installation

To get started, add the playwright-ruby-client gem to your Gemfile:

```ruby
gem 'playwright-ruby-client'
```

Then run:

```bash
bundle install
```

Or install it directly:

```bash
gem install playwright-ruby-client
```

## Running a Test

Below is an example of how to connect to the TestingBot Playwright grid using the playwright-ruby-client gem:

[Chrome](https://testingbot.com#) [Firefox](https://testingbot.com#) [WebKit](https://testingbot.com#)

```ruby
require 'playwright'
require 'json'
require 'uri'

capabilities = {
  'tb:options' => {
    'key' => ENV['TB_KEY'],
    'secret' => ENV['TB_SECRET']
  },
  'browserName' => 'chrome',
  'browserVersion' => 'latest',
  'platform' => 'WIN10'
}

ws_endpoint = "wss://cloud.testingbot.com/playwright?capabilities=#{URI.encode_www_form_component(capabilities.to_json)}"

Playwright.connect_to_browser_server(ws_endpoint) do |browser|
  page = browser.new_page

  page.goto('https://testingbot.com/')
  puts page.title

  page.screenshot(path: 'screenshot.png')
  browser.close
end
```

```ruby
require 'playwright'
require 'json'
require 'uri'

capabilities = {
  'tb:options' => {
    'key' => ENV['TB_KEY'],
    'secret' => ENV['TB_SECRET']
  },
  'browserName' => 'firefox',
  'browserVersion' => 'latest',
  'platform' => 'WIN10'
}

ws_endpoint = "wss://cloud.testingbot.com/playwright?capabilities=#{URI.encode_www_form_component(capabilities.to_json)}"

Playwright.connect_to_browser_server(ws_endpoint) do |browser|
  page = browser.new_page

  page.goto('https://testingbot.com/')
  puts page.title

  page.screenshot(path: 'screenshot.png')
  browser.close
end
```

```ruby
require 'playwright'
require 'json'
require 'uri'

capabilities = {
  'tb:options' => {
    'key' => ENV['TB_KEY'],
    'secret' => ENV['TB_SECRET']
  },
  'browserName' => 'safari',
  'browserVersion' => 'latest',
  'platform' => 'VENTURA'
}

ws_endpoint = "wss://cloud.testingbot.com/playwright?capabilities=#{URI.encode_www_form_component(capabilities.to_json)}"

Playwright.connect_to_browser_server(ws_endpoint) do |browser|
  page = browser.new_page

  page.goto('https://testingbot.com/')
  puts page.title

  page.screenshot(path: 'screenshot.png')
  browser.close
end
```

This example will use Playwright to connect to a browser in the TestingBot cloud.   
 It will open the TestingBot website, print the title of the page and save a PNG screenshot.

## Using with RSpec

You can integrate Playwright with RSpec for running your tests. Here's an example:

```ruby
require 'playwright'
require 'json'
require 'uri'

RSpec.describe 'TestingBot Playwright Test' do
  let(:capabilities) do
    {
      'tb:options' => {
        'key' => ENV['TB_KEY'],
        'secret' => ENV['TB_SECRET']
      },
      'browserName' => 'chrome',
      'browserVersion' => 'latest',
      'platform' => 'WIN10'
    }
  end

  let(:ws_endpoint) do
    "wss://cloud.testingbot.com/playwright?capabilities=#{URI.encode_www_form_component(capabilities.to_json)}"
  end

  it 'verifies the page title' do
    Playwright.connect_to_browser_server(ws_endpoint) do |browser|
      page = browser.new_page

      page.goto('https://testingbot.com/')
      expect(page.title).to include('TestingBot')

      browser.close
    end
  end
end
```

## Parallel Testing with Ruby

One of the great advantages of the TestingBot service is that you can run multiple tests simultaneously.   
 This drastically shortens the total duration of your test suite, as multiple tests will run concurrently.

You can use the `parallel_tests` gem to run your RSpec tests in parallel:

```bash
gem install parallel_tests
```

Then run your tests with:

```bash
parallel_rspec spec/
```

Here's an example of running tests across multiple browsers in parallel using threads:

```ruby
require 'playwright'
require 'json'
require 'uri'

browsers = [
  { name: 'chrome', type: :chromium, platform: 'WIN10' },
  { name: 'firefox', type: :firefox, platform: 'WIN10' },
  { name: 'safari', type: :webkit, platform: 'VENTURA' }
]

threads = browsers.map do |browser_config|
  Thread.new do
    capabilities = {
      'tb:options' => {
        'key' => ENV['TB_KEY'],
        'secret' => ENV['TB_SECRET']
      },
      'browserName' => browser_config[:name],
      'browserVersion' => 'latest',
      'platform' => browser_config[:platform]
    }

    ws_endpoint = "wss://cloud.testingbot.com/playwright?capabilities=#{URI.encode_www_form_component(capabilities.to_json)}"

    Playwright.connect_to_browser_server(ws_endpoint) do |browser|
      page = browser.new_page

      page.goto('https://testingbot.com/')
      puts "#{browser_config[:name]}: #{page.title}"
      page.screenshot(path: "screenshot-#{browser_config[:name]}.png")

      browser.close
    end
  end
end

threads.each(&:join)
```

This example runs tests on Chrome, Firefox, and Safari simultaneously, taking screenshots on each browser.

## Mark Test Status

You can mark your test as passed or failed in the TestingBot dashboard by using the `testingbot_executor` command:

```ruby
require 'playwright'
require 'json'
require 'uri'

capabilities = {
  'tb:options' => {
    'key' => ENV['TB_KEY'],
    'secret' => ENV['TB_SECRET']
  },
  'browserName' => 'chrome',
  'browserVersion' => 'latest',
  'platform' => 'WIN10'
}

ws_endpoint = "wss://cloud.testingbot.com/playwright?capabilities=#{URI.encode_www_form_component(capabilities.to_json)}"

Playwright.connect_to_browser_server(ws_endpoint) do |browser|
  page = browser.new_page

  begin
    page.goto('https://testingbot.com/')

    if page.title.include?('TestingBot')
      # Mark test as passed
      page.evaluate("testingbot_executor: #{JSON.generate({ action: 'setSessionStatus', arguments: { passed: true, reason: 'Title matched' } })}")
    else
      raise 'Title did not match'
    end
  rescue => e
    # Mark test as failed
    page.evaluate("testingbot_executor: #{JSON.generate({ action: 'setSessionStatus', arguments: { passed: false, reason: e.message } })}")
  ensure
    browser.close
  end
end
```

### Looking for more help?

Have questions or need more information? Reach out via email or Slack.

[Email us](https://testingbot.com/contact/new) [Join our Slack](https://join.slack.com/t/testingb0t/shared_invite/zt-3bcw9xch-jk19~6XPs_xBrsAgAedkCw)
