Selenium client for interacting with web pages for browser automation.
-
Add the dependency to your
shard.yml
:dependencies: selenium: github: crystal-loot/selenium.cr
-
Run
shards install
require "selenium"
driver = Selenium::Driver.for(:chrome, base_url: "http://localhost:9515")
Creating a driver this way assumes that you have the driver running already.
Available drivers:
- :chrome (using chromedriver)
- :firefox (using geckodriver)
- :remote (general purpose)
Rather than running chromedriver yourself, you can give the driver a service which will run the process for you.
service = Selenium::Service.chrome(driver_path: File.expand_path("~/.webdrivers/chromedriver", home: true))
driver = Selenium::Driver.for(:chrome, service: service)
You must call driver.stop
when you are finished or it will leave the service running.
Consider using webdrivers.cr for automatically installing drivers and managing the driver path for you.
capabilities = Selenium::Chrome::Capabilities.new
capabilities.chrome_options.args = ["no-sandbox", "headless", "disable-gpu"]
driver.create_session(capabilities)
Use the appropriate Capabilities
class for whichever browser you choose.
# Navigate to Google's homepage
session.navigate_to("https://www.google.com/")
# Find the search input element by its name, which is "q"
element = session.find_element(:name, "q")
# Enter the text "Selenium library for Crystal" into the search input
element.send_keys("Selenium library for Crystal")
# Submit the form where the search input belongs to
element.submit
# Define a Selenium Wait object, which will help us to wait until a certain condition is met.
# Here, we are setting a timeout of 5 seconds (the maximum time to wait) and a polling interval of 1 second (the time to wait between each check)
wait = Selenium::Helpers::Wait.new(timeout: 5.seconds, interval: 1.second)
# Use the wait object to wait until the search results are displayed.