selenium Python如何检查表列是否按字母顺序排序

时间:2016-02-12 16:21:47

标签: python-2.7 selenium selenium-webdriver

我有一个包含5列和一些行的表的页面。当我单击第1列的标题(索引ID为1)时,它按字母顺序对行进行排序。 我想验证列是否按ABC顺序对行进行了排序。 我不知道该怎么做。

我编写了Selenium Python代码来点击标题,我有代码可以遍历表格。在for循环中,我想检查列是否按ABC顺序对数据进行了排序。 我需要一些帮助来检查每行中的文本是否按ABC顺序排列。

for循环迭代表的代码片段是:

def is_column_sorted(self): # Is the columns sorted in ABC order when the header was clicked 
    try:
        table_id = WebDriverWait(self.driver, 20).until(EC.presence_of_element_located((By.ID, 'data_configuration_data_previews_ct_fields_body')))
        rows = table_id.find_elements(By.TAG_NAME, "tr")
        for row in rows:
            # Get the columns
            col_name = row.find_elements(By.TAG_NAME, "td")[1]  # This is the Configuration Name column
            col_type = row.find_elements(By.TAG_NAME, "td")[3]  # This is the Type column
            col_rows = row.find_elements(By.TAG_NAME, "td")[4]  # This is the Rows column
            print "col_name.text = "
            print col_name.text
            print col_type.text
            print col_rows.text
            if (col_name.text == "data1"):
                return True
        return False
    except NoSuchElementException, e:
        print "Element not found "
        print e
        self.save_screenshot("data_previews_page_column_sort")
        return False

点击标题的我的TestCase代码段是:

def test_sort_data_preview(self): # On teh Data preview view page click col 1 (Configuration) to sort it
    print "*** Test sort_data_preview ***"
    tool_bar = ToolbarPage(self.driver)
    data_previews_page = tool_bar.clickDataPreviews()
    data_previews_page.select_a_data_preview(Globals.datapreview_crm_name)
    data_previews_view_page =     data_previews_page.click_view_link(Globals.datapreview_crm_name)
    data_previews_view_page.click_column_header_to_sort()
    data_previews_view_page.is_column_sorted()

E.g。 Col1中的数据可能是:

Lademo_CRM_Data_Preview
Test Character Code 
Escr data preview
Selenium CRM Data Preview 
etc

单击Col1的标题后,网页将按字母顺序排序。 我如何检查它是否已正确排序?

谢谢, 里亚兹

1 个答案:

答案 0 :(得分:0)

我真的相信通过自动功能测试在前端进行测试排序并不是最好的做法。如果您有权访问代码,请在那里测试排序算法。

如果您仍想这样做,我建议在单击排序之前将所有列数据读入列表,然后使用pythons sorted()函数对列表进行排序。我在下面写了一些伪代码,希望它适合你。

 unsortedlist = self.driver.find_elements(By.Locator, row_element)
 self.driver.find_elements(By.Locator, sort).click()
 sortedTable = self.driver.find_elements(By.Locator, row_element)
 sortedList = sorted(unsortedList, key=str.lower)
 for item in sortedTable:
     assert sortedTable[i] == sortedList[i]