---
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/index.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:

    gem 'playwright-ruby-client'

Then run:

    bundle install

Or install it directly:

    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#)

    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

    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

    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:

    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:

    gem install parallel_tests

Then run your tests with:

    parallel_rspec spec/

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

    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:

    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)[Slack Join our Slack](https://join.slack.com/t/testingb0t/shared_invite/zt-3bcw9xch-jk19~6XPs_xBrsAgAedkCw)
