selenimum

This module is Webdriver for Selenium(Selenium-hub).

Overview

Preparation

Start Selenium-hub before run program.

If you want to use docker-compse, save docker-compose.yaml to your working directory.

version: '3'

services:
  selenium-hub:
    image: selenium/hub:3.141.59-20210830
    container_name: selenium-hub
    ports:
    - 4444:4444
    environment:
    - GRID_MAX_SESSION=10
  
  firefox: &node
    image: selenium/node-firefox:3.141.59-20210830
    container_name: selenium-firefox
    shm_size: 2gb
    depends_on:
    - selenium-hub
    environment:
    - HUB_HOST=selenium-hub
    - HUB_PORT=4444
    - NODE_MAX_SESSION=5
  
  chrome:
    <<: *node
    image: selenium/node-chrome:3.141.59-20210830
    container_name: selenium-chrome

And start docker-compose.

docker-compose up --build

or

docker-compose start

Create session

Using Chrome. (default)

import selenimum

proc main() =
  let
    driver = newSeleniumWebDriver()
    session = driver.newSession()
  defer:
    session.deleteSession()
  # ... control Selenium ...

main()

Use Firefox.

Set capabilities(JsonNode) to newSession proc.

import selenimum, json

proc main() =
  let
    driver = newSeleniumWebDriver()
    capabilities = %*{
      "desiredCapabilities": {
        "browserName": "firefox"
      },
      "requiredCapabilities": {}
    }
    session = driver.newSession(capabilities=capabilities)
  defer:
    session.deleteSession()
  # ... control Selenium ...

main()

Navigate to web site

session.navigateTo("https://example.com/") # navigate to example.com

Find element

let h1 = session.findElement(query="h1")
echo "h1 text:", h1.getText() # h1 text: Example Domain

Click element

let link = session.findElement(query="a")
link.click() # move to https://www.iana.org/domains/reserved
sleep(300)
echo "page title: ", session.getTitle() # page title: IANA — IANA-managed Reserved Domains

Take screenshot

session.saveScreenshot("./example.png")

Usage

Examples:

import
  selenimum, os

proc main() =
  selenium "http://selenium-hub:4444/wd/hub":
    chrome:
      navigateTo "https://example.com/"
      echo "page title: ", getTitle()
      ## Output:
      ##    page title: Example Domain
      echo "h1 text:", getText("h1")
      ## Output:
      ##    h1 text: Example Domain
      click "a"
      sleep(300)
      echo "page title: ", getTitle()
      ## Output:
      ##    page title: IANA — IANA-managed Reserved Domains
  
main()