def check_column_sort(self, column_heading): b = self.browser column_headings = [th.text for th in b.find_elements_by_xpath('//table[@id="widget"]/thead//th')] self.assertIn(column_heading, column_headings) column_index = column_headings.index(column_heading) + 1 # xpath indices are 1-based b.find_element_by_xpath('//table[@id="widget"]/thead//th[%d]//a' % column_index).click() cell_values = [] # Next page number # Assume our current page is 1 next_page = 2 while True: cell_values.extend(cell.text for cell in b.find_elements_by_xpath('//table[@id="widget"]/tbody/tr/td[%d]' % column_index)) # Keeping scrolling through pages until we have seen at least two distinct cell values # (so that we can see that it is really sorted) if len(set(cell_values)) > 1: break try: b.find_element_by_xpath('//div[contains(@class, "pagination")]' '//ul/li/a[normalize-space(string())="%s"]' % next_page).click() except NoSuchElementException: raise AssertionError('Tried all pages, but every cell had the same value!') next_page += 1 assert_sorted(cell_values, key=lambda x: x.lower())
def check_column_sort(self, column_heading): b = self.browser column_headings = [ th.text for th in b.find_elements_by_xpath( '//table[@id="widget"]/thead//th') ] self.assertIn(column_heading, column_headings) column_index = column_headings.index( column_heading) + 1 # xpath indices are 1-based b.find_element_by_xpath('//table[@id="widget"]/thead//th[%d]//a' % column_index).click() cell_values = [] # Next page number # Assume our current page is 1 next_page = 2 while True: cell_values.extend(cell.text for cell in b.find_elements_by_xpath( '//table[@id="widget"]/tbody/tr/td[%d]' % column_index)) # Keeping scrolling through pages until we have seen at least two distinct cell values # (so that we can see that it is really sorted) if len(set(cell_values)) > 1: break try: b.find_element_by_xpath( '//div[contains(@class, "pagination")]' '//ul/li/a[normalize-space(string())="%s"]' % next_page).click() except NoSuchElementException: raise AssertionError( 'Tried all pages, but every cell had the same value!') next_page += 1 assert_sorted(cell_values, key=lambda x: x.lower())
def check_column_sort(self, column, sort_key=None): b = self.browser b.get(get_server_base() + 'recipes/mine') b.find_element_by_xpath('//table[@id="widget"]/thead//th[%d]//a[@href]' % column).click() row_count = len(b.find_elements_by_xpath('//table[@id="widget"]/tbody/tr/td[%d]' % column)) self.assertEquals(row_count, 24) cell_values = [b.find_element_by_xpath('//table[@id="widget"]/tbody/tr[%d]/td[%d]' % (row, column)).text for row in range(1, row_count + 1)] assert_sorted(cell_values, key=sort_key)
def check_column_sort(self, column, sort_key=None): sel = self.selenium sel.open('recipes/mine') sel.click('//table[@id="widget"]/thead//th[%d]//a[@href]' % column) sel.wait_for_page_to_load('30000') row_count = int(sel.get_xpath_count( '//table[@id="widget"]/tbody/tr/td[%d]' % column)) self.assertEquals(row_count, 24) cell_values = [sel.get_text('//table[@id="widget"]/tbody/tr[%d]/td[%d]' % (row, column)) for row in range(1, row_count + 1)] assert_sorted(cell_values, key=sort_key)
def test_searchbar_dropdowns_are_sorted(self): b = self.browser b.get(get_server_base()) b.find_element_by_link_text('Show Search Options').click() wait_for_animation(b, '#searchform') table_options = b.find_element_by_name('systemsearch-0.table')\ .find_elements_by_tag_name('option') assert_sorted([option.text for option in table_options]) Select(b.find_element_by_name('systemsearch-0.table'))\ .select_by_visible_text('Key/Value') keyvalue_options = b.find_element_by_name('systemsearch-0.keyvalue')\ .find_elements_by_tag_name('option') assert_sorted([option.text for option in keyvalue_options])
def test_can_sort_by_id(self): column = 1 b = self.browser b.get(get_server_base() + 'recipes/mine') b.find_element_by_xpath('//table[@id="widget"]/thead//th[%d]//a[@href]' % column).click() row_count = len(b.find_elements_by_xpath('//table[@id="widget"]/tbody/tr/td[%d]' % column)) self.assertEquals(row_count, 24) cell_values = [] for row in range(1, row_count + 1): raw_value = b.find_element_by_xpath('//table[@id="widget"]/tbody/tr[%d]/td[%d]' % (row, column)).text m = re.match(r'R:(\d+)$', raw_value) assert m.group(1) cell_values.append(int(m.group(1))) assert_sorted(cell_values)
def test_can_sort_by_id(self): column = 1 sel = self.selenium sel.open('recipes/mine') sel.click('//table[@id="widget"]/thead//th[%d]//a[@href]' % column) sel.wait_for_page_to_load('30000') row_count = int(sel.get_xpath_count( '//table[@id="widget"]/tbody/tr/td[%d]' % column)) self.assertEquals(row_count, 24) cell_values = [] for row in range(1, row_count + 1): raw_value = sel.get_text('//table[@id="widget"]/tbody/tr[%d]/td[%d]' % (row, column)) m = re.match(r'R:(\d+)$', raw_value) assert m.group(1) cell_values.append(int(m.group(1))) assert_sorted(cell_values)
def check_column_sort(self, column): sel = self.selenium sel.click('//table[@id="widget"]/thead//th[%d]//a[@href]' % column) sel.wait_for_page_to_load('30000') cell_values = [] while True: row_count = int(sel.get_xpath_count('//table[@id="widget"]/tbody/tr/td[%d]' % column)) cell_values += [sel.get_text('//table[@id="widget"]/tbody/tr[%d]/td[%d]' % (row, column)) for row in range(1, row_count + 1)] # Keeping scrolling through pages until we have seen at least two distinct cell values # (so that we can see that it is really sorted) if len(set(cell_values)) > 1: break if sel.get_xpath_count('//div[@class="list"]//a[text()=">"]') != 2: raise AssertionError('Tried all pages, but every cell had the same value!') sel.click('//div[@class="list"]//a[text()=">"]') sel.wait_for_page_to_load('30000') assert_sorted(cell_values, key=lambda x: x.lower())
def check_column_sort(self, column): sel = self.selenium sel.click('//table[@id="widget"]/thead//th[%d]//a[@href]' % column) sel.wait_for_page_to_load('30000') cell_values = [] # Next page number # Assume our current page is 1 next_page = 2 while True: row_count = int(sel.get_xpath_count('//table[@id="widget"]/tbody/tr/td[%d]' % column)) cell_values += [sel.get_text('//table[@id="widget"]/tbody/tr[%d]/td[%d]' % (row, column)) for row in range(1, row_count + 1)] # Keeping scrolling through pages until we have seen at least two distinct cell values # (so that we can see that it is really sorted) if len(set(cell_values)) > 1: break try: sel.click('//div[contains(@class, "pagination")]//ul/li/a[normalize-space(string())="%s"]' % next_page) except Exception: raise AssertionError('Tried all pages, but every cell had the same value!') next_page += 1 sel.wait_for_page_to_load('30000') assert_sorted(cell_values, key=lambda x: x.lower())