diff --git a/src/Selenium2Library/keywords/_element.py b/src/Selenium2Library/keywords/_element.py index 16f4846e2..223f5a1cf 100644 --- a/src/Selenium2Library/keywords/_element.py +++ b/src/Selenium2Library/keywords/_element.py @@ -815,3 +815,16 @@ def _page_should_not_contain_element(self, locator, tag, message, loglevel): raise AssertionError(message) self._info("Current page does not contain %s '%s'." % (element_name, locator)) + + def click_elements(self, locator): + """ + Clicks all the elements identified by `locator`. + + Key attributes for arbitrary elements are `id` and `name`. See + `introduction` for details about locating elements. + """ + elements = self._element_find(locator, False, True) + self._info("total %s elements found with matching locator %s" % (len(elements), locator)) + self._info("clicking on all elements found with matching locator %s" % locator) + for element in elements: + element.click() diff --git a/src/Selenium2Library/keywords/_tableelement.py b/src/Selenium2Library/keywords/_tableelement.py index 0c7b03519..89b15e6ac 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, expected, 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, expected)) + try: + content = self.get_table_cell(table_locator, row, column, loglevel='NONE') + except AssertionError, err: + self._info(err) + self.log_source(loglevel) + raise AssertionError(message) + self._info("Cell contains %s." % content) + + if expected 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,33 @@ 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, expected, 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, expected) + if element is not None: + self.log_source(loglevel) + raise AssertionError("Column #%s in table identified by '%s' " + "should not have contained text '%s'." + % (col, table_locator, expected)) + def table_footer_should_contain(self, table_locator, expected, loglevel='INFO'): """Verifies that the table footer contains `expected`. @@ -116,6 +174,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, expected, 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, expected) + if element is not None: + self.log_source(loglevel) + raise AssertionError("Footer in table identified by '%s' should not have contained " + "text '%s'." % (table_locator, expected)) + def table_header_should_contain(self, table_locator, expected, loglevel='INFO'): """Verifies that the table header, i.e. any ... element, contains `expected`. @@ -131,6 +205,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, expected, 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, expected) + if element is not None: + self.log_source(loglevel) + raise AssertionError("Header in table identified by '%s' should not have contained " + "text '%s'." % (table_locator, expected)) + def table_row_should_contain(self, table_locator, row, expected, loglevel='INFO'): """Verifies that a specific table row contains `expected`. @@ -154,6 +243,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, expected, 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, expected) + if element is not None: + self.log_source(loglevel) + raise AssertionError("Row #%s in table identified by '%s' should have contained " + "text '%s'." % (row, table_locator, expected)) + def table_should_contain(self, table_locator, expected, loglevel='INFO'): """Verifies that `expected` can be found somewhere in the table. @@ -168,3 +280,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, expected, 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, expected) + if element is not None: + self.log_source(loglevel) + raise AssertionError("Table identified by '%s' should not have contained text '%s'." \ + % (table_locator, expected)) diff --git a/test/acceptance/keywords/click_element.robot b/test/acceptance/keywords/click_element.robot index 97ed96a62..14467bfb7 100644 --- a/test/acceptance/keywords/click_element.robot +++ b/test/acceptance/keywords/click_element.robot @@ -16,6 +16,14 @@ Double Click Element Double Click Element doubleClickButton Element Text Should Be output double clicked +Click All Element + [Documentation] Test Click Elements keyword + Go To Page "forms/prefilled_email_form.html" + Click Elements //*[@type='checkbox'] + checkbox should not be selected can_send_email + Checkbox Should Be Selected can_send_sms + Go To Page "javascript/click.html" + *** Keywords *** Initialize Page [Documentation] Initialize Page 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..fec4a0081 --- /dev/null +++ b/test/acceptance/keywords/tables/table_should_not_contain.robot @@ -0,0 +1,111 @@ +*** 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 + ${expected} = set variable simpleTable_A2 + table cell should not contain ${table} ${row} ${col} ${expected} + +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 + ${expected} = set variable simpleTable_A1 + ${err}= Set Variable Cell in table '${table}' in row #${row} and column #${col} should not have contained text '${expected}'. + Run Keyword And Expect Error ${err} table cell should not contain ${table} ${row} ${col} ${expected} + +Test Table Row Should Not Contain + [Documentation] Test Table Row Should Not Contain + ${table}= set variable simpleTable + ${row}= set variable 1 + ${expected} = set variable simpleTable_A2 + table row should not contain ${table} ${row} ${expected} + +Test Table Row Should Give Error When It Contains + [Documentation] Test Table Row Should Give Error When It Contains + ${table}= set variable tableWithSingleHeader + ${expected} = set variable tableWithSingleHeader_A1 + ${row}= set variable 1 + ${err}= Set Variable Row #${row} in table identified by '${table}' should have contained text '${expected}'. + run keyword and expect error ${err} table row should not contain ${table} ${row} ${expected} + +Test Table column Should Not Contain + [Documentation] Test Table column Should Not Contain + ${table}= set variable simpleTable + ${column}= set variable 1 + ${expected} = set variable simpleTable_B2 + table column should not contain ${table} ${column} ${expected} + +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 + ${expected} = set variable tableWithSingleHeader_A1 + ${err}= Set Variable Column #${column} in table identified by '${table}' should not have contained text '${expected}'. + run keyword and expect error ${err} table column should not contain ${table} ${column} ${expected} + +Test Table Header Should Not Contain + [Documentation] Test Table Header Should Not Contain + ${table}= set variable tableWithSingleHeader + ${expected} = set variable tableWithSingleHeader_A3 + table header should not contain ${table} ${expected} + +Test Table Header Should Give Error When It Contains + [Documentation] Test Table Header Should Give Error When It Contains + ${table}= set variable tableWithSingleHeader + ${expected} = set variable tableWithSingleHeader_A1 + ${err}= Set Variable Header in table identified by '${table}' should not have contained text '${expected}'. + run keyword and expect error ${err} table header should not contain ${table} ${expected} + +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 + ${expected} = set variable withHeadAndFoot_AF1 + ${err}= Set Variable Footer in table identified by '${table}' should not have contained text '${expected}'. + run keyword and expect error ${err} table footer should not contain ${table} ${expected} + + +*** Keywords *** +Verify Table Does Contain With CSS And XPath Locators + [Arguments] ${locator} ${expected} + [Documentation] Verify Table Contains With CSS And XPath Locators + ${err}= Set Variable Table identified by '${locator}' should not have contained text '${expected}'. + Run Keyword And Expect Error ${err} Table Should Not Contain ${locator} ${expected}