diff --git a/CHANGES.rst b/CHANGES.rst
index bfc6dfbf6..d754d3cab 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -4,6 +4,14 @@ Release Notes
1.8.1
-----
- Added 'Get Locations' keyword [thaffenden]
+- Added Following Table keywords [Gaurang033]
+
+ - table_cell_should_not_contain
+ - table_column_should_not_contain
+ - table_footer_should_not_contain
+ - table_header_should_not_contain
+ - table_row_should_not_contain
+ - table_should_not_contain
1.8.0
-----
diff --git a/src/Selenium2Library/keywords/_tableelement.py b/src/Selenium2Library/keywords/_tableelement.py
index 0c7b03519..de6eb80fb 100644
--- a/src/Selenium2Library/keywords/_tableelement.py
+++ b/src/Selenium2Library/keywords/_tableelement.py
@@ -73,6 +73,37 @@ def table_cell_should_contain(self, table_locator, row, column, expected, loglev
self.log_source(loglevel)
raise AssertionError(message)
+ def table_cell_should_not_contain(self, table_locator, row, column, value, loglevel='INFO'):
+ """
+ Verifies that a certain cell in a table does not contain `expected`.
+
+ Row and column number start from 1. This keyword passes if the
+ specified cell does not contain the given content. If you want
+ to test that the cell content does not match exactly, or that
+ it e.g. starts with some text, use `Get Table Cell` keyword in
+ combination with built-in keywords such as `Should Not Be Equal`
+ or `Should Not Start With`.
+
+ To understand how tables are identified, please take a look at
+ the `introduction`.
+
+ See `Page Should Contain` for explanation about `loglevel` argument.
+ """
+ message = ("Cell in table '%s' in row #%s and column #%s should not have contained text '%s'."
+ % (table_locator, row, column, value))
+ cell_not_exist_message = ("Cell in table '%s' in row #%s and column #%s was not found"
+ % (table_locator, row, column))
+ try:
+ content = self.get_table_cell(table_locator, row, column, loglevel='NONE')
+ except AssertionError as err:
+ self._info(err)
+ self.log_source(loglevel)
+ raise AssertionError(cell_not_exist_message)
+ self._info("Cell contains %s." % content)
+ if value in content:
+ self.log_source(loglevel)
+ raise AssertionError(message)
+
def table_column_should_contain(self, table_locator, col, expected, loglevel='INFO'):
"""Verifies that a specific column contains `expected`.
@@ -100,6 +131,32 @@ def table_column_should_contain(self, table_locator, col, expected, loglevel='IN
"should have contained text '%s'."
% (col, table_locator, expected))
+ def table_column_should_not_contain(self, table_locator, col, value, loglevel='INFO'):
+ """Verifies that a specific column does not contain `expected`.
+
+ The first leftmost column is column number 1. A negative column
+ number can be used to get column counting from the end of the row (end: -1).
+ If the table contains cells that span multiple columns, those merged cells
+ count as a single column. For example both tests below work,
+ if in one row columns A and B are merged with colspan="2", and
+ the logical third column contains "C".
+
+ Example:
+ | Table Column Should Not Contain | tableId | 3 | C |
+ | Table Column Should Not Contain | tableId | 2 | C |
+
+ To understand how tables are identified, please take a look at
+ the `introduction`.
+
+ See `Page Should Contain Element` for explanation about
+ `loglevel` argument.
+ """
+ element = self._table_element_finder.find_by_col(self._current_browser(), table_locator, col, value)
+ if element:
+ self.log_source(loglevel)
+ raise AssertionError("Column #%s in table identified by '%s' should not have contained text '%s'."
+ % (col, table_locator, value))
+
def table_footer_should_contain(self, table_locator, expected, loglevel='INFO'):
"""Verifies that the table footer contains `expected`.
@@ -116,6 +173,22 @@ def table_footer_should_contain(self, table_locator, expected, loglevel='INFO'):
raise AssertionError("Footer in table identified by '%s' should have contained "
"text '%s'." % (table_locator, expected))
+ def table_footer_should_not_contain(self, table_locator, value, loglevel='INFO'):
+ """Verifies that the table footer does not contain `expected`.
+
+ With table footer can be described as any
-element that is
+ child of a | -element. To understand how tables are
+ identified, please take a look at the `introduction`.
+
+ See `Page Should Contain Element` for explanation about
+ `loglevel` argument.
+ """
+ element = self._table_element_finder.find_by_footer(self._current_browser(), table_locator, value)
+ if element:
+ self.log_source(loglevel)
+ raise AssertionError("Footer in table identified by '%s' should not have contained text '%s'."
+ % (table_locator, value))
+
def table_header_should_contain(self, table_locator, expected, loglevel='INFO'):
"""Verifies that the table header, i.e. any ... | element, contains `expected`.
@@ -131,6 +204,21 @@ def table_header_should_contain(self, table_locator, expected, loglevel='INFO'):
raise AssertionError("Header in table identified by '%s' should have contained "
"text '%s'." % (table_locator, expected))
+ def table_header_should_not_contain(self, table_locator, value, loglevel='INFO'):
+ """Verifies that the table header, i.e. any ... | element, does not contain `expected`.
+
+ To understand how tables are identified, please take a look at
+ the `introduction`.
+
+ See `Page Should Contain Element` for explanation about
+ `loglevel` argument.
+ """
+ element = self._table_element_finder.find_by_header(self._current_browser(), table_locator, value)
+ if element:
+ self.log_source(loglevel)
+ raise AssertionError("Header in table identified by '%s' should not have contained text '%s'."
+ % (table_locator, value))
+
def table_row_should_contain(self, table_locator, row, expected, loglevel='INFO'):
"""Verifies that a specific table row contains `expected`.
@@ -154,6 +242,29 @@ def table_row_should_contain(self, table_locator, row, expected, loglevel='INFO'
raise AssertionError("Row #%s in table identified by '%s' should have contained "
"text '%s'." % (row, table_locator, expected))
+ def table_row_should_not_contain(self, table_locator, row, value, loglevel='INFO'):
+ """Verifies that a specific table row does not contain `expected`.
+
+ The uppermost row is row number 1. A negative column
+ number can be used to get column counting from the end of the row
+ (end: -1). For tables that are structured with thead, tbody and tfoot,
+ only the tbody section is searched. Please use `Table Header Should Contain`
+ or `Table Footer Should Contain` for tests against the header or
+ footer content.
+
+ If the table contains cells that span multiple rows, a match
+ only occurs for the uppermost row of those merged cells. To
+ understand how tables are identified, please take a look at
+ the `introduction`.
+
+ See `Page Should Contain Element` for explanation about `loglevel` argument.
+ """
+ element = self._table_element_finder.find_by_row(self._current_browser(), table_locator, row, value)
+ if element:
+ self.log_source(loglevel)
+ raise AssertionError("Row #%s in table identified by '%s' should have contained text '%s'."
+ % (row, table_locator, value))
+
def table_should_contain(self, table_locator, expected, loglevel='INFO'):
"""Verifies that `expected` can be found somewhere in the table.
@@ -168,3 +279,18 @@ def table_should_contain(self, table_locator, expected, loglevel='INFO'):
self.log_source(loglevel)
raise AssertionError("Table identified by '%s' should have contained text '%s'." \
% (table_locator, expected))
+
+ def table_should_not_contain(self, table_locator, value, loglevel='INFO'):
+ """Verifies that `expected` should not be present anywhere in the table.
+
+ To understand how tables are identified, please take a look at
+ the `introduction`.
+
+ See `Page Should Contain Element` for explanation about
+ `loglevel` argument.
+ """
+ element = self._table_element_finder.find_by_content(self._current_browser(), table_locator, value)
+ if element:
+ self.log_source(loglevel)
+ raise AssertionError("Table identified by '%s' should not have contained text '%s'."
+ % (table_locator, value))
diff --git a/test/acceptance/keywords/tables/table_should_not_contain.robot b/test/acceptance/keywords/tables/table_should_not_contain.robot
new file mode 100644
index 000000000..528126344
--- /dev/null
+++ b/test/acceptance/keywords/tables/table_should_not_contain.robot
@@ -0,0 +1,120 @@
+*** Settings ***
+Documentation Tests table contents for should not keyowrds
+Resource table_resource.robot
+Default Tags table_not_contain
+
+
+*** Test Cases ***
+Should Give Error Message When Content Found In Table
+ [Documentation] Should Give Error Message When Content Found In Table
+ [Template] Verify Table Does Contain With CSS And XPath Locators
+ simpleTable simpleTable_A1
+ simpleTable simpleTable_C3
+ simpleWithNested simpleWithNested_A1
+ simpleWithNested nestedTable_A1
+ nestedTable nestedTable_A1
+ nestedTable nestedTable_C3
+ tableWithSingleHeader tableWithSingleHeader_B1
+ tableWithSingleHeader tableWithSingleHeader_B2
+ withHeadAndFoot withHeadAndFoot_AH1
+ withHeadAndFoot withHeadAndFoot_B2
+ withHeadAndFoot withHeadAndFoot_CF1
+ mergedRows mergedRows_A1
+ mergedCols mergedCols_B2
+ formattedTable formattedTable_A1
+ formattedTable formattedTable_B1
+ formattedTable formattedTable_C1
+ formattedTable formattedTable_A2
+ formattedTable formattedTable_B2
+ formattedTable formattedTable_ÄÖÜäöüß
+ formattedTable äöü€&äöü€&
+
+Test Table Cell Should Not Contain
+ [Documentation] Test Table Cell Should Not Contain
+ ${table}= set variable simpleTable
+ ${row}= set variable 1
+ ${col}= set variable 1
+ ${value} = set variable simpleTable_A2
+ table cell should not contain ${table} ${row} ${col} ${value}
+
+Test Table Cell Give Error When Cell Not Present
+ [Documentation] Test Table Cell Should Not Contain when Cell is not present in the table
+ ${table}= set variable simpleTable
+ ${row}= set variable 1
+ ${col}= set variable 10
+ ${value} = set variable simpleTable_A1
+ ${err}= Set Variable Cell in table '${table}' in row #${row} and column #${col} was not found
+ Run Keyword And Expect Error ${err} table cell should not contain ${table} ${row} ${col} ${value}
+
+Test Table Cell Give Error When It Contains
+ [Documentation] Test Table Cell Give Error When It Contains
+ ${table}= set variable simpleTable
+ ${row}= set variable 1
+ ${col}= set variable 1
+ ${value} = set variable simpleTable_A1
+ ${err}= Set Variable Cell in table '${table}' in row #${row} and column #${col} should not have contained text '${value}'.
+ Run Keyword And Expect Error ${err} table cell should not contain ${table} ${row} ${col} ${value}
+
+Test Table Row Should Not Contain
+ [Documentation] Test Table Row Should Not Contain
+ ${table}= set variable simpleTable
+ ${row}= set variable 1
+ ${value} = set variable simpleTable_A2
+ table row should not contain ${table} ${row} ${value}
+
+Test Table Row Should Give Error When It Contains
+ [Documentation] Test Table Row Should Give Error When It Contains
+ ${table}= set variable tableWithSingleHeader
+ ${value} = set variable tableWithSingleHeader_A1
+ ${row}= set variable 1
+ ${err}= Set Variable Row #${row} in table identified by '${table}' should have contained text '${value}'.
+ run keyword and expect error ${err} table row should not contain ${table} ${row} ${value}
+
+Test Table column Should Not Contain
+ [Documentation] Test Table column Should Not Contain
+ ${table}= set variable simpleTable
+ ${column}= set variable 1
+ ${value} = set variable simpleTable_B2
+ table column should not contain ${table} ${column} ${value}
+
+Test Table column Should Give Error When It Contains
+ [Documentation] Test Table column Should Give Error When It Contains
+ ${table}= set variable tableWithSingleHeader
+ ${column}= set variable 1
+ ${value} = set variable tableWithSingleHeader_A1
+ ${err}= Set Variable Column #${column} in table identified by '${table}' should not have contained text '${value}'.
+ run keyword and expect error ${err} table column should not contain ${table} ${column} ${value}
+
+Test Table Header Should Not Contain
+ [Documentation] Test Table Header Should Not Contain
+ ${table}= set variable tableWithSingleHeader
+ ${value} = set variable tableWithSingleHeader_A3
+ table header should not contain ${table} ${value}
+
+Test Table Header Should Give Error When It Contains
+ [Documentation] Test Table Header Should Give Error When It Contains
+ ${table}= set variable tableWithSingleHeader
+ ${value} = set variable tableWithSingleHeader_A1
+ ${err}= Set Variable Header in table identified by '${table}' should not have contained text '${value}'.
+ run keyword and expect error ${err} table header should not contain ${table} ${value}
+
+Test Table Footer Should Not Contain
+ [Documentation] Test Table Footer Should Not Contain
+ ${table}= set variable withHeadAndFoot
+ ${expected} = set variable withHeadAndFoot_A1
+ table footer should not contain ${table} ${expected}
+
+Test Table Footer Should Give Error When It Contains
+ [Documentation] Test Table Footer Should Give Error When It Contains
+ ${table}= set variable withHeadAndFoot
+ ${value} = set variable withHeadAndFoot_AF1
+ ${err}= Set Variable Footer in table identified by '${table}' should not have contained text '${value}'.
+ run keyword and expect error ${err} table footer should not contain ${table} ${value}
+
+
+*** Keywords ***
+Verify Table Does Contain With CSS And XPath Locators
+ [Arguments] ${locator} ${value}
+ [Documentation] Verify Table Contains With CSS And XPath Locators
+ ${err}= Set Variable Table identified by '${locator}' should not have contained text '${value}'.
+ Run Keyword And Expect Error ${err} Table Should Not Contain ${locator} ${value}