Skip to content

Selenium web driver bindings for the shell script 🐚. Browser automation made possible with bash now πŸ’―

License

Notifications You must be signed in to change notification settings

sudharsan-selvaraj/selenium.sh

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

26 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

selenium.sh

Installation

  1. create a new directory or cd to any existing directory where the tests are present,
mkdir tests && cd tests
  1. Run the below command in terminal
curl -sSL https://raw.githubusercontent.com/sudharsan-selvaraj/selenium.sh/main/install.sh | bash

This will create a new directory selenium and downloads the lib into it

  1. Create a script file tests.sh and save it with the below content
#!/usr/bin/env bash

#import selenium
source selenium/selenium.sh

# it will download the respective chromedriver based on installed chrome version
webdrivermanager --browser "chrome"

driver=$(ChromeDriver)
$driver.get "https://www.google.com"
search_input=$($driver.find_element "$(by_name "q")")
$search_input.send_keys "TestNinja"
entered_text=$($driver.execute_script "return arguments[0].value" "$($search_input.get_element)")
echo "Entered search string: $entered_text"

# Support for try/catch specific webdriver exception
try
(
  begin
  
  $driver.find_element "$(by_name "invalid name")"
)
catch || {
  case $exception_code in
    $NO_SUCH_ELEMENT_EXCEPTION)
      echo "No such element found ${exit_code}"
    ;;
  esac
}

$driver.quit
  1. Make sure to assign executable permission to the file
chmod +x script.sh
  1. Run the script file
./script.sh

API

