selenium_extensions package

selenium_extensions.drivers module

selenium_extensions.drivers.chrome_driver(executable_path=None, run_headless=False, load_images=True, use_proxy=None)[source]

Function to initialize selenium.webdriver.Chrome with extended options

Parameters:
  • executable_path (str) – path to the chromedriver binary. If set to None selenium will serach for chromedriver in $PATH.
  • run_headless (bool) – boolean flag that indicates if chromedriver has to be headless (without GUI).
  • load_images (bool) – boolean flag that indicates if Chrome has to render images.
  • use_proxy (str) – use http proxy in <host:port> format.
Returns:

created driver.

Return type:

selenium.webdriver.Chrome

Note

In order to create Chrome driver Selenium requires Chrome to be installed and chromedriver to be downloaded.

Warning

Headless Chrome is shipping in Chrome 59 and in Chrome 60 for Windows. Update your Chrome browser if you want to use headless option.

selenium_extensions.drivers.firefox_driver(executable_path=None, run_headless=False, load_images=True, use_proxy=None)[source]

Function to initialize selenium.webdriver.Firefox with extended options

Parameters:
  • executable_path (str) – path to the geckdriver binary. If set to None selenium will search for geckdriver in $PATH.
  • run_headless (bool) – boolean flag that indicates if geckodriver has to be headless (without GUI). geckodriver doesn’t support native headless mode, that’s why pyvirtualdisplay is used.
  • load_images (bool) – boolean flag that indicates if Firefox has to render images.
  • use_proxy (str) – use http proxy in <host:port> format.
Returns:

created driver.

Return type:

selenium.webdriver.Firefox

Note

In order to create Firefox driver Selenium requires Firefox to be installed and geckodriver to be downloaded.

Note

Firefox doesn’t support native headless mode. We use pyvirtualdisplay to simulate it. In order pyvirtualdisplay to work you need to install Xvfb package: sudo apt install xvfb.

selenium_extensions.core module

class selenium_extensions.core.SeleniumDriver(browser=None, executable_path=None, run_headless=False, load_images=True, use_proxy=None)[source]

Base class for selenium-based drivers

User’s classes should inherit from this class and initialize it using super(). After this their class will have driver attribute and all the methods ready to go.

Parameters:
  • browser ('chrome' or 'firefox') – webdriver to use.
  • executable_path (str) – path to the browser’s webdriver binary. If set to None selenium will search for browser’s webdriver in $PATH.
  • run_headless (bool) – boolean flag that indicates if webdriver has to be headless (without GUI).
  • load_images (bool) – boolean flag that indicates if webdriver has to render images.
  • use_proxy (str) – use http proxy in <host:port> format.
Raises:

selenium_extensions.exceptions.SeleniumExtensionsExceptionbrowser is not supported by selenium_extensions.

Example

from selenium_extensions.core import SeleniumDriver


class MyBot(SeleniumDriver):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    def goto_google(self):
        self.driver.get('https://google.com')


bot = MyBot(browser='chrome', executable_path='/usr/bin/chromedriver', run_headless=True, load_images=False)
bot.goto_google()
bot.shut_down()

Note

In order to create Chrome driver Selenium requires Chrome to be installed and chromedriver to be downloaded.

Note

In order to create Firefox driver Selenium requires Firefox to be installed and geckodriver to be downloaded.

Note

Firefox doesn’t support native headless mode. We use pyvirtualdisplay to simulate it. In order pyvirtualdisplay to work you need to install Xvfb package: sudo apt install xvfb.

selenium_extensions.core.scroll(driver, scroll_element=None)[source]

Scrolls the current page or the Selenium WebElement if one is provided

Parameters:
  • driver (selenium.webdriver.) – Selenium webdriver to use.
  • scroll_element (selenium.webdriver.remote.webelement.WebElement) – Selenium webelement to scroll.

Examples

from selenium import webdriver
from selenium_extensions.core import scroll


driver = webdriver.Chrome()
scroll(driver)
from selenium import webdriver
from selenium_extensions.core import scroll


driver = webdriver.Chrome()
...
pop_up = driver.find_element_by_class_name('ff_pop_up')
scroll(driver, pop_up)
selenium_extensions.core.click_on_element(driver, element_locator)[source]

Clicks on a Selenium element represented by element_locator

Parameters:element_locator ((selenium.webdriver.common.by.By., str)) – element locator described using By. Take a look at Locate elements By for more info.

Example

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium_extensions.core import click_on_element


driver = webdriver.Chrome()
...
click_on_element(driver, (By.ID, 'form-submit-button'))
selenium_extensions.core.element_is_present(driver, element_locator, waiting_time=2)[source]

Shortcut to check if the element is present on the current page

Parameters:
  • driver (selenium.webdriver.) – Selenium webdriver to use.
  • element_locator ((selenium.webdriver.common.by.By., str)) –

    element locator described using By. Take a look at Locate elements By for more info.

  • waiting_time (int) – time in seconds - describes how much to wait.
