Implementation of a W3C compliant Webdriver client in Crystal, inspired by Watir
When doing e2e testing, it is often advantageous to perform arrangement on the server by interacting with databases and apis. This library captializes on crystal's strengths by delivering a Watir like solution to interact with w3c compliant browsers in your e2e tests.
webdriver is in beta, feature requests are welcome and appreciated.
-
Add the dependency to your
shard.yml
:dependencies: webdriver: gitlab: skinnyjames/webdriver
-
Run
shards install
for more advanced usage, see the wiki and the api documentation
require "webdriver"
browser = Webdriver::Browser.start :chrome
browser.goto "https://www.google.com"
search = browser.text_field(title: /search/i)
search.set("Crystal lang webdriver")
search.blur
browser.input(aria_label: /Google Search/, index: 1).wait_while(&.click)
browser.quit
This library exports a module that can be mixed into classes to make page objects.
The mixin exposes macros that create methods on the objects to interact with page elements
require "webdriver"
require "webdriver/page"
class GooglePage
include Webdriver::PageObject
textarea(:query, title: /search/i)
input(:submit, aria_label: /Google Search/, index: 1)
def search(term : String) : Nil
self.query = term
submit_element.wait_while(&.click)
end
end
browser = Webdriver::Browser.start(:chrome)
page = GooglePage.new(browser)
begin
browser.goto "https://www.google.com"
page.search("cats")
ensure
browser.quit
end
There is also a factory mixin for spec, to reduce boilerplate in instantiating pages.
include Webdriver::PageFactory
with_browser("https://google.com", :chrome) do |browser|
on(GooglePage, browser) do |page|
page.search("cats")
end
end
currently in beta
- session
- navigation
- windows
- window actions
- window sizing
- frames
- elements
- shadow dom
- document
- cookies
- actions
- user prompts
- screen capture
- chrome
- firefox
- Fork it (https://gitlab.com/skinnyjames/webdriver/-/forks/new)
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request
- Sean Gregory - creator and maintainer