Using 🎭Playwright in Ruby/Rails
Tags: playwright
Published: 2021-08-10 14:25:06

---
title: Using 🎭Playwright in Ruby/Rails
published: true
description: Integrate Ruby or Rails application with Playwright using playwright-ruby-client and capybara-playwright-driver
tags: Playwright
//cover_image: https://direct_url_to_image.jpg
---

🎭Playwright is a really awesome library for browser automation. Microsoft already published several language bindings.

* TypeScript: https://github.com/microsoft/playwright
* Java (or Kotlin): https://github.com/microsoft/playwright-java
* Python: https://github.com/microsoft/playwright-python
* C#: https://github.com/microsoft/playwright-dotnet

And also playwright-go is planned to be official.
https://github.com/microsoft/playwright/issues/6856

## No Ruby client?

Ruby or Rails developers would like to use Playwright for acceptance testing or other use-cases, but it is not available at this moment.

Playwright team explicitly says there is no plan to release Ruby client.
https://github.com/microsoft/playwright/issues/5874

## Ruby users should be happy with Playwright!!

It is clear that Ruby is not so famous as Python or TypeScript, but many Rails users still use it.

Rails already included an acceptance testing framework (called SystemTestCase). It uses [Capybara](https://github.com/teamcapybara/capybara) and most users already noticed Capybara tends to produce flaky testcases.

Playwright provides very clever DOM selectors with auto-waiting feature, and useful utility functions. As Internet Explorer is already dead, no reason to keep using Selenium and Capybara.

Fortunately, Playwright is server-client architecture. We can use the useful features on any languages by just implementing a Playwright API client.

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mp57apr9txqa33jgs3ei.png)
 

### Try it on Ruby!!

I actually created a Playwright client for Ruby.
https://github.com/YusukeIwaki/playwright-ruby-client

```ruby
Playwright.connect_to_playwright_server('ws://127.0.0.1:8080') do |playwright|
  playwright.chromium.launch do |browser|
    page = browser.new_page
    page.goto('https://github.com/YusukeIwaki')
    page.screenshot(path: './YusukeIwaki.png')
  end
end
```

Note that we have to launch Playwright server in advance, like this: `npx playwright install && npx playwright run-server 8080`

### Try it on Rails!!

I also created a Capybara driver of Playwright.
https://github.com/YusukeIwaki/capybara-playwright-driver

```ruby
Capybara.register_driver(:playwright) do |app|
  Capybara::Playwright::Driver.new(app, browser_type: :firefox, headless: false)
end
Capybara.default_max_wait_time = 15
Capybara.default_driver = :playwright
```

Capybara DSL is supported, and we can also use Playwright-native features such as recording video during testing.
https://playwright-ruby-client.vercel.app/docs/article/guides/rails_integration#available-functions-and-limitations

## Conclusion

Playwright's architecture is great, and we Ruby/Rails users can use Playwright features by developing our own Playwright client API library.

Unfortunately Microsoft doesn't make effort for Ruby users, and difficult to ask for official support for Ruby.