Returns:

True if the element is present on the current page, False otherwise.

Return type:

bool

Example

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium_extensions.core import element_is_present


driver = webdriver.Chrome()
...
if not element_is_present(driver, (By.CLASS_NAME, 'search_photos_block')):
    pass # Do your things here
selenium_extensions.core.wait_for_element_to_be_present(driver, element_locator, waiting_time=2)[source]

Shortcut to wait until the element is present on the current page

Parameters:
  • driver (selenium.webdriver.) – Selenium webdriver to use.
  • element_locator ((selenium.webdriver.common.by.By., str)) –

    element locator described using By. Take a look at Locate elements By for more info.

  • waiting_time (int) – time in seconds - describes how much to wait.
Raises:

selenium.common.exceptions.TimeoutException – timeout waiting for element described by element_locator.

Example

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium_extensions.core import wait_for_element_to_be_present


driver = webdriver.Chrome()
...
wait_for_element_to_be_present(driver, (By.CLASS_NAME, 'search_load_btn'))
selenium_extensions.core.wait_for_element_to_be_clickable(driver, element_locator, waiting_time=2)[source]

Waits for element described by element_locator to be clickable

Parameters:
  • element_locator ((selenium.webdriver.common.by.By., str)) –

    element locator described using By. Take a look at Locate elements By for more info.

  • waiting_time (int) – time in seconds - describes how much to wait.
Raises:

selenium.common.exceptions.TimeoutException – timeout waiting for element described by element_locator.

Example

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium_extensions.core import wait_for_element_to_be_clickable


driver = webdriver.Chrome()
...
wait_for_element_to_be_clickable(driver, (By.CLASS_NAME, 'form-submit-button'))
selenium_extensions.core.populate_text_field(driver, element_locator, text)[source]

Populates text field with provided text

Parameters:
  • element_locator ((selenium.webdriver.common.by.By., str)) –

    element locator described using By. Take a look at Locate elements By for more info.

  • text (str) – text to populate text field with.

Example

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium_extensions.core import populate_text_field


driver = webdriver.Chrome()
...
populate_text_field(driver, (By.CLASS_NAME, 'textbox'), 'some text')
selenium_extensions.core.shut_down(driver)[source]

Shuts down the driver and its virtual display

Parameters:driver (selenium.webdriver.) – Selenium webdriver to stop.

Example

from selenium import webdriver
from selenium_extensions.core import shut_down


driver = webdriver.Chrome()
...
shut_down(driver)

selenium_extensions.helpers module

selenium_extensions.helpers.element_has_gone_stale(element)[source]

Checks if element has gone stale

Parameters:element (selenium.webdriver.remote.webelement.WebElement) – Selenium webelement to check for.
Returns:True if element has gone stale, False otherwise.
Return type:bool

Examples

from selenium_extensions.helpers import element_has_gone_stale


if element_has_gone_stale(your_element):
    pass  # Do something
from selenium_extensions.helpers import wait_for_function_truth
from selenium_extensions.helpers import element_has_gone_stale


login_btn = driver.find_element_by_class_name('login_btn')
wait_for_function_truth(element_has_gone_stale, element)
selenium_extensions.helpers.wait_for_function_truth(condition_function, *args, time_to_wait=10, time_step=0.1)[source]

Waits for function represented by condition_function to return any non-False value

Parameters:
  • condition_function (function) – function to wait for.
  • *args – arguments that should be applied to the function.
  • time_to_wait (int) – time in seconds to wait.
  • time_step (float) – step in seconds between checks.
Returns:

True if wait_for_function_truth succeeded and didn’t reach time_to_wait limit

Return type:

bool

Raises:

selenium.common.exceptions.TimeoutException – timeout waiting for function described by condition_function to return any non-False value.

Example

from selenium_extensions.helpers import wait_for_function_truth
from selenium_extensions.helpers import element_has_gone_stale


login_btn = driver.find_element_by_class_name('login_btn')
wait_for_function_truth(element_has_gone_stale, element)
selenium_extensions.helpers.kill_virtual_display(self, display)[source]

Kills virtual display created by pyvirtualdisplay.Display()

Parameters:display (pyvirtualdisplay.Display) – display to kill.

Example

from selenium_extensions.helpers import kill_virtual_display


display = Display(visible=0, size=(1024, 768))
display.start()
...
kill_virtual_display(display)
selenium_extensions.helpers.join_css_classes(*args)[source]

Joins css classes into a single string

Parameters:*args – arguments that represent classes that should be joined.
Returns:a single string representing all of the classes.
Return type:str

Examples

from selenium_extensions.helpers import join_css_classes


classes = join_css_classes('class1', 'class2')
print(classes)  # '.class2 .class2'