diff options
author | Mihail Stanciu <stanciux.mihail@intel.com> | 2015-08-19 14:29:24 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-08-19 18:01:03 +0100 |
commit | d8c37780609571e95edef9a220225927eb94b174 (patch) | |
tree | 786f8876d7cc875ba4037bb089968f1faab9877a | |
parent | baed115081f888e027f92f37e12dc2dd2b874bf0 (diff) | |
download | bitbake-d8c37780609571e95edef9a220225927eb94b174.tar.gz |
toasteruitest: Updated UI tests cases to use dom IDs and 1.9 UI changes
Updated existing tests to use dom IDs where necessary.
Updated tests to use 1.9 specific UI changes:
- removed deprecated columns(log and layer directory)
- changed expected names for table header("Recipe" instead of "Target")
Added tests for TC 942 and 943 which were missing
Removed test for TC 959 which was deprecated under 1.9
Signed-off-by: Mihail Stanciu <stanciux.mihail@intel.com>
Signed-off-by: Michael Wood <michael.g.wood@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rwxr-xr-x | lib/toaster/contrib/tts/toasteruitest/toaster_automation_test.py | 307 |
1 files changed, 133 insertions, 174 deletions
diff --git a/lib/toaster/contrib/tts/toasteruitest/toaster_automation_test.py b/lib/toaster/contrib/tts/toasteruitest/toaster_automation_test.py index 0cb393433..2a2078f08 100755 --- a/lib/toaster/contrib/tts/toasteruitest/toaster_automation_test.py +++ b/lib/toaster/contrib/tts/toasteruitest/toaster_automation_test.py @@ -605,18 +605,16 @@ class toaster_cases(toaster_cases_base): self.driver.maximize_window() self.driver.get(self.base_url) # open all columns - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() + self.driver.find_element_by_id("edit-columns-button").click() # adding explicitly wait for chromedriver..-_- self.browser_delay() - self.driver.find_element_by_id("log").click() - self.browser_delay() self.driver.find_element_by_id("started_on").click() self.browser_delay() self.driver.find_element_by_id("time").click() - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() + self.driver.find_element_by_id("edit-columns-button").click() # dict: {lint text name : actual class name} - table_head_dict = {'Outcome':'outcome', 'Target':'target', 'Machine':'machine', 'Started on':'started_on', 'Completed on':'completed_on', \ - 'Errors':'errors_no', 'Warnings':'warnings_no', 'Time':'time', 'Log':'log'} + table_head_dict = {'Outcome':'outcome', 'Recipe':'target', 'Machine':'machine', 'Started on':'started_on', 'Completed on':'completed_on', \ + 'Errors':'errors_no', 'Warnings':'warnings_no', 'Time':'time'} for key in table_head_dict: try: self.driver.find_element_by_link_text(key).click() @@ -653,7 +651,7 @@ class toaster_cases(toaster_cases_base): print ori_target_column_texts self.driver.find_element_by_id("search").clear() self.driver.find_element_by_id("search").send_keys(pattern) - self.driver.find_element_by_css_selector("button.btn").click() + self.driver.find_element_by_id("search-button").click() new_target_column_texts = self.get_table_column_text("class", "target") # if nothing found, we still count it as "pass" if new_target_column_texts: @@ -673,11 +671,11 @@ class toaster_cases(toaster_cases_base): self.driver.maximize_window() self.driver.get(self.base_url) # when opening a new page, "started_on" is not displayed by default - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() + self.driver.find_element_by_id("edit-columns-button").click() # currently all the delay are for chrome driver -_- self.browser_delay() self.driver.find_element_by_id("started_on").click() - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() + self.driver.find_element_by_id("edit-columns-button").click() # step 4 items = ["Outcome", "Completed on", "Started on", "Failed tasks", "Errors", "Warnings"] for item in items: @@ -711,7 +709,7 @@ class toaster_cases(toaster_cases_base): self.save_screenshot(screenshot_type='selenium', append_name='step6') self.driver.find_element_by_id("search").clear() self.driver.find_element_by_id("search").send_keys("core-image") - self.driver.find_element_by_css_selector("button.btn").click() + self.driver.find_element_by_id("search-button").click() ############## @@ -737,24 +735,24 @@ class toaster_cases(toaster_cases_base): self.driver.find_element_by_id("search").clear() self.driver.find_element_by_id("search").send_keys("busybox") - self.driver.find_element_by_css_selector("button.btn").click() + self.driver.find_element_by_id("search-button").click() self.browser_delay() self.save_screenshot(screenshot_type='selenium', append_name='step5') self.driver.find_element_by_css_selector("i.icon-remove").click() # Save screen here self.save_screenshot(screenshot_type='selenium', append_name='step5_2') - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() + self.driver.find_element_by_id("edit-columns-button").click() self.driver.find_element_by_id("cpu_used").click() self.driver.find_element_by_id("disk_io").click() self.driver.find_element_by_id("task_log").click() self.driver.find_element_by_id("recipe_version").click() self.driver.find_element_by_id("time_taken").click() - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() + self.driver.find_element_by_css_selector("edit-columns-button").click() # The operation is the same as case901 # dict: {lint text name : actual class name} table_head_dict = {'Order':'order', 'Recipe':'recipe_name', 'Task':'task_name', 'Executed':'executed', \ 'Outcome':'outcome', 'Cache attempt':'cache_attempt', 'Time (secs)':'time_taken', 'CPU usage':'cpu_used', \ - 'Disk I/O (ms)':'disk_io', 'Log':'task_log'} + '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 @@ -818,17 +816,17 @@ class toaster_cases(toaster_cases_base): 'Time':{ 'class':'time_taken', 'check_head_list':['Recipe', 'Task', 'Executed', 'Outcome', 'Time (secs)'], - 'check_column_list':['cpu_used', 'cache_attempt', 'disk_io', 'task_log', 'order', 'recipe_version'] + 'check_column_list':['cpu_used', 'cache_attempt', 'disk_io', 'order', 'recipe_version'] }, 'CPU usage':{ 'class':'cpu_used', 'check_head_list':['Recipe', 'Task', 'Executed', 'Outcome', 'CPU usage'], - 'check_column_list':['cache_attempt', 'disk_io', 'task_log', 'order', 'recipe_version', 'time_taken'] + 'check_column_list':['cache_attempt', 'disk_io', 'order', 'recipe_version', 'time_taken'] }, 'Disk I/O':{ 'class':'disk_io', 'check_head_list':['Recipe', 'Task', 'Executed', 'Outcome', 'Disk I/O (ms)'], - 'check_column_list':['cpu_used', 'cache_attempt', 'task_log', 'order', 'recipe_version', 'time_taken'] + 'check_column_list':['cpu_used', 'cache_attempt', 'order', 'recipe_version', 'time_taken'] } } for key in test_dict: @@ -840,10 +838,10 @@ class toaster_cases(toaster_cases_base): column_list = self.get_table_column_text('class', test_dict[key]['class']) self.failUnless(is_list_inverted(column_list)) - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() + self.driver.find_element_by_id("edit-columns-button").click() for item2 in test_dict[key]['check_column_list']: self.driver.find_element_by_id(item2).click() - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() + self.driver.find_element_by_id("edit-columns-button").click() # TBD: save screen here @@ -916,36 +914,35 @@ class toaster_cases(toaster_cases_base): self.driver.find_element_by_id("search").clear() self.driver.find_element_by_id("search").send_keys(test_package1) - self.driver.find_element_by_css_selector("button.btn").click() + self.driver.find_element_by_id("search-button").click() # Save screen here self.save_screenshot(screenshot_type='selenium', append_name='step4') self.driver.find_element_by_css_selector("i.icon-remove").click() self.save_screenshot(screenshot_type='selenium', append_name='step4_2') - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() + self.driver.find_element_by_id("edit-columns-button").click() self.driver.find_element_by_id("depends_on").click() self.driver.find_element_by_id("layer_version__branch").click() self.driver.find_element_by_id("layer_version__layer__commit").click() - self.driver.find_element_by_id("layer_version__local_path").click() self.driver.find_element_by_id("depends_by").click() - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() + self.driver.find_element_by_id("edit-columns-button").click() self.find_element_by_link_text_in_table(self.table_name, 'Recipe').click() # Check the inverted table by Recipe # Recipe doesn't have class name - inverted_tasks_column_count = len(self.driver.find_elements_by_xpath("/html/body/div[2]/div/div[2]/div[2]/table/tbody/tr/td[1]")) - print inverted_tasks_column_count - inverted_column_list = self.get_table_column_text_by_column_number(self.table_name, 1) + #inverted_tasks_column_count = len(self.driver.find_elements_by_xpath("/html/body/div[2]/div/div[2]/div[2]/table/tbody/tr/td[1]")) + #print inverted_tasks_column_count + #inverted_column_list = self.get_table_column_text_by_column_number(self.table_name, 1) #print inverted_column_list - self.driver.find_element_by_xpath("/html/body/div[2]/div/div[2]/div[2]/table/tbody/tr[1]/td[1]/a").click() - self.driver.back() - self.failUnless(is_list_inverted(inverted_column_list)) - self.find_element_by_link_text_in_table(self.table_name, 'Recipe').click() + #self.driver.find_element_by_partial_link_text("zlib").click() + #self.driver.back() + #self.failUnless(is_list_inverted(inverted_column_list)) + #self.find_element_by_link_text_in_table(self.table_name, 'Recipe').click() - table_head_dict = {'Recipe file':'recipe_file', 'Section':'recipe_section', \ + table_head_dict = {'Recipe':'recipe__name', 'Recipe file':'recipe_file', 'Section':'recipe_section', \ 'License':'recipe_license', 'Layer':'layer_version__layer__name', \ - 'Layer branch':'layer_version__branch', 'Layer directory':'layer_version__local_path'} + 'Layer branch':'layer_version__branch'} for key in table_head_dict: 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]) @@ -954,14 +951,14 @@ 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.failUnless(is_list_sequenced(column_list) or is_list_inverted(column_list)) - self.driver.find_element_by_xpath("/html/body/div[2]/div/div[2]/div[2]/table/tbody/tr[1]/td[1]/a").click() + self.driver.find_element_by_partial_link_text("acl").click() self.driver.back() self.failUnless(is_list_sequenced(column_list) or is_list_inverted(column_list)) # Search text box background text is "Search recipes" self.failUnless(self.driver.find_element_by_xpath("//*[@id='searchform']/*[@placeholder='Search recipes']")) self.driver.find_element_by_id("search").clear() self.driver.find_element_by_id("search").send_keys(test_package2) - self.driver.find_element_by_css_selector("button.btn").click() + self.driver.find_element_by_id("search-button").click() column_search_list = self.get_table_column_text("class", table_head_dict[key]) self.failUnless(is_list_sequenced(column_search_list) or is_list_inverted(column_search_list)) self.driver.find_element_by_css_selector("i.icon-remove").click() @@ -969,14 +966,14 @@ 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.failUnless(is_list_sequenced(column_list)) - self.driver.find_element_by_xpath("/html/body/div[2]/div/div[2]/div[2]/table/tbody/tr[1]/td[1]/a").click() + self.driver.find_element_by_partial_link_text("acl").click() self.driver.back() self.failUnless(is_list_sequenced(column_list)) # Search text box background text is "Search recipes" self.failUnless(self.driver.find_element_by_xpath("//*[@id='searchform']/*[@placeholder='Search recipes']")) self.driver.find_element_by_id("search").clear() self.driver.find_element_by_id("search").send_keys(test_package2) - self.driver.find_element_by_css_selector("button.btn").click() + self.driver.find_element_by_id("search-button").click() column_search_list = self.get_table_column_text("class", table_head_dict[key]) self.failUnless(is_list_sequenced(column_search_list)) self.driver.find_element_by_css_selector("i.icon-remove").click() @@ -985,14 +982,17 @@ 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.failUnless(is_list_inverted(column_list)) - self.driver.find_element_by_xpath("/html/body/div[2]/div/div[2]/div[2]/table/tbody/tr[1]/td[1]/a").click() + try: + self.driver.find_element_by_partial_link_text("acl").click() + except: + self.driver.find_element_by_partial_link_text("zlib").click() self.driver.back() self.failUnless(is_list_inverted(column_list)) # Search text box background text is "Search recipes" self.failUnless(self.driver.find_element_by_xpath("//*[@id='searchform']/*[@placeholder='Search recipes']")) self.driver.find_element_by_id("search").clear() self.driver.find_element_by_id("search").send_keys(test_package2) - self.driver.find_element_by_css_selector("button.btn").click() + self.driver.find_element_by_id("search-button").click() column_search_list = self.get_table_column_text("class", table_head_dict[key]) #print column_search_list self.failUnless(is_list_inverted(column_search_list)) @@ -1002,23 +1002,23 @@ class toaster_cases(toaster_cases_base): for key in table_head_dict: print key self.find_element_by_link_text_in_table(self.table_name, key).click() - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() + self.driver.find_element_by_id("edit-columns-button").click() self.driver.find_element_by_id(table_head_dict[key]).click() - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() + self.driver.find_element_by_id("edit-columns-button").click() self.browser_delay() # After hide the column, the default table should be sorted by Recipe - tasks_column_count = len(self.driver.find_elements_by_xpath("/html/body/div[2]/div/div[2]/div[2]/table/tbody/tr/td[1]")) + tasks_column_count = len(self.driver.find_elements_by_partial_link_text("acl")) #print tasks_column_count default_column_list = self.get_table_column_text_by_column_number(self.table_name, 1) #print default_column_list self.failUnless(is_list_sequenced(default_column_list)) - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() + self.driver.find_element_by_id("edit-columns-button").click() self.driver.find_element_by_id("recipe_file").click() self.driver.find_element_by_id("recipe_section").click() self.driver.find_element_by_id("recipe_license").click() self.driver.find_element_by_id("layer_version__layer__name").click() - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() + self.driver.find_element_by_id("edit-columns-button").click() ############## @@ -1034,15 +1034,15 @@ class toaster_cases(toaster_cases_base): # 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_css_selector("button.btn").click() + 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 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("what the hell") - self.driver.find_element_by_css_selector("button.btn").click() + 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() @@ -1066,7 +1066,6 @@ class toaster_cases(toaster_cases_base): self.driver.find_element_by_id("depends_on").click() self.driver.find_element_by_id("layer_version__branch").click() self.driver.find_element_by_id("layer_version__layer__commit").click() - self.driver.find_element_by_id("layer_version__local_path").click() self.driver.find_element_by_id("depends_by").click() self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() # check if columns selected above is shown @@ -1081,7 +1080,6 @@ class toaster_cases(toaster_cases_base): self.driver.find_element_by_id("depends_on").click() self.driver.find_element_by_id("layer_version__branch").click() self.driver.find_element_by_id("layer_version__layer__commit").click() - self.driver.find_element_by_id("layer_version__local_path").click() self.driver.find_element_by_id("depends_by").click() self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() # don't exist any more @@ -1105,11 +1103,11 @@ class toaster_cases(toaster_cases_base): for item in ['Recipe', 'Recipe version', 'Recipe file', 'Section', 'License', 'Layer']: self.failUnless(item in head_list) # step 4 - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() + self.driver.find_element_by_id("edit-columns-button").click() # save screen self.browser_delay() self.save_screenshot(screenshot_type='selenium', append_name='step4') - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() + self.driver.find_element_by_id("edit-columns-button").click() ############## @@ -1308,7 +1306,7 @@ class toaster_cases(toaster_cases_base): # 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_css_selector("button.btn").click() + 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') @@ -1323,7 +1321,7 @@ class toaster_cases(toaster_cases_base): # head is still the same self.driver.find_element_by_id("search").clear() self.driver.find_element_by_id("search").send_keys("poky") - self.driver.find_element_by_css_selector("button.btn").click() + self.driver.find_element_by_id("search-button").click() self.find_element_by_link_text_in_table('otable', 'Variable').click() head_list = self.get_table_head_text('otable') self.failUnless(head_list == ['Variable', 'Value', 'Set in file', 'Description']) @@ -1355,7 +1353,7 @@ class toaster_cases(toaster_cases_base): # searching won't change the sequentiality self.driver.find_element_by_id("search").clear() self.driver.find_element_by_id("search").send_keys("lib") - self.driver.find_element_by_css_selector("button.btn").click() + self.driver.find_element_by_id("search-button").click() variable_list = self.get_table_column_text('class', 'variable_name') self.failUnless(is_list_sequenced(variable_list)) @@ -1373,11 +1371,11 @@ class toaster_cases(toaster_cases_base): c_list = self.get_table_column_text('class', 'completed_on') self.failUnless(is_list_inverted(c_list)) # step 3 - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() + self.driver.find_element_by_id("edit-columns-button").click() self.driver.find_element_by_id("started_on").click() self.driver.find_element_by_id("log").click() self.driver.find_element_by_id("time").click() - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() + self.driver.find_element_by_id("edit-columns-button").click() head_list = self.get_table_head_text('otable') for item in ['Outcome', 'Target', 'Machine', 'Started on', 'Completed on', 'Failed tasks', 'Errors', 'Warnings', 'Warnings', 'Time']: self.failUnless(item in head_list) @@ -1399,9 +1397,9 @@ class toaster_cases(toaster_cases_base): # click Errors , order in "Completed on" should be disturbed. Then hide # error column to check if order in "Completed on" can be restored self.find_element_by_link_text_in_table('otable', 'Errors').click() - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() + self.driver.find_element_by_id("edit-columns-button").click() self.driver.find_element_by_id("errors_no").click() - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() + self.driver.find_element_by_id("edit-columns-button").click() # Note: without time.sleep here, there'll be unpredictable error..TBD time.sleep(1) c_list = self.get_table_column_text('class', 'completed_on') @@ -1425,13 +1423,12 @@ class toaster_cases(toaster_cases_base): # Step 4 # pulldown menu option_ids = ['recipe__layer_version__layer__name', 'recipe__layer_version__branch', \ - 'recipe__layer_version__layer__commit', 'recipe__layer_version__local_path', \ - 'license', 'recipe__version'] - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() + 'recipe__layer_version__layer__commit', 'license', 'recipe__version'] + self.driver.find_element_by_id("edit-columns-button").click() for item in option_ids: if not self.driver.find_element_by_id(item).is_selected(): self.driver.find_element_by_id(item).click() - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() + self.driver.find_element_by_id("edit-columns-button").click() # save screen here to observe that 'Package' and 'Package version' is # not selectable self.browser_delay() @@ -1456,6 +1453,44 @@ class toaster_cases(toaster_cases_base): ############## + # CASE 942 # + ############## + def test_942(self): + self.case_no = self.get_case_number() + self.log.info(' CASE %s log: ' % str(self.case_no)) + self.driver.maximize_window() + self.driver.get(self.base_url) + self.driver.find_element_by_link_text("core-image-minimal").click() + self.driver.find_element_by_link_text("Packages").click() + #get initial table header + head_list = self.get_table_head_text('otable') + #remove the Recipe column from table header + self.driver.find_element_by_id("edit-columns-button").click() + self.driver.find_element_by_id("recipe__name").click() + self.driver.find_element_by_id("edit-columns-button").click() + #get modified table header + new_head = self.get_table_head_text('otable') + self.failUnless(head_list > new_head) + + ############## + # CASE 943 # + ############## + def test_943(self): + self.case_no = self.get_case_number() + self.log.info(' CASE %s log: ' % str(self.case_no)) + self.driver.maximize_window() + self.driver.get(self.base_url) + self.driver.find_element_by_link_text("core-image-minimal").click() + self.driver.find_element_by_link_text("Packages").click() + #search for the "bash" package -> this should definitely be present + self.driver.find_element_by_id("search").clear() + self.driver.find_element_by_id("search").send_keys("bash") + self.driver.find_element_by_id("search-button").click() + #check for the search result message "XX packages found" + self.failUnless(self.is_text_present("packages found")) + + + ############## # CASE 944 # ############## def test_944(self): @@ -1467,57 +1502,54 @@ class toaster_cases(toaster_cases_base): # step 1: test Recipes page stuff self.driver.find_element_by_link_text("Recipes").click() # for these 3 items, default status is not-checked - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() + self.driver.find_element_by_id("edit-columns-button").click() self.driver.find_element_by_id("layer_version__branch").click() self.driver.find_element_by_id("layer_version__layer__commit").click() - self.driver.find_element_by_id("layer_version__local_path").click() - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() + self.driver.find_element_by_id("edit-columns-button").click() # otable is the recipes table here otable_head_text = self.get_table_head_text('otable') for item in ["Layer", "Layer branch", "Layer commit", "Layer directory"]: self.failIf(item not in otable_head_text) # click the fist recipe, whatever it is self.get_table_element("otable", 1, 1).click() - self.failUnless(self.is_text_present(["Layer", "Layer branch", "Layer commit", "Layer directory", "Recipe file"])) + self.failUnless(self.is_text_present(["Layer", "Layer branch", "Layer commit", "Recipe file"])) # step 2: test Packages page stuff. almost same as above self.driver.back() self.browser_delay() self.driver.find_element_by_link_text("Packages").click() - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() + self.driver.find_element_by_id("edit-columns-button").click() self.driver.find_element_by_id("recipe__layer_version__layer__name").click() self.driver.find_element_by_id("recipe__layer_version__branch").click() self.driver.find_element_by_id("recipe__layer_version__layer__commit").click() - self.driver.find_element_by_id("recipe__layer_version__local_path").click() - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() + self.driver.find_element_by_id("edit-columns-button").click() otable_head_text = self.get_table_head_text("otable") - for item in ["Layer", "Layer branch", "Layer commit", "Layer directory"]: + for item in ["Layer", "Layer branch", "Layer commit"]: self.failIf(item not in otable_head_text) # click the fist recipe, whatever it is self.get_table_element("otable", 1, 1).click() - self.failUnless(self.is_text_present(["Layer", "Layer branch", "Layer commit", "Layer directory"])) + self.failUnless(self.is_text_present(["Layer", "Layer branch", "Layer commit"])) # step 3: test Packages core-image-minimal(images) stuff. almost same as above. Note when future element-id changes... self.driver.back() self.driver.find_element_by_link_text("core-image-minimal").click() - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() + self.driver.find_element_by_id("edit-columns-button").click() self.driver.find_element_by_id("layer_name").click() self.driver.find_element_by_id("layer_branch").click() self.driver.find_element_by_id("layer_commit").click() - self.driver.find_element_by_id("layer_directory").click() - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() + self.driver.find_element_by_id("edit-columns-button").click() otable_head_text = self.get_table_head_text("otable") - for item in ["Layer", "Layer branch", "Layer commit", "Layer directory"]: + for item in ["Layer", "Layer branch", "Layer commit"]: self.failIf(item not in otable_head_text) # click the fist recipe, whatever it is self.get_table_element("otable", 1, 1).click() - self.failUnless(self.is_text_present(["Layer", "Layer branch", "Layer commit", "Layer directory"])) + self.failUnless(self.is_text_present(["Layer", "Layer branch", "Layer commit"])) # step 4: check Configuration page 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", "Layer directory"]: + for item in ["Layer", "Layer branch", "Layer commit"]: self.failIf(item not in otable_head_text) @@ -1568,7 +1600,7 @@ class toaster_cases(toaster_cases_base): for item in check_list: if not self.is_element_present(how=By.LINK_TEXT, what=item): self.log.error("%s not found" %item) - if not self.is_text_present(['Layers', 'Layer', 'Layer branch', 'Layer commit', 'Layer directory']): + if not self.is_text_present(['Layers', 'Layer', 'Layer branch', 'Layer commit']): self.log.error("text not found") # step 5 self.driver.find_element_by_link_text("BitBake variables").click() @@ -1579,18 +1611,24 @@ class toaster_cases(toaster_cases_base): temp_element = self.find_element_by_text_in_table('otable', "Set in file") temp_element.find_element_by_xpath("..//*/a/i[@class='icon-filter filtered']").click() self.browser_delay() - self.driver.find_element_by_xpath("(//input[@name='filter'])[2]").click() - self.driver.find_element_by_css_selector("button.btn.btn-primary").click() + self.driver.find_element_by_xpath("(//input[@name='filter'])[3]").click() + btns = self.driver.find_elements_by_css_selector("button.btn.btn-primary") + for btn in btns: + try: + btn.click() + break + except: + pass # save screen here self.browser_delay() self.save_screenshot(screenshot_type='selenium', append_name='step6') - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() + self.driver.find_element_by_id("edit-columns-button").click() # save screen here # step 7 # we should manually check the step 6-8 result using screenshot self.browser_delay() self.save_screenshot(screenshot_type='selenium', append_name='step7') - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() + self.driver.find_element_by_id("edit-columns-button").click() # step 9 # click the 1st item, no matter what it is self.driver.find_element_by_xpath("//*[@id='otable']/tbody/tr[1]/td[1]/a").click() @@ -1602,7 +1640,7 @@ class toaster_cases(toaster_cases_base): if item not in element.text: self.log.error("%s not found" %item) # any better way to close this pop-up? ... TBD - element.find_element_by_xpath(".//*[@class='close']").click() + element.find_element_by_class_name("close").click() # step 10 : need to manually check "Yocto Manual" in saved screen self.driver.find_element_by_css_selector("i.icon-share.get-info").click() # save screen here @@ -1627,20 +1665,20 @@ class toaster_cases(toaster_cases_base): # return xpath of options under "Edit columns" button return self.shortest_xpath('id', 'navTab') + self.shortest_xpath('id', 'editcol') \ + self.shortest_xpath('id', column_name) - self.find_element_by_xpath_in_table('navTab', self.shortest_xpath('class', 'btn dropdown-toggle')).click() + self.driver.find_element_by_id('edit-columns-button').click() # by default, option "Description" and "Set in file" were checked self.driver.find_element_by_xpath(xpath_option('description')).click() self.driver.find_element_by_xpath(xpath_option('file')).click() - self.find_element_by_xpath_in_table('navTab', self.shortest_xpath('class', 'btn dropdown-toggle')).click() + self.driver.find_element_by_id('edit-columns-button').click() check_list = ['Description', 'Set in file'] head_list = self.get_table_head_text('otable') for item in check_list: self.failIf(item in head_list) # check these 2 options and verify again - self.find_element_by_xpath_in_table('navTab', self.shortest_xpath('class', 'btn dropdown-toggle')).click() + self.driver.find_element_by_id('edit-columns-button').click() self.driver.find_element_by_xpath(xpath_option('description')).click() self.driver.find_element_by_xpath(xpath_option('file')).click() - self.find_element_by_xpath_in_table('navTab', self.shortest_xpath('class', 'btn dropdown-toggle')).click() + self.driver.find_element_by_id('edit-columns-button').click() head_list = self.get_table_head_text('otable') for item in check_list: self.failUnless(item in head_list) @@ -1657,66 +1695,15 @@ class toaster_cases(toaster_cases_base): self.driver.find_element_by_link_text("core-image-minimal").click() self.find_element_by_link_text_in_table('nav', 'Configuration').click() self.driver.find_element_by_link_text("BitBake variables").click() - number_before_search = list() - number_after_search = list() - # step 3 - # temp_dict -- filter string : filter name in firepath - temp_dict = {'Set in file':'filter_vhistory__file_name', 'Description':'filter_description'} - count = 0 - for key in temp_dict: - try: - temp_element = self.find_element_by_text_in_table('otable', key) - temp_element.find_element_by_xpath("..//*[@class='icon-filter filtered']").click() - # delay here. otherwise it won't get correct "text" we need. - # TBD - time.sleep(1) - # step 4-5, we need to make sure that "search" manipulation - # does reduce the number in the filter. - # in this case, text returned will be "All variables (xxx)" - temp_text = self.driver.find_element_by_xpath("//*[@id='" + temp_dict[key] + "']//*[@class='radio']").text - number_list = extract_number_from_string(temp_text) - print number_list - # probably we only need the first number. in this case. - number_before_search.append(eval(number_list[0])) - count +=1 - # how we locate the close button - self.driver.find_element_by_xpath("//*[@id='" + temp_dict[key] + "']//*[@class='close']").click() - self.browser_delay() - except Exception,e: - self.log.error(e) - raise + #get number of variables visible by default + number_before_search = self.driver.find_element_by_class_name('page-header').text # search for a while... self.driver.find_element_by_id("search").clear() self.driver.find_element_by_id("search").send_keys("BB") - self.driver.find_element_by_css_selector("button.btn").click() - # same operation as above, only to get the new numbers in the filter - count = 0 - for key in temp_dict: - try: - temp_element = self.find_element_by_text_in_table('otable', key) - temp_element.find_element_by_xpath("..//*[@class='icon-filter filtered']").click() - time.sleep(1) - # in this case, text returned will be "All variables (xxx)" - temp_text = self.driver.find_element_by_xpath("//*[@id='" + temp_dict[key] + "']//*[@class='radio']").text - number_list = extract_number_from_string(temp_text) - # probably we only need the first number. in this case. - number_after_search.append(eval(number_list[0])) - count += 1 - # how we locate the close button - self.driver.find_element_by_xpath("//*[@id='" + temp_dict[key] + "']//*[@class='close']").click() - self.browser_delay() - except Exception,e: - self.log.error(e) - raise - for i in range(0, count): - print i - print number_after_search[i] - print number_before_search[i] - if number_after_search[i] < number_before_search[i]: - self.log.info("After search, filter number reduces") - else: - self.log.error("Error: After search, filter number doesn't reduce") - self.failIf(True) + self.driver.find_element_by_id("search-button").click() + #get number of variables visible after search + number_after_search = self.driver.find_element_by_class_name('page-header').text + self.failUnless(number_before_search > number_after_search) ############## @@ -1741,11 +1728,11 @@ class toaster_cases(toaster_cases_base): for item in ['Package', 'Package version', 'Size', 'Dependencies', 'Reverse dependencies', 'Recipe']: self.failUnless(item in head_list) # step 5-6 - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() + self.driver.find_element_by_id("edit-columns-button").click() selectable_class = 'checkbox' # minimum-table : means unselectable items unselectable_class = 'checkbox muted' - selectable_check_list = ['Dependencies', 'Layer', 'Layer branch', 'Layer commit', 'Layer directory', \ + selectable_check_list = ['Dependencies', 'Layer', 'Layer branch', 'Layer commit', \ 'License', 'Recipe', 'Recipe version', 'Reverse dependencies', \ 'Size', 'Size over total (%)'] unselectable_check_list = ['Package', 'Package version'] @@ -1766,7 +1753,7 @@ class toaster_cases(toaster_cases_base): if item not in unselectable_list: self.log.error(" %s not found in dropdown menu \n" % item) self.failIf(True) - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() + self.driver.find_element_by_id("edit-columns-button").click() # step 7 self.driver.find_element_by_partial_link_text("Directory structure").click() head_list = self.get_table_head_text('dirtable') @@ -1894,31 +1881,3 @@ class toaster_cases(toaster_cases_base): self.log.error("please check [Toaster manual] link on page") self.failIf(True) - - ############## - # CASE 959 # - ############## - def test_959(self): - self.case_no = self.get_case_number() - self.log.info(' CASE %s log: ' % str(self.case_no)) - self.driver.maximize_window() - self.driver.get(self.base_url) - self.driver.find_element_by_link_text("core-image-minimal").click() - # step 2-3 - self.find_element_by_link_text_in_table('nav', 'Tasks').click() - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() - self.driver.find_element_by_id("task_log").click() - self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() - # step 4: "Not Executed" tasks have no log. So click "Log"... - self.find_element_by_link_text_in_table('otable', 'Log').click() - # save screen to see if there's "absolute path" of logs - self.browser_delay() - self.save_screenshot(screenshot_type='selenium', append_name='step4_1') - self.find_element_by_link_text_in_table('otable', 'Log').click() - # save screen to see if there's "absolute path" of logs - self.browser_delay() - self.save_screenshot(screenshot_type='selenium', append_name='step4_2') - - - - |