driver

  • get

    Navigates to given URL
     driver=$(ChromeDriver)     
      
     $driver.get "https://www.google.com"
  • get_session_id

    Returns the current session id
     driver=$(ChromeDriver)     
     echo $($driver.get_session_id) # prints 1dkb213b8bar5nm20sd6aaaskjasdhd7
  • get_current_url

    Returns the current url
     driver=$(ChromeDriver)    
     $driver.get "https://www.google.com"
     echo $($driver.get_current_url) #prints https://www.google.com
  • get_title

    Returns the current title of the tab
     driver=$(ChromeDriver)    
     $driver.get "https://www.google.com"
     echo $($driver.get_title) #prints Google
  • get_page_source

    Returns the HTML page source
     driver=$(ChromeDriver)    
     $driver.get "https://www.google.com"
     echo $($driver.get_page_source) #prints Google
  • get_screen_shot

    Returns the screen shot of the current webpage in base64 format
     driver=$(ChromeDriver)    
     $driver.get "https://www.google.com"
     echo $($driver.get_screen_shot) # prints base64 string
  • refresh

    Reloads/refresh the current url
     driver=$(ChromeDriver)    
     $driver.get "https://www.google.com"
     $driver.refresh
  • back

    Navigates to the previously opened webpage from the history
     driver=$(ChromeDriver)    
     $driver.get "https://www.google.com"
     $driver.get "https://www.github.com"
     $driver.back
     echo $($driver.get_current_url) // https://www.google.com
  • forward

    Navigates to the next webpage from the history
     driver=$(ChromeDriver)    
     $driver.get "https://www.google.com"
     $driver.get "https://www.github.com"
     
     $driver.back
     echo $($driver.get_current_url) #prints https://www.google.com 
     
     $driver.forward  
     echo $($driver.get_current_url) #prints https://www.github.com
  • quit

    Quit the current webdriver session
     driver=$(ChromeDriver)    
     $driver.get "https://www.google.com"
      
     $driver.quit 
  • close

    Close the current active window/tab
     driver=$(ChromeDriver)    
     $driver.get "https://www.google.com"
      
     $driver.close 
  • find_element

    Returns the first found element for the given locator
     driver=$(ChromeDriver)    
     $driver.get "https://www.google.com"
    
     search_text_box=$driver.find_element "$(by_name "q")"    
     search_text_box.send_keys "Test Ninja" 
     $driver.close 

    It's also possible to chaain multiple locators
    driver=$(ChromeDriver)    
    $driver.get "https://www.google.com"
    
    footer_gmail_link=$driver.find_element "$(by_id "footer")" "$(by_link_text "Gmail")"    
    footer_gmail_link.click 
    $driver.close 
  • find_elements

    Returns multiple elements found using given locator
    driver=$(ChromeDriver)    
    $driver.get "https://www.google.com"
    
    anchor_elements=$driver.find_elements "$(by_tagname "a")"
    
    echo $(anchor_elements.size)
    
    for ((i = 0; i < $($anchor_elements.size); i++)); 
    do
      echo "$($($anchor_elements.get "$i").get_attribute "href")"
    done   
    $driver.close 
  • get_active_element

    Returns the currect element thats in focus
    driver=$(ChromeDriver)    
    $driver.get "https://www.google.com"
    
    echo $($driver.get_active_element).get_text 
    
    $driver.close 
  • set_window_rect

    Change window position and size

    Change window position:

      driver=$(ChromeDriver)    
      $driver.get "https://www.google.com"
      
      $driver.set_window_rect '{ "x": 100, "y": 200 }'
      
      $driver.close 

    Change window size:

    driver=$(ChromeDriver)    
    $driver.get "https://www.google.com"
    
    $driver.set_window_rect '{ "width": 1024, "height": 700 }'
    
    $driver.close 
  • get_window_x_position

    Returns current X position of the window
    driver=$(ChromeDriver)    
    $driver.get "https://www.google.com"
    $driver.set_window_rect '{ "x": 100, "y": 200 }'
    echo $driver.get_window_x_position # prints 100
    
    $driver.close
  • get_window_y_position

    Returns current Y position of the window
    driver=$(ChromeDriver)    
    $driver.get "https://www.google.com"
    $driver.set_window_rect '{ "x": 100, "y": 200 }'
    
    echo $driver.get_window_y_position # prints 200
    
    $driver.close
  • get_width

    Returns current width of the window
    driver=$(ChromeDriver)    
    $driver.get "https://www.google.com"
    
    $driver.set_window_rect '{ "width": 1024, "height": 700 }'
    echo $driver.get_width #prints 1024
    
    $driver.close
  • get_height

    Returns current height of the window
    driver=$(ChromeDriver)    
    $driver.get "https://www.google.com"
    
    $driver.set_window_rect '{ "width": 1024, "height": 700 }'
    echo $driver.get_height #prints 700
    
    $driver.close
  • open_new_tab

    Opens new Tab on the same window
    driver=$(ChromeDriver)    
    $driver.get "https://www.google.com"
    
    $driver.open_new_tab
    echo $($driver.get_window_handles).size #prints 2
    
    $driver.close
  • open_new_window

    Opens a new window
    driver=$(ChromeDriver)    
    $driver.get "https://www.google.com"
    
    $driver.open_new_window
    echo $($driver.get_window_handles).size #prints 2
    
    $driver.close
  • get_window_handle

    Returns the window handle of the current tab
    driver=$(ChromeDriver)    
    $driver.get "https://www.google.com"
    
    echo $driver.get_window_handle
    
    $driver.close
  • get_window_handles

    Returns the window handle of the current tab
    driver=$(ChromeDriver)    
    $driver.get "https://www.google.com"
    
    $driver.open_new_tab
    $driver.open_new_tab
    
    window_handles=$driver.get_window_handles
    echo $window_handles.size #prints 3
     
    for((i=0;i<$window_handles.size);i++)); do
      echo $($window_handles.get "${i}")
    done
    
    $driver.close
  • switch_to.window

    Switch the focus to specific window handle
    driver=$(ChromeDriver)    
    $driver.get "https://www.google.com"
    
    $driver.open_new_tab
    $driver.open_new_tab
    
    window_handles=$driver.get_window_handles
    echo $window_handles.size #prints 3
     
    for((i=0;i<$window_handles.size);i++)); do
      $driver.switch_to.window "$($window_handles.get "${i}")"
      echo "$($driver.get_title)"
    done
    
    $driver.close
  • switch_to.frame

    Switch the focus to specific iframe

    By Frame index:

    driver=$(ChromeDriver)    
    $driver.get "https://www.sitewithiframe.com"
    
    # switches to first iframe
    $driver.switch_to.frame 0
    
    $driver.close

    By Frame element:

    driver=$(ChromeDriver)    
    $driver.get "https://www.sitewithiframe.com"
    
    iframe_ele="$($driver.find_element "$(by_id "frame1")")"
    $driver.switch_to.frame "$(iframe_ele.get_element)"
    
    $driver.close
  • .switch_to.default_content

    Switch the focus to parent frame/window
    driver=$(ChromeDriver)    
    $driver.get "https://www.sitewithiframe.com"
    
    # switches to first iframe
    $driver.switch_to.frame 0
    
    #
    # perform some operation
    #
    
    $driver.switch_to.default_content
    $driver.close
  • window.fullscreen

    Activates fullscreen mode
    driver=$(ChromeDriver)    
    $driver.get "https://www.google.com"
    $driver.window.fullscreen
  • window.maximize

    Maximize the current window to desktop width and height
    driver=$(ChromeDriver)    
    $driver.get "https://www.google.com"
    $driver.window.maximize
  • window.minimize

    Minimizes the current window
    driver=$(ChromeDriver)    
    $driver.get "https://www.google.com"
    $driver.window.minimize
Other Api's are yet to be documented

element

Api's are yet to be documented

About

Selenium web driver bindings for the shell script 🐚. Browser automation made possible with bash now πŸ’―

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages