Skip to main content

A small library for simplifying a table object in selenium

Project description


Build Status codecov PyPi


A small library for simplifying a table object in selenium


If you have pip on your system, you can simply install or upgrade the Python bindings:

pip install selenium-datatable

Alternately, you can download the source code and run:

python install


A table object class implementation:

# -- FILE:
from import By
from selenium_datatable import DataTable, Column

class UsersTable(DataTable):
    rows_locator = (By.CSS_SELECTOR, "tbody > tr")
    headers_locator = (By.CSS_SELECTOR, "thead > tr > th")
    # columns
    last_name = Column(By.CSS_SELECTOR, "tr:nth-of-type({row}) td:nth-of-type(1)")
    first_name = Column(By.CSS_SELECTOR, "tr:nth-of-type({row}) td:nth-of-type(2)")
    email = Column(By.CSS_SELECTOR, "tr:nth-of-type({row}) td:nth-of-type(3)")
    due = Column(By.CSS_SELECTOR, "tr:nth-of-type({row}) td:nth-of-type(4)")
    web_site = Column(By.CSS_SELECTOR, "tr:nth-of-type({row}) td:nth-of-type(5)")
    delete_button = Column(By.CSS_SELECTOR, "tr:nth-of-type({row}) td:nth-of-type(6) a[href='#delete']")
    edit_button = Column(By.CSS_SELECTOR, "tr:nth-of-type({row}) td:nth-of-type(6) a[href='#edit']")

A page object class implementation:

# -- FILE:
from table import UsersTable

class HomePage:    
    items_list = UsersTable("id", "table1")
    def __init__(self, driver, url='http://localhost/tables'):
        self.driver = driver
        self.url = url           
    def open(self):


# -- FILE:
import unittest
from selenium.webdriver import Chrome
from home_page import HomePage

class TestTable(unittest.TestCase):

    def setUp(self):
        self.driver = Chrome() = HomePage(self.driver)

    def test_get_item_from_first_row(self):        
        item =        
        self.assertEqual(item.first_name.text, 'John')
        self.assertEqual(item.last_name.text, 'Smith')
        self.assertEqual(, '')
    def test_get_item_by_property(self):
        item ='Doe', first_name='Jason')    
        self.assertEqual(item.first_name.text, 'Jason')
        self.assertEqual(item.last_name.text, 'Doe')
    def test_number_of_rows(self):
        assert len( == 4
    def test_iterate_through_rows(self):
        for row in
            self.assertTrue(hasattr(row, 'last_name')) 
    def test_comprehension_list_slice(self):
        users = [row for row in[1:3]]
        self.assertEqual(len(users), 2)
        self.assertEqual(users[0].first_name.text, "Frank")
        self.assertEqual(users[1].first_name.text, "Jason")

    def tearDown(self):

The DataTable class is looking for a "driver" attribute in an owner class, but you can change that behaviour by overriding the attribute driver_attribute from the DataTable class.

class UsersTable(DataTable):
    driver_attribute = "selenium"

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release. See tutorial on generating distribution archives.

Built Distribution

selenium_datatable-0.3.3-py3-none-any.whl (11.4 kB view hashes)

Uploaded py3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page