mirror of
https://git.yoctoproject.org/poky
synced 2026-04-30 03:32:12 +02:00
bitbake: toaster: tests: Re-write some cases to make them more maintainable
(Bitbake rev: c3c7e94cadb3a3a2d8ef33ed456f439c106018c1) Signed-off-by: Ke Zou <ke.zou@windriver.com> Signed-off-by: Elliot Smith <elliot.smith@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
@@ -787,8 +787,6 @@ class toaster_cases(toaster_cases_base):
|
||||
self.driver.get(self.base_url)
|
||||
self.driver.find_element_by_partial_link_text("core-image").click()
|
||||
self.driver.find_element_by_link_text("Tasks").click()
|
||||
# self.driver.find_element_by_link_text("All builds").click()
|
||||
# self.driver.back()
|
||||
self.table_name = 'otable'
|
||||
# This is how we find the "default" rows-number!
|
||||
rows_displayed = int(Select(self.driver.find_element_by_css_selector("select.pagesize")).first_selected_option.text)
|
||||
@@ -821,14 +819,14 @@ class toaster_cases(toaster_cases_base):
|
||||
'Outcome':'outcome', 'Cache attempt':'cache_attempt', 'Time (secs)':'time_taken', 'CPU usage':'cpu_used', \
|
||||
'Disk I/O (ms)':'disk_io'}
|
||||
for key in table_head_dict:
|
||||
# This is tricky here: we are doing so because there may be more than 1
|
||||
# same-name link_text in one page. So we only find element inside the table
|
||||
# This is tricky here: we are doing so because there may be more than 1
|
||||
# same-name link_text in one page. So we only find element inside the table
|
||||
self.find_element_by_link_text_in_table(self.table_name, key).click()
|
||||
column_list = self.get_table_column_text("class", table_head_dict[key])
|
||||
# after 1st click, the list should be either sequenced or inverted, but we don't have a "default order" here
|
||||
# the point is, after another click, it should be another order
|
||||
# the first case is special:this means every item in column_list is the same, so
|
||||
# after one click, either sequenced or inverted will be fine
|
||||
# after 1st click, the list should be either sequenced or inverted, but we don't have a "default order" here
|
||||
# the point is, after another click, it should be another order
|
||||
# the first case is special:this means every item in column_list is the same, so
|
||||
# after one click, either sequenced or inverted will be fine
|
||||
if (is_list_inverted(column_list) and is_list_sequenced(column_list)) \
|
||||
or (not column_list) :
|
||||
self.find_element_by_link_text_in_table(self.table_name, key).click()
|
||||
@@ -844,7 +842,7 @@ class toaster_cases(toaster_cases_base):
|
||||
self.find_element_by_link_text_in_table(self.table_name, key).click()
|
||||
column_list = self.get_table_column_text("class", table_head_dict[key])
|
||||
self.assertTrue(is_list_inverted(column_list), msg=("%s column not inverted" % key))
|
||||
# step 8-10
|
||||
# step 8-10
|
||||
# filter dict: {link text name : filter table name in xpath}
|
||||
filter_dict = {'Executed':'filter_executed', 'Outcome':'filter_outcome', 'Cache attempt':'filter_cache_attempt'}
|
||||
for key in filter_dict:
|
||||
@@ -868,7 +866,7 @@ class toaster_cases(toaster_cases_base):
|
||||
temp_element.find_element_by_xpath("..//*[@class='icon-filter filtered']").click()
|
||||
avail_options = self.driver.find_elements_by_xpath("//*[@id='" + filter_dict[key] + "']//*[@name='filter'][not(@disabled)]")
|
||||
self.browser_delay()
|
||||
# step 11
|
||||
# step 11
|
||||
for item in ['order', 'task_name', 'executed', 'outcome', 'recipe_name', 'recipe_version']:
|
||||
try:
|
||||
self.find_element_by_xpath_in_table(self.table_name, "./tbody/tr[1]/*[@class='" + item + "']/a").click()
|
||||
@@ -878,7 +876,7 @@ class toaster_cases(toaster_cases_base):
|
||||
# insert screen shot here
|
||||
self.save_screenshot(screenshot_type='selenium', append_name='step11')
|
||||
self.driver.back()
|
||||
# step 12-14
|
||||
# step 12-14
|
||||
# about test_dict: please refer to testcase 904 requirement step 12-14
|
||||
test_dict = {
|
||||
'Time':{
|
||||
@@ -926,14 +924,14 @@ class toaster_cases(toaster_cases_base):
|
||||
# find "bash" in first column (Packages)
|
||||
self.driver.find_element_by_xpath("//*[@id='otable']//td[1]//*[text()='bash']").click()
|
||||
# save sceen here to observe...
|
||||
# step 6
|
||||
# step 6
|
||||
self.driver.find_element_by_partial_link_text("Generated files").click()
|
||||
head_list = self.get_table_head_text('otable')
|
||||
for item in ['File', 'Size']:
|
||||
self.assertTrue(item in head_list, msg=("%s not in head row" % item))
|
||||
c_list = self.get_table_column_text('class', 'path')
|
||||
self.assertTrue(is_list_sequenced(c_list), msg=("column not in order"))
|
||||
# step 7
|
||||
# step 7
|
||||
self.driver.find_element_by_partial_link_text("Runtime dependencies").click()
|
||||
# save sceen here to observe...
|
||||
# note that here table name is not 'otable'
|
||||
@@ -1049,7 +1047,7 @@ class toaster_cases(toaster_cases_base):
|
||||
self.assertTrue(is_list_sequenced(column_search_list))
|
||||
self.driver.find_element_by_css_selector("i.icon-remove").click()
|
||||
else:
|
||||
self.assertTrue(is_list_sequenced(column_list))
|
||||
self.assertTrue(is_list_sequenced(column_list), msg=("list %s not sequenced" % key))
|
||||
self.find_element_by_link_text_in_table(self.table_name, key).click()
|
||||
column_list = self.get_table_column_text("class", table_head_dict[key])
|
||||
self.assertTrue(is_list_inverted(column_list))
|
||||
@@ -1102,20 +1100,19 @@ class toaster_cases(toaster_cases_base):
|
||||
self.driver.get(self.base_url)
|
||||
self.driver.find_element_by_link_text("core-image-minimal").click()
|
||||
self.find_element_by_link_text_in_table('nav', 'Recipes').click()
|
||||
# step 3-5
|
||||
# step 3-5
|
||||
self.driver.find_element_by_id("search").clear()
|
||||
self.driver.find_element_by_id("search").send_keys("lib")
|
||||
self.driver.find_element_by_id("search-button").click()
|
||||
# save screen here for observation
|
||||
self.save_screenshot(screenshot_type='selenium', append_name='step5')
|
||||
# step 6
|
||||
# step 6
|
||||
self.driver.find_element_by_css_selector("i.icon-remove").click()
|
||||
self.driver.find_element_by_id("search").clear()
|
||||
# we deliberately want "no result" here
|
||||
self.driver.find_element_by_id("search").send_keys("no such input")
|
||||
self.driver.find_element_by_id("search-button").click()
|
||||
self.find_element_by_text("Show all recipes").click()
|
||||
self.driver.quit()
|
||||
|
||||
|
||||
##############
|
||||
@@ -1124,7 +1121,6 @@ class toaster_cases(toaster_cases_base):
|
||||
def test_912(self):
|
||||
self.case_no = self.get_case_number()
|
||||
self.log.info(' CASE %s log: ' % str(self.case_no))
|
||||
self.driver = self.setup_browser(self)
|
||||
self.driver.maximize_window()
|
||||
self.driver.get(self.base_url)
|
||||
self.driver.find_element_by_link_text("core-image-minimal").click()
|
||||
@@ -1187,179 +1183,42 @@ class toaster_cases(toaster_cases_base):
|
||||
def test_914(self):
|
||||
self.case_no = self.get_case_number()
|
||||
self.log.info(' CASE %s log: ' % str(self.case_no))
|
||||
image_type="core-image-minimal"
|
||||
test_package1="busybox"
|
||||
test_package2="gdbm"
|
||||
test_package3="gettext-native"
|
||||
driver = self.driver
|
||||
driver.maximize_window()
|
||||
driver.get(self.base_url)
|
||||
driver.find_element_by_link_text(image_type).click()
|
||||
driver.find_element_by_link_text("Recipes").click()
|
||||
driver.find_element_by_link_text(test_package1).click()
|
||||
|
||||
self.table_name = 'information'
|
||||
|
||||
tasks_row_count = len(driver.find_elements_by_xpath("/html/body/div[2]/div/div[3]/div/div[1]/table/tbody/tr/td[1]"))
|
||||
tasks_column_count = len(driver.find_elements_by_xpath("/html/body/div[2]/div/div[3]/div/div[1]/table/tbody/tr[1]/td"))
|
||||
print tasks_row_count
|
||||
print tasks_column_count
|
||||
|
||||
Tasks_column = self.get_table_column_text_by_column_number(self.table_name, 2)
|
||||
print ("Tasks_column=", Tasks_column)
|
||||
|
||||
key_tasks=["do_fetch", "do_unpack", "do_patch", "do_configure", "do_compile", "do_install", "do_package", "do_build"]
|
||||
i = 0
|
||||
while i < len(key_tasks):
|
||||
if key_tasks[i] not in Tasks_column:
|
||||
print ("Error! Missing key task: %s" % key_tasks[i])
|
||||
else:
|
||||
print ("%s is in tasks" % key_tasks[i])
|
||||
i = i + 1
|
||||
|
||||
if Tasks_column.index(key_tasks[0]) != 0:
|
||||
print ("Error! %s is not in the right position" % key_tasks[0])
|
||||
else:
|
||||
print ("%s is in right position" % key_tasks[0])
|
||||
|
||||
if Tasks_column[-1] != key_tasks[-1]:
|
||||
print ("Error! %s is not in the right position" % key_tasks[-1])
|
||||
else:
|
||||
print ("%s is in right position" % key_tasks[-1])
|
||||
|
||||
driver.find_element_by_partial_link_text("Packages (").click()
|
||||
packages_name = driver.find_element_by_partial_link_text("Packages (").text
|
||||
print packages_name
|
||||
packages_num = string.atoi(filter(str.isdigit, repr(packages_name)))
|
||||
print packages_num
|
||||
|
||||
packages_row_count = len(driver.find_elements_by_xpath("/html/body/div[2]/div/div[3]/div/div[2]/table/tbody/tr/td[1]"))
|
||||
print packages_row_count
|
||||
|
||||
if packages_num != packages_row_count:
|
||||
print ("Error! The packages number is not correct")
|
||||
else:
|
||||
print ("The pakcages number is correct")
|
||||
|
||||
driver.find_element_by_partial_link_text("Build dependencies (").click()
|
||||
depends_name = driver.find_element_by_partial_link_text("Build dependencies (").text
|
||||
print depends_name
|
||||
depends_num = string.atoi(filter(str.isdigit, repr(depends_name)))
|
||||
print depends_num
|
||||
|
||||
if depends_num == 0:
|
||||
depends_message = repr(driver.find_element_by_css_selector("div.alert.alert-info").text)
|
||||
print depends_message
|
||||
if depends_message.find("has no build dependencies.") < 0:
|
||||
print ("Error! The message isn't expected.")
|
||||
else:
|
||||
print ("The message is expected")
|
||||
else:
|
||||
depends_row_count = len(driver.find_elements_by_xpath("/html/body/div[2]/div/div[3]/div/div[3]/table/tbody/tr/td[1]"))
|
||||
print depends_row_count
|
||||
if depends_num != depends_row_count:
|
||||
print ("Error! The dependent packages number is not correct")
|
||||
else:
|
||||
print ("The dependent packages number is correct")
|
||||
|
||||
driver.find_element_by_partial_link_text("Reverse build dependencies (").click()
|
||||
rdepends_name = driver.find_element_by_partial_link_text("Reverse build dependencies (").text
|
||||
print rdepends_name
|
||||
rdepends_num = string.atoi(filter(str.isdigit, repr(rdepends_name)))
|
||||
print rdepends_num
|
||||
|
||||
if rdepends_num == 0:
|
||||
rdepends_message = repr(driver.find_element_by_css_selector("#brought-in-by > div.alert.alert-info").text)
|
||||
print rdepends_message
|
||||
if rdepends_message.find("has no reverse build dependencies.") < 0:
|
||||
print ("Error! The message isn't expected.")
|
||||
else:
|
||||
print ("The message is expected")
|
||||
else:
|
||||
print ("The reverse dependent packages number is correct")
|
||||
|
||||
driver.find_element_by_link_text("Recipes").click()
|
||||
driver.find_element_by_link_text(test_package2).click()
|
||||
driver.find_element_by_partial_link_text("Packages (").click()
|
||||
driver.find_element_by_partial_link_text("Build dependencies (").click()
|
||||
driver.find_element_by_partial_link_text("Reverse build dependencies (").click()
|
||||
|
||||
|
||||
driver.find_element_by_link_text("Recipes").click()
|
||||
driver.find_element_by_link_text(test_package3).click()
|
||||
|
||||
native_tasks_row_count = len(driver.find_elements_by_xpath("/html/body/div[2]/div/div[3]/div/div[1]/table/tbody/tr/td[1]"))
|
||||
native_tasks_column_count = len(driver.find_elements_by_xpath("/html/body/div[2]/div/div[3]/div/div[1]/table/tbody/tr[1]/td"))
|
||||
print native_tasks_row_count
|
||||
print native_tasks_column_count
|
||||
|
||||
Native_Tasks_column = self.get_table_column_text_by_column_number(self.table_name, 2)
|
||||
print ("Native_Tasks_column=", Native_Tasks_column)
|
||||
|
||||
native_key_tasks=["do_fetch", "do_unpack", "do_patch", "do_configure", "do_compile", "do_install", "do_build"]
|
||||
i = 0
|
||||
while i < len(native_key_tasks):
|
||||
if native_key_tasks[i] not in Native_Tasks_column:
|
||||
print ("Error! Missing key task: %s" % native_key_tasks[i])
|
||||
else:
|
||||
print ("%s is in tasks" % native_key_tasks[i])
|
||||
i = i + 1
|
||||
|
||||
if Native_Tasks_column.index(native_key_tasks[0]) != 0:
|
||||
print ("Error! %s is not in the right position" % native_key_tasks[0])
|
||||
else:
|
||||
print ("%s is in right position" % native_key_tasks[0])
|
||||
|
||||
if Native_Tasks_column[-1] != native_key_tasks[-1]:
|
||||
print ("Error! %s is not in the right position" % native_key_tasks[-1])
|
||||
else:
|
||||
print ("%s is in right position" % native_key_tasks[-1])
|
||||
|
||||
driver.find_element_by_partial_link_text("Packages (").click()
|
||||
native_packages_name = driver.find_element_by_partial_link_text("Packages (").text
|
||||
print native_packages_name
|
||||
native_packages_num = string.atoi(filter(str.isdigit, repr(native_packages_name)))
|
||||
print native_packages_num
|
||||
|
||||
if native_packages_num != 0:
|
||||
print ("Error! Native task shouldn't have any packages.")
|
||||
else:
|
||||
native_package_message = repr(driver.find_element_by_css_selector("div.alert.alert-info").text)
|
||||
print native_package_message
|
||||
if native_package_message.find("does not build any packages.") < 0:
|
||||
print ("Error! The message for native task isn't expected.")
|
||||
else:
|
||||
print ("The message for native task is expected.")
|
||||
|
||||
driver.find_element_by_partial_link_text("Build dependencies (").click()
|
||||
native_depends_name = driver.find_element_by_partial_link_text("Build dependencies (").text
|
||||
print native_depends_name
|
||||
native_depends_num = string.atoi(filter(str.isdigit, repr(native_depends_name)))
|
||||
print native_depends_num
|
||||
|
||||
native_depends_row_count = len(driver.find_elements_by_xpath("/html/body/div[2]/div/div[3]/div/div[3]/table/tbody/tr/td[1]"))
|
||||
print native_depends_row_count
|
||||
|
||||
if native_depends_num != native_depends_row_count:
|
||||
print ("Error! The dependent packages number is not correct")
|
||||
else:
|
||||
print ("The dependent packages number is correct")
|
||||
|
||||
driver.find_element_by_partial_link_text("Reverse build dependencies (").click()
|
||||
native_rdepends_name = driver.find_element_by_partial_link_text("Reverse build dependencies (").text
|
||||
print native_rdepends_name
|
||||
native_rdepends_num = string.atoi(filter(str.isdigit, repr(native_rdepends_name)))
|
||||
print native_rdepends_num
|
||||
|
||||
native_rdepends_row_count = len(driver.find_elements_by_xpath("/html/body/div[2]/div/div[3]/div/div[4]/table/tbody/tr/td[1]"))
|
||||
print native_rdepends_row_count
|
||||
|
||||
if native_rdepends_num != native_rdepends_row_count:
|
||||
print ("Error! The reverse dependent packages number is not correct")
|
||||
else:
|
||||
print ("The reverse dependent packages number is correct")
|
||||
|
||||
driver.find_element_by_link_text("Recipes").click()
|
||||
self.driver.maximize_window()
|
||||
self.driver.get(self.base_url)
|
||||
self.find_element_by_link_text_in_table('otable', "core-image-minimal").click()
|
||||
self.find_element_by_link_text_in_table('nav', 'Recipes').click()
|
||||
# step 4
|
||||
self.find_element_by_link_text_in_table('otable', "busybox").click()
|
||||
# this step needs some observation here
|
||||
self.save_screenshot(screenshot_type='selenium', append_name='step4')
|
||||
# step 5
|
||||
self.driver.find_element_by_partial_link_text('Packages (').click()
|
||||
head_list = self.get_table_head_text('otable')
|
||||
head_checklist = ['Version', 'Size']
|
||||
for item in head_checklist:
|
||||
self.assertTrue(item in head_list, msg=("%s should be in head list" % item))
|
||||
# step 6
|
||||
self.driver.find_element_by_partial_link_text('Build dependencies (').click()
|
||||
# the dependencies number may vary(even 0), so screenshot here
|
||||
self.save_screenshot(screenshot_type='selenium', append_name='step6')
|
||||
self.driver.find_element_by_partial_link_text('Reverse build dependencies (').click()
|
||||
self.save_screenshot(screenshot_type='selenium', append_name='step7')
|
||||
# step 8
|
||||
self.find_element_by_link_text_in_table('breadcrumb', "Recipes").click()
|
||||
# in case that gdbm doesn't appear on the first page, we use "search"
|
||||
self.driver.find_element_by_id("search").clear()
|
||||
self.driver.find_element_by_id("search").send_keys("gdbm")
|
||||
self.driver.find_element_by_id("search-button").click()
|
||||
self.driver.find_element_by_link_text("gdbm").click()
|
||||
# step 9
|
||||
self.driver.find_element_by_partial_link_text('Packages (').click()
|
||||
# below are different from the contents described in testcase web
|
||||
# page, so .. screenshot again
|
||||
self.save_screenshot(screenshot_type='selenium', append_name='step9')
|
||||
self.driver.find_element_by_partial_link_text('Build dependencies (').click()
|
||||
self.save_screenshot(screenshot_type='selenium', append_name='step10')
|
||||
self.driver.find_element_by_partial_link_text('Reverse build dependencies (').click()
|
||||
self.save_screenshot(screenshot_type='selenium', append_name='step11')
|
||||
|
||||
|
||||
##############
|
||||
@@ -1371,24 +1230,24 @@ class toaster_cases(toaster_cases_base):
|
||||
self.driver.maximize_window()
|
||||
self.driver.get(self.base_url)
|
||||
self.driver.find_element_by_link_text("core-image-minimal").click()
|
||||
# step 3
|
||||
# step 3
|
||||
self.find_element_by_link_text_in_table('nav', 'Configuration').click()
|
||||
self.driver.find_element_by_link_text("BitBake variables").click()
|
||||
# step 4
|
||||
# step 4
|
||||
self.driver.find_element_by_id("search").clear()
|
||||
self.driver.find_element_by_id("search").send_keys("lib")
|
||||
self.driver.find_element_by_id("search-button").click()
|
||||
# save screen to see result
|
||||
self.browser_delay()
|
||||
self.save_screenshot(screenshot_type='selenium', append_name='step4')
|
||||
# step 5
|
||||
# step 5
|
||||
self.driver.find_element_by_css_selector("i.icon-remove").click()
|
||||
head_list = self.get_table_head_text('otable')
|
||||
print head_list
|
||||
print len(head_list)
|
||||
self.assertTrue(head_list == ['Variable', 'Value', 'Set in file', 'Description'], \
|
||||
msg=("head row contents wrong"))
|
||||
# step 8
|
||||
# step 8
|
||||
# search other string. and click "Variable" to re-sort, check if table
|
||||
# head is still the same
|
||||
self.driver.find_element_by_id("search").clear()
|
||||
@@ -1413,17 +1272,17 @@ class toaster_cases(toaster_cases_base):
|
||||
self.driver.maximize_window()
|
||||
self.driver.get(self.base_url)
|
||||
self.driver.find_element_by_link_text("core-image-minimal").click()
|
||||
# step 2-3
|
||||
# step 2-3
|
||||
self.find_element_by_link_text_in_table('nav', 'Configuration').click()
|
||||
self.driver.find_element_by_link_text("BitBake variables").click()
|
||||
variable_list = self.get_table_column_text('class', 'variable_name')
|
||||
self.assertTrue(is_list_sequenced(variable_list), msg=("list not in order"))
|
||||
# step 4
|
||||
# step 4
|
||||
self.find_element_by_link_text_in_table('otable', 'Variable').click()
|
||||
variable_list = self.get_table_column_text('class', 'variable_name')
|
||||
self.assertTrue(is_list_inverted(variable_list), msg=("list not inverted"))
|
||||
self.find_element_by_link_text_in_table('otable', 'Variable').click()
|
||||
# step 5
|
||||
# step 5
|
||||
# searching won't change the sequentiality
|
||||
self.driver.find_element_by_id("search").clear()
|
||||
self.driver.find_element_by_id("search").send_keys("lib")
|
||||
@@ -1489,12 +1348,12 @@ class toaster_cases(toaster_cases_base):
|
||||
self.driver.maximize_window()
|
||||
self.driver.get(self.base_url)
|
||||
self.driver.find_element_by_link_text("core-image-minimal").click()
|
||||
# Step 2-3
|
||||
# Step 2-3
|
||||
self.find_element_by_link_text_in_table('nav', 'Packages').click()
|
||||
check_head_list = ['Package', 'Package version', 'Size', 'Recipe']
|
||||
head_list = self.get_table_head_text('otable')
|
||||
self.assertTrue(head_list == check_head_list, msg=("head row not as expected"))
|
||||
# Step 4
|
||||
# Step 4
|
||||
# pulldown menu
|
||||
option_ids = ['recipe__layer_version__layer__name', 'recipe__layer_version__branch', \
|
||||
'recipe__layer_version__layer__commit', 'license', 'recipe__version']
|
||||
@@ -1626,8 +1485,8 @@ class toaster_cases(toaster_cases_base):
|
||||
self.driver.back()
|
||||
self.driver.find_element_by_link_text("Configuration").click()
|
||||
otable_head_text = self.get_table_head_text()
|
||||
for item in ["Layer", "Layer branch", "Layer commit"]:
|
||||
self.assertTrue(item not in otable_head_text, msg=("item %s should not be in head row" % item))
|
||||
self.assertTrue(self.is_text_present(["Layer", "Layer branch", "Layer commit"]), \
|
||||
msg=("text not in web page"))
|
||||
|
||||
|
||||
##############
|
||||
@@ -1637,29 +1496,36 @@ class toaster_cases(toaster_cases_base):
|
||||
self.case_no = self.get_case_number()
|
||||
self.log.info(' CASE %s log: ' % str(self.case_no))
|
||||
self.driver.maximize_window()
|
||||
for items in ["Packages", "Recipes", "Tasks"]:
|
||||
for item in ["Packages", "Recipes", "Tasks"]:
|
||||
self.driver.get(self.base_url)
|
||||
self.driver.find_element_by_link_text("core-image-minimal").click()
|
||||
self.driver.find_element_by_link_text(items).click()
|
||||
|
||||
# this may be page specific. If future page content changes, try to replace it with new xpath
|
||||
xpath_showrows = "/html/body/div[2]/div/div[2]/div[2]/div[2]/div/div/div[2]/select"
|
||||
xpath_table = "/html/body/div[2]/div/div[2]/div[2]/table/tbody"
|
||||
self.driver.find_element_by_xpath(xpath_showrows).click()
|
||||
rows_displayed = int(self.driver.find_element_by_xpath(xpath_showrows + "/option[2]").text)
|
||||
|
||||
# not sure if this is a Selenium Select bug: If page is not refreshed here, "select(by visible text)" operation will go back to 100-row page
|
||||
# Sure we can use driver.get(url) to refresh page, but since page will vary, we use click link text here
|
||||
self.driver.find_element_by_link_text(items).click()
|
||||
Select(self.driver.find_element_by_css_selector("select.pagesize")).select_by_visible_text(str(rows_displayed))
|
||||
self.assertTrue(self.is_element_present(By.XPATH, xpath_table + "/tr[" + str(rows_displayed) +"]"))
|
||||
self.assertFalse(self.is_element_present(By.XPATH, xpath_table + "/tr[" + str(rows_displayed+1) +"]"))
|
||||
|
||||
self.find_element_by_link_text_in_table('otable', "core-image-minimal").click()
|
||||
self.driver.find_element_by_link_text(item).click()
|
||||
# step 3
|
||||
options = Select(self.driver.find_element_by_css_selector("select.pagesize")).options
|
||||
options_numbers = []
|
||||
for option in options:
|
||||
options_numbers.append(int(option.text))
|
||||
# the default options are : 10 25 50 100 150
|
||||
self.assertTrue(options_numbers==[10, 25, 50, 100, 150], msg=("%s options not as expected" % item))
|
||||
# step 4
|
||||
# in this case it's 50
|
||||
option_tobeselected = options_numbers[2]
|
||||
Select(self.driver.find_element_by_css_selector("select.pagesize")).select_by_index(2)
|
||||
xpath_otable=".//*[@id='otable']/tbody"
|
||||
# examine if the 50th row exists while 51th does not
|
||||
self.assertTrue(self.is_element_present(By.XPATH, xpath_otable + "/tr[" + str(option_tobeselected) +"]"),\
|
||||
msg=("Row %d should exist" %option_tobeselected))
|
||||
self.assertFalse(self.is_element_present(By.XPATH, xpath_otable + "/tr[" + str(option_tobeselected+1) +"]"),\
|
||||
msg=("Row %d should not exist" %(option_tobeselected+1)))
|
||||
# click 1st package, then go back to check if it's still those rows shown.
|
||||
self.driver.find_element_by_xpath(xpath_table + "/tr[1]/td[1]").click()
|
||||
self.driver.find_element_by_link_text(items).click()
|
||||
self.assertTrue(self.is_element_present(By.XPATH, xpath_table + "/tr[" + str(rows_displayed) +"]"))
|
||||
self.assertFalse(self.is_element_present(By.XPATH, xpath_table + "/tr[" + str(rows_displayed+1) +"]"))
|
||||
self.driver.find_element_by_xpath(xpath_otable + "/tr[1]/td[1]/a").click()
|
||||
time.sleep(3)
|
||||
self.driver.find_element_by_link_text(item).click()
|
||||
self.assertTrue(self.is_element_present(By.XPATH, xpath_otable + "/tr[" + str(option_tobeselected) +"]"),\
|
||||
msg=("Row %d should exist" %option_tobeselected))
|
||||
self.assertFalse(self.is_element_present(By.XPATH, xpath_otable + "/tr[" + str(option_tobeselected+1) +"]"),\
|
||||
msg=("Row %d should not exist" %(option_tobeselected+1)))
|
||||
|
||||
|
||||
|
||||
##############
|
||||
|
||||
Reference in New Issue
Block a user