diff options
author | Ke Zou <ke.zou@windriver.com> | 2015-09-23 15:18:11 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-09-23 22:44:54 +0100 |
commit | 4c0320ffc06fa0fcae2976a8c7c997fc0c823674 (patch) | |
tree | d48236436a2ed8fca27b0bd91e04dedd19fac0a8 /bitbake | |
parent | 4c5af777ea88ee82e34a6730f69d8550bbc6f8dd (diff) | |
download | poky-4c0320ffc06fa0fcae2976a8c7c997fc0c823674.tar.gz |
bitbake: toaster: UI test improvements
* Add decorator in logging mechanism
* Add more debug information
(Bitbake rev: ab94f4bbef38d23e7e8be0663781eaecf84f0172)
Signed-off-by: Ke Zou <ke.zou@windriver.com>
Signed-off-by: Stanciu Mihail <stanciux.mihail@intel.com>
Signed-off-by: Elliot Smith <elliot.smith@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake')
-rwxr-xr-x | bitbake/lib/toaster/contrib/tts/toasteruitest/toaster_automation_test.py | 270 |
1 files changed, 167 insertions, 103 deletions
diff --git a/bitbake/lib/toaster/contrib/tts/toasteruitest/toaster_automation_test.py b/bitbake/lib/toaster/contrib/tts/toasteruitest/toaster_automation_test.py index edd699bd3d..eac167b2e5 100755 --- a/bitbake/lib/toaster/contrib/tts/toasteruitest/toaster_automation_test.py +++ b/bitbake/lib/toaster/contrib/tts/toasteruitest/toaster_automation_test.py | |||
@@ -221,6 +221,68 @@ def extract_number_from_string(s): | |||
221 | """ | 221 | """ |
222 | return re.findall(r'([0-9]+)', s) | 222 | return re.findall(r'([0-9]+)', s) |
223 | 223 | ||
224 | # Below is decorator derived from toaster backend test code | ||
225 | class NoParsingFilter(logging.Filter): | ||
226 | def filter(self, record): | ||
227 | return record.levelno == 100 | ||
228 | |||
229 | def LogResults(original_class): | ||
230 | orig_method = original_class.run | ||
231 | |||
232 | #rewrite the run method of unittest.TestCase to add testcase logging | ||
233 | def run(self, result, *args, **kws): | ||
234 | orig_method(self, result, *args, **kws) | ||
235 | passed = True | ||
236 | testMethod = getattr(self, self._testMethodName) | ||
237 | |||
238 | #if test case is decorated then use it's number, else use it's name | ||
239 | try: | ||
240 | test_case = testMethod.test_case | ||
241 | except AttributeError: | ||
242 | test_case = self._testMethodName | ||
243 | |||
244 | #create custom logging level for filtering. | ||
245 | custom_log_level = 100 | ||
246 | logging.addLevelName(custom_log_level, 'RESULTS') | ||
247 | caller = os.path.basename(sys.argv[0]) | ||
248 | |||
249 | def results(self, message, *args, **kws): | ||
250 | if self.isEnabledFor(custom_log_level): | ||
251 | self.log(custom_log_level, message, *args, **kws) | ||
252 | logging.Logger.results = results | ||
253 | |||
254 | logging.basicConfig(filename=os.path.join(os.getcwd(),'results-'+caller+'.log'), | ||
255 | filemode='w', | ||
256 | format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', | ||
257 | datefmt='%H:%M:%S', | ||
258 | level=custom_log_level) | ||
259 | for handler in logging.root.handlers: | ||
260 | handler.addFilter(NoParsingFilter()) | ||
261 | # local_log = logging.getLogger(caller) | ||
262 | local_log = logging.getLogger() | ||
263 | |||
264 | #check status of tests and record it | ||
265 | for (name, msg) in result.errors: | ||
266 | if self._testMethodName == str(name).split(' ')[0]: | ||
267 | local_log.results("Testcase "+str(test_case)+": ERROR") | ||
268 | local_log.results("Testcase "+str(test_case)+":\n"+msg+"\n\n\n") | ||
269 | passed = False | ||
270 | for (name, msg) in result.failures: | ||
271 | if self._testMethodName == str(name).split(' ')[0]: | ||
272 | local_log.results("Testcase "+str(test_case)+": FAILED") | ||
273 | local_log.results("Testcase "+str(test_case)+":\n"+msg+"\n\n\n") | ||
274 | passed = False | ||
275 | for (name, msg) in result.skipped: | ||
276 | if self._testMethodName == str(name).split(' ')[0]: | ||
277 | local_log.results("Testcase "+str(test_case)+": SKIPPED"+"\n\n\n") | ||
278 | passed = False | ||
279 | if passed: | ||
280 | local_log.results("Testcase "+str(test_case)+": PASSED"+"\n\n\n") | ||
281 | |||
282 | original_class.run = run | ||
283 | return original_class | ||
284 | |||
285 | |||
224 | 286 | ||
225 | 287 | ||
226 | ########################################### | 288 | ########################################### |
@@ -534,6 +596,7 @@ class toaster_cases_base(unittest.TestCase): | |||
534 | def is_text_present (self, patterns): | 596 | def is_text_present (self, patterns): |
535 | for pattern in patterns: | 597 | for pattern in patterns: |
536 | if str(pattern) not in self.driver.page_source: | 598 | if str(pattern) not in self.driver.page_source: |
599 | print pattern | ||
537 | return False | 600 | return False |
538 | return True | 601 | return True |
539 | 602 | ||
@@ -595,7 +658,7 @@ class toaster_cases_base(unittest.TestCase): | |||
595 | # Note: to comply with the unittest framework, we call these test_xxx functions | 658 | # Note: to comply with the unittest framework, we call these test_xxx functions |
596 | # from run_toastercases.py to avoid calling setUp() and tearDown() multiple times | 659 | # from run_toastercases.py to avoid calling setUp() and tearDown() multiple times |
597 | 660 | ||
598 | 661 | @LogResults | |
599 | class toaster_cases(toaster_cases_base): | 662 | class toaster_cases(toaster_cases_base): |
600 | ############## | 663 | ############## |
601 | # CASE 901 # | 664 | # CASE 901 # |
@@ -630,12 +693,12 @@ class toaster_cases(toaster_cases_base): | |||
630 | if is_list_inverted(column_list): | 693 | if is_list_inverted(column_list): |
631 | self.driver.find_element_by_link_text(key).click() | 694 | self.driver.find_element_by_link_text(key).click() |
632 | column_list = self.get_table_column_text("class", table_head_dict[key]) | 695 | column_list = self.get_table_column_text("class", table_head_dict[key]) |
633 | self.failUnless(is_list_sequenced(column_list)) | 696 | self.assertTrue(is_list_sequenced(column_list), msg=("%s column not in order" % key)) |
634 | else: | 697 | else: |
635 | self.failUnless(is_list_sequenced(column_list)) | 698 | self.assertTrue(is_list_sequenced(column_list), msg=("%s column not sequenced" % key)) |
636 | self.driver.find_element_by_link_text(key).click() | 699 | self.driver.find_element_by_link_text(key).click() |
637 | column_list = self.get_table_column_text("class", table_head_dict[key]) | 700 | column_list = self.get_table_column_text("class", table_head_dict[key]) |
638 | self.failUnless(is_list_inverted(column_list)) | 701 | self.assertTrue(is_list_inverted(column_list), msg=("%s column not inverted" % key)) |
639 | self.log.info("case passed") | 702 | self.log.info("case passed") |
640 | 703 | ||
641 | 704 | ||
@@ -659,10 +722,10 @@ class toaster_cases(toaster_cases_base): | |||
659 | # if nothing found, we still count it as "pass" | 722 | # if nothing found, we still count it as "pass" |
660 | if new_target_column_texts: | 723 | if new_target_column_texts: |
661 | for text in new_target_column_texts: | 724 | for text in new_target_column_texts: |
662 | self.failUnless(text.find(pattern)) | 725 | self.assertTrue(text.find(pattern), msg=("%s item doesn't exist " % pattern)) |
663 | self.driver.find_element_by_css_selector("i.icon-remove").click() | 726 | self.driver.find_element_by_css_selector("i.icon-remove").click() |
664 | target_column_texts = self.get_table_column_text("class", "target") | 727 | target_column_texts = self.get_table_column_text("class", "target") |
665 | self.failUnless(ori_target_column_texts == target_column_texts) | 728 | self.assertTrue(ori_target_column_texts == target_column_texts, msg=("builds changed after operations")) |
666 | 729 | ||
667 | 730 | ||
668 | ############## | 731 | ############## |
@@ -685,10 +748,9 @@ class toaster_cases(toaster_cases_base): | |||
685 | try: | 748 | try: |
686 | temp_element = self.find_element_by_text_in_table('otable', item) | 749 | temp_element = self.find_element_by_text_in_table('otable', item) |
687 | # this is how we find "filter icon" in the same level as temp_element(where "a" means clickable, "i" means icon) | 750 | # this is how we find "filter icon" in the same level as temp_element(where "a" means clickable, "i" means icon) |
688 | self.failUnless(temp_element.find_element_by_xpath("..//*/a/i[@class='icon-filter filtered']")) | 751 | self.assertTrue(temp_element.find_element_by_xpath("..//*/a/i[@class='icon-filter filtered']")) |
689 | except Exception,e: | 752 | except Exception,e: |
690 | self.log.error(" %s cannot be found! %s" % (item, e)) | 753 | self.assertFalse(True, msg=(" %s cannot be found! %s" % (item, e))) |
691 | self.failIf(True) | ||
692 | raise | 754 | raise |
693 | # step 5-6 | 755 | # step 5-6 |
694 | temp_element = self.find_element_by_link_text_in_table('otable', 'Outcome') | 756 | temp_element = self.find_element_by_link_text_in_table('otable', 'Outcome') |
@@ -731,10 +793,12 @@ class toaster_cases(toaster_cases_base): | |||
731 | # This is how we find the "default" rows-number! | 793 | # This is how we find the "default" rows-number! |
732 | rows_displayed = int(Select(self.driver.find_element_by_css_selector("select.pagesize")).first_selected_option.text) | 794 | rows_displayed = int(Select(self.driver.find_element_by_css_selector("select.pagesize")).first_selected_option.text) |
733 | print rows_displayed | 795 | print rows_displayed |
734 | self.failUnless(self.get_table_element(self.table_name, rows_displayed)) | 796 | self.assertTrue(self.get_table_element(self.table_name, rows_displayed), msg=("not enough rows displayed")) |
735 | self.failIf(self.get_table_element(self.table_name, rows_displayed + 1)) | 797 | self.assertFalse(self.get_table_element(self.table_name, rows_displayed + 1), \ |
798 | msg=("more rows displayed than expected")) | ||
736 | # Search text box background text is "Search tasks" | 799 | # Search text box background text is "Search tasks" |
737 | self.failUnless(self.driver.find_element_by_xpath("//*[@id='searchform']/*[@placeholder='Search tasks']")) | 800 | self.assertTrue(self.driver.find_element_by_xpath("//*[@id='searchform']/*[@placeholder='Search tasks']"),\ |
801 | msg=("background text doesn't exist")) | ||
738 | 802 | ||
739 | self.driver.find_element_by_id("search").clear() | 803 | self.driver.find_element_by_id("search").clear() |
740 | self.driver.find_element_by_id("search").send_keys("busybox") | 804 | self.driver.find_element_by_id("search").send_keys("busybox") |
@@ -763,22 +827,23 @@ class toaster_cases(toaster_cases_base): | |||
763 | column_list = self.get_table_column_text("class", table_head_dict[key]) | 827 | column_list = self.get_table_column_text("class", table_head_dict[key]) |
764 | # after 1st click, the list should be either sequenced or inverted, but we don't have a "default order" here | 828 | # after 1st click, the list should be either sequenced or inverted, but we don't have a "default order" here |
765 | # the point is, after another click, it should be another order | 829 | # the point is, after another click, it should be another order |
766 | # the fist case is special:this means every item in column_list is the same, so | 830 | # the first case is special:this means every item in column_list is the same, so |
767 | # after one click, either sequenced or inverted will be fine | 831 | # after one click, either sequenced or inverted will be fine |
768 | if (is_list_inverted(column_list) and is_list_sequenced(column_list)) \ | 832 | if (is_list_inverted(column_list) and is_list_sequenced(column_list)) \ |
769 | or (not column_list) : | 833 | or (not column_list) : |
770 | self.find_element_by_link_text_in_table(self.table_name, key).click() | 834 | self.find_element_by_link_text_in_table(self.table_name, key).click() |
771 | column_list = self.get_table_column_text("class", table_head_dict[key]) | 835 | column_list = self.get_table_column_text("class", table_head_dict[key]) |
772 | self.failUnless(is_list_sequenced(column_list) or is_list_inverted(column_list)) | 836 | self.assertTrue(is_list_sequenced(column_list) or is_list_inverted(column_list), \ |
837 | msg=("%s column not in any order" % key)) | ||
773 | elif is_list_inverted(column_list): | 838 | elif is_list_inverted(column_list): |
774 | self.find_element_by_link_text_in_table(self.table_name, key).click() | 839 | self.find_element_by_link_text_in_table(self.table_name, key).click() |
775 | column_list = self.get_table_column_text("class", table_head_dict[key]) | 840 | column_list = self.get_table_column_text("class", table_head_dict[key]) |
776 | self.failUnless(is_list_sequenced(column_list)) | 841 | self.assertTrue(is_list_sequenced(column_list), msg=("%s column not in order" % key)) |
777 | else: | 842 | else: |
778 | self.failUnless(is_list_sequenced(column_list)) | 843 | self.assertTrue(is_list_sequenced(column_list), msg=("%s column not in order" % key)) |
779 | self.find_element_by_link_text_in_table(self.table_name, key).click() | 844 | self.find_element_by_link_text_in_table(self.table_name, key).click() |
780 | column_list = self.get_table_column_text("class", table_head_dict[key]) | 845 | column_list = self.get_table_column_text("class", table_head_dict[key]) |
781 | self.failUnless(is_list_inverted(column_list)) | 846 | self.assertTrue(is_list_inverted(column_list), msg=("%s column not inverted" % key)) |
782 | # step 8-10 | 847 | # step 8-10 |
783 | # filter dict: {link text name : filter table name in xpath} | 848 | # filter dict: {link text name : filter table name in xpath} |
784 | filter_dict = {'Executed':'filter_executed', 'Outcome':'filter_outcome', 'Cache attempt':'filter_cache_attempt'} | 849 | filter_dict = {'Executed':'filter_executed', 'Outcome':'filter_outcome', 'Cache attempt':'filter_cache_attempt'} |
@@ -837,9 +902,9 @@ class toaster_cases(toaster_cases_base): | |||
837 | self.find_element_by_link_text_in_table('nav', key).click() | 902 | self.find_element_by_link_text_in_table('nav', key).click() |
838 | head_list = self.get_table_head_text('otable') | 903 | head_list = self.get_table_head_text('otable') |
839 | for item in test_dict[key]['check_head_list']: | 904 | for item in test_dict[key]['check_head_list']: |
840 | self.failUnless(item in head_list) | 905 | self.assertTrue(item in head_list, msg=("%s not in head row" % item)) |
841 | column_list = self.get_table_column_text('class', test_dict[key]['class']) | 906 | column_list = self.get_table_column_text('class', test_dict[key]['class']) |
842 | self.failUnless(is_list_inverted(column_list)) | 907 | self.assertTrue(is_list_inverted(column_list), msg=("%s column not inverted" % key)) |
843 | 908 | ||
844 | self.driver.find_element_by_id("edit-columns-button").click() | 909 | self.driver.find_element_by_id("edit-columns-button").click() |
845 | for item2 in test_dict[key]['check_column_list']: | 910 | for item2 in test_dict[key]['check_column_list']: |
@@ -865,21 +930,24 @@ class toaster_cases(toaster_cases_base): | |||
865 | self.driver.find_element_by_partial_link_text("Generated files").click() | 930 | self.driver.find_element_by_partial_link_text("Generated files").click() |
866 | head_list = self.get_table_head_text('otable') | 931 | head_list = self.get_table_head_text('otable') |
867 | for item in ['File', 'Size']: | 932 | for item in ['File', 'Size']: |
868 | self.failUnless(item in head_list) | 933 | self.assertTrue(item in head_list, msg=("%s not in head row" % item)) |
869 | c_list = self.get_table_column_text('class', 'path') | 934 | c_list = self.get_table_column_text('class', 'path') |
870 | self.failUnless(is_list_sequenced(c_list)) | 935 | self.assertTrue(is_list_sequenced(c_list), msg=("column not in order")) |
871 | # step 7 | 936 | # step 7 |
872 | self.driver.find_element_by_partial_link_text("Runtime dependencies").click() | 937 | self.driver.find_element_by_partial_link_text("Runtime dependencies").click() |
873 | # save sceen here to observe... | 938 | # save sceen here to observe... |
874 | # note that here table name is not 'otable' | 939 | # note that here table name is not 'otable' |
875 | head_list = self.get_table_head_text('dependencies') | 940 | head_list = self.get_table_head_text('dependencies') |
876 | for item in ['Package', 'Version', 'Size']: | 941 | for item in ['Package', 'Version', 'Size']: |
877 | self.failUnless(item in head_list) | 942 | self.assertTrue(item in head_list, msg=("%s not in head row" % item)) |
878 | c_list = self.get_table_column_text_by_column_number('dependencies', 1) | 943 | c_list = self.get_table_column_text_by_column_number('dependencies', 1) |
879 | self.failUnless(is_list_sequenced(c_list)) | 944 | self.assertTrue(is_list_sequenced(c_list), msg=("list not in order")) |
880 | texts = ['Size', 'License', 'Recipe', 'Recipe version', 'Layer', \ | 945 | texts = ['Size', 'License', 'Recipe', 'Recipe version', 'Layer', \ |
881 | 'Layer branch', 'Layer commit', 'Layer directory'] | 946 | 'Layer branch', 'Layer commit'] |
882 | self.failUnless(self.is_text_present(texts)) | 947 | time.sleep(1) |
948 | # for text in texts: | ||
949 | # self.assertTrue(self.is_text_present(text), msg=("text %s not in page" % text)) | ||
950 | self.assertTrue(self.is_text_present(texts), msg=("text not in page")) | ||
883 | 951 | ||
884 | 952 | ||
885 | ############## | 953 | ############## |
@@ -901,8 +969,8 @@ class toaster_cases(toaster_cases_base): | |||
901 | # This is how we find the "default" rows-number! | 969 | # This is how we find the "default" rows-number! |
902 | rows_displayed = int(Select(self.driver.find_element_by_css_selector("select.pagesize")).first_selected_option.text) | 970 | rows_displayed = int(Select(self.driver.find_element_by_css_selector("select.pagesize")).first_selected_option.text) |
903 | print rows_displayed | 971 | print rows_displayed |
904 | self.failUnless(self.get_table_element(self.table_name, rows_displayed)) | 972 | self.assertTrue(self.get_table_element(self.table_name, rows_displayed)) |
905 | self.failIf(self.get_table_element(self.table_name, rows_displayed + 1)) | 973 | self.assertFalse(self.get_table_element(self.table_name, rows_displayed + 1)) |
906 | 974 | ||
907 | # Check the default table is sorted by Recipe | 975 | # Check the default table is sorted by Recipe |
908 | tasks_column_count = len(self.driver.find_elements_by_xpath("/html/body/div[2]/div/div[2]/div[2]/table/tbody/tr/td[1]")) | 976 | tasks_column_count = len(self.driver.find_elements_by_xpath("/html/body/div[2]/div/div[2]/div[2]/table/tbody/tr/td[1]")) |
@@ -910,10 +978,10 @@ class toaster_cases(toaster_cases_base): | |||
910 | default_column_list = self.get_table_column_text_by_column_number(self.table_name, 1) | 978 | default_column_list = self.get_table_column_text_by_column_number(self.table_name, 1) |
911 | #print default_column_list | 979 | #print default_column_list |
912 | 980 | ||
913 | self.failUnless(is_list_sequenced(default_column_list)) | 981 | self.assertTrue(is_list_sequenced(default_column_list)) |
914 | 982 | ||
915 | # Search text box background text is "Search recipes" | 983 | # Search text box background text is "Search recipes" |
916 | self.failUnless(self.driver.find_element_by_xpath("//*[@id='searchform']/*[@placeholder='Search recipes']")) | 984 | self.assertTrue(self.driver.find_element_by_xpath("//*[@id='searchform']/*[@placeholder='Search recipes']")) |
917 | 985 | ||
918 | self.driver.find_element_by_id("search").clear() | 986 | self.driver.find_element_by_id("search").clear() |
919 | self.driver.find_element_by_id("search").send_keys(test_package1) | 987 | self.driver.find_element_by_id("search").send_keys(test_package1) |
@@ -940,7 +1008,7 @@ class toaster_cases(toaster_cases_base): | |||
940 | 1008 | ||
941 | #self.driver.find_element_by_partial_link_text("zlib").click() | 1009 | #self.driver.find_element_by_partial_link_text("zlib").click() |
942 | #self.driver.back() | 1010 | #self.driver.back() |
943 | #self.failUnless(is_list_inverted(inverted_column_list)) | 1011 | #self.assertTrue(is_list_inverted(inverted_column_list)) |
944 | #self.find_element_by_link_text_in_table(self.table_name, 'Recipe').click() | 1012 | #self.find_element_by_link_text_in_table(self.table_name, 'Recipe').click() |
945 | 1013 | ||
946 | table_head_dict = {'Recipe':'recipe__name', 'Recipe file':'recipe_file', 'Section':'recipe_section', \ | 1014 | table_head_dict = {'Recipe':'recipe__name', 'Recipe file':'recipe_file', 'Section':'recipe_section', \ |
@@ -953,52 +1021,52 @@ class toaster_cases(toaster_cases_base): | |||
953 | or (not column_list) : | 1021 | or (not column_list) : |
954 | self.find_element_by_link_text_in_table(self.table_name, key).click() | 1022 | self.find_element_by_link_text_in_table(self.table_name, key).click() |
955 | column_list = self.get_table_column_text("class", table_head_dict[key]) | 1023 | column_list = self.get_table_column_text("class", table_head_dict[key]) |
956 | self.failUnless(is_list_sequenced(column_list) or is_list_inverted(column_list)) | 1024 | self.assertTrue(is_list_sequenced(column_list) or is_list_inverted(column_list)) |
957 | self.driver.find_element_by_partial_link_text("acl").click() | 1025 | self.driver.find_element_by_partial_link_text("acl").click() |
958 | self.driver.back() | 1026 | self.driver.back() |
959 | self.failUnless(is_list_sequenced(column_list) or is_list_inverted(column_list)) | 1027 | self.assertTrue(is_list_sequenced(column_list) or is_list_inverted(column_list)) |
960 | # Search text box background text is "Search recipes" | 1028 | # Search text box background text is "Search recipes" |
961 | self.failUnless(self.driver.find_element_by_xpath("//*[@id='searchform']/*[@placeholder='Search recipes']")) | 1029 | self.assertTrue(self.driver.find_element_by_xpath("//*[@id='searchform']/*[@placeholder='Search recipes']")) |
962 | self.driver.find_element_by_id("search").clear() | 1030 | self.driver.find_element_by_id("search").clear() |
963 | self.driver.find_element_by_id("search").send_keys(test_package2) | 1031 | self.driver.find_element_by_id("search").send_keys(test_package2) |
964 | self.driver.find_element_by_id("search-button").click() | 1032 | self.driver.find_element_by_id("search-button").click() |
965 | column_search_list = self.get_table_column_text("class", table_head_dict[key]) | 1033 | column_search_list = self.get_table_column_text("class", table_head_dict[key]) |
966 | self.failUnless(is_list_sequenced(column_search_list) or is_list_inverted(column_search_list)) | 1034 | self.assertTrue(is_list_sequenced(column_search_list) or is_list_inverted(column_search_list)) |
967 | self.driver.find_element_by_css_selector("i.icon-remove").click() | 1035 | self.driver.find_element_by_css_selector("i.icon-remove").click() |
968 | elif is_list_inverted(column_list): | 1036 | elif is_list_inverted(column_list): |
969 | self.find_element_by_link_text_in_table(self.table_name, key).click() | 1037 | self.find_element_by_link_text_in_table(self.table_name, key).click() |
970 | column_list = self.get_table_column_text("class", table_head_dict[key]) | 1038 | column_list = self.get_table_column_text("class", table_head_dict[key]) |
971 | self.failUnless(is_list_sequenced(column_list)) | 1039 | self.assertTrue(is_list_sequenced(column_list)) |
972 | self.driver.find_element_by_partial_link_text("acl").click() | 1040 | self.driver.find_element_by_partial_link_text("acl").click() |
973 | self.driver.back() | 1041 | self.driver.back() |
974 | self.failUnless(is_list_sequenced(column_list)) | 1042 | self.assertTrue(is_list_sequenced(column_list)) |
975 | # Search text box background text is "Search recipes" | 1043 | # Search text box background text is "Search recipes" |
976 | self.failUnless(self.driver.find_element_by_xpath("//*[@id='searchform']/*[@placeholder='Search recipes']")) | 1044 | self.assertTrue(self.driver.find_element_by_xpath("//*[@id='searchform']/*[@placeholder='Search recipes']")) |
977 | self.driver.find_element_by_id("search").clear() | 1045 | self.driver.find_element_by_id("search").clear() |
978 | self.driver.find_element_by_id("search").send_keys(test_package2) | 1046 | self.driver.find_element_by_id("search").send_keys(test_package2) |
979 | self.driver.find_element_by_id("search-button").click() | 1047 | self.driver.find_element_by_id("search-button").click() |
980 | column_search_list = self.get_table_column_text("class", table_head_dict[key]) | 1048 | column_search_list = self.get_table_column_text("class", table_head_dict[key]) |
981 | self.failUnless(is_list_sequenced(column_search_list)) | 1049 | self.assertTrue(is_list_sequenced(column_search_list)) |
982 | self.driver.find_element_by_css_selector("i.icon-remove").click() | 1050 | self.driver.find_element_by_css_selector("i.icon-remove").click() |
983 | else: | 1051 | else: |
984 | self.failUnless(is_list_sequenced(column_list)) | 1052 | self.assertTrue(is_list_sequenced(column_list)) |
985 | self.find_element_by_link_text_in_table(self.table_name, key).click() | 1053 | self.find_element_by_link_text_in_table(self.table_name, key).click() |
986 | column_list = self.get_table_column_text("class", table_head_dict[key]) | 1054 | column_list = self.get_table_column_text("class", table_head_dict[key]) |
987 | self.failUnless(is_list_inverted(column_list)) | 1055 | self.assertTrue(is_list_inverted(column_list)) |
988 | try: | 1056 | try: |
989 | self.driver.find_element_by_partial_link_text("acl").click() | 1057 | self.driver.find_element_by_partial_link_text("acl").click() |
990 | except: | 1058 | except: |
991 | self.driver.find_element_by_partial_link_text("zlib").click() | 1059 | self.driver.find_element_by_partial_link_text("zlib").click() |
992 | self.driver.back() | 1060 | self.driver.back() |
993 | self.failUnless(is_list_inverted(column_list)) | 1061 | self.assertTrue(is_list_inverted(column_list)) |
994 | # Search text box background text is "Search recipes" | 1062 | # Search text box background text is "Search recipes" |
995 | self.failUnless(self.driver.find_element_by_xpath("//*[@id='searchform']/*[@placeholder='Search recipes']")) | 1063 | self.assertTrue(self.driver.find_element_by_xpath("//*[@id='searchform']/*[@placeholder='Search recipes']")) |
996 | self.driver.find_element_by_id("search").clear() | 1064 | self.driver.find_element_by_id("search").clear() |
997 | self.driver.find_element_by_id("search").send_keys(test_package2) | 1065 | self.driver.find_element_by_id("search").send_keys(test_package2) |
998 | self.driver.find_element_by_id("search-button").click() | 1066 | self.driver.find_element_by_id("search-button").click() |
999 | column_search_list = self.get_table_column_text("class", table_head_dict[key]) | 1067 | column_search_list = self.get_table_column_text("class", table_head_dict[key]) |
1000 | #print column_search_list | 1068 | #print column_search_list |
1001 | self.failUnless(is_list_inverted(column_search_list)) | 1069 | self.assertTrue(is_list_inverted(column_search_list)) |
1002 | self.driver.find_element_by_css_selector("i.icon-remove").click() | 1070 | self.driver.find_element_by_css_selector("i.icon-remove").click() |
1003 | 1071 | ||
1004 | # Bug 5919 | 1072 | # Bug 5919 |
@@ -1014,7 +1082,7 @@ class toaster_cases(toaster_cases_base): | |||
1014 | #print tasks_column_count | 1082 | #print tasks_column_count |
1015 | default_column_list = self.get_table_column_text_by_column_number(self.table_name, 1) | 1083 | default_column_list = self.get_table_column_text_by_column_number(self.table_name, 1) |
1016 | #print default_column_list | 1084 | #print default_column_list |
1017 | self.failUnless(is_list_sequenced(default_column_list)) | 1085 | self.assertTrue(is_list_sequenced(default_column_list)) |
1018 | 1086 | ||
1019 | self.driver.find_element_by_id("edit-columns-button").click() | 1087 | self.driver.find_element_by_id("edit-columns-button").click() |
1020 | self.driver.find_element_by_id("recipe_file").click() | 1088 | self.driver.find_element_by_id("recipe_file").click() |
@@ -1064,31 +1132,31 @@ class toaster_cases(toaster_cases_base): | |||
1064 | # step 3 | 1132 | # step 3 |
1065 | head_list = self.get_table_head_text('otable') | 1133 | head_list = self.get_table_head_text('otable') |
1066 | for item in ['Recipe', 'Recipe version', 'Recipe file', 'Section', 'License', 'Layer']: | 1134 | for item in ['Recipe', 'Recipe version', 'Recipe file', 'Section', 'License', 'Layer']: |
1067 | self.failUnless(item in head_list) | 1135 | self.assertTrue(item in head_list, msg=("item %s not in head row" % item)) |
1068 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 1136 | self.driver.find_element_by_id("edit-columns-button").click() |
1069 | self.driver.find_element_by_id("depends_on").click() | 1137 | self.driver.find_element_by_id("depends_on").click() |
1070 | self.driver.find_element_by_id("layer_version__branch").click() | 1138 | self.driver.find_element_by_id("layer_version__branch").click() |
1071 | self.driver.find_element_by_id("layer_version__layer__commit").click() | 1139 | self.driver.find_element_by_id("layer_version__layer__commit").click() |
1072 | self.driver.find_element_by_id("depends_by").click() | 1140 | self.driver.find_element_by_id("depends_by").click() |
1073 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 1141 | self.driver.find_element_by_id("edit-columns-button").click() |
1074 | # check if columns selected above is shown | 1142 | # check if columns selected above is shown |
1075 | check_list = ['Dependencies', 'Layer branch', 'Layer commit', 'Layer directory', 'Reverse dependencies'] | 1143 | check_list = ['Dependencies', 'Layer branch', 'Layer commit', 'Reverse dependencies'] |
1076 | head_list = self.get_table_head_text('otable') | 1144 | head_list = self.get_table_head_text('otable') |
1077 | time.sleep(2) | 1145 | time.sleep(2) |
1078 | print head_list | 1146 | print head_list |
1079 | for item in check_list: | 1147 | for item in check_list: |
1080 | self.failUnless(item in head_list) | 1148 | self.assertTrue(item in head_list, msg=("item %s not in head row" % item)) |
1081 | # un-check 'em all | 1149 | # un-check 'em all |
1082 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 1150 | self.driver.find_element_by_id("edit-columns-button").click() |
1083 | self.driver.find_element_by_id("depends_on").click() | 1151 | self.driver.find_element_by_id("depends_on").click() |
1084 | self.driver.find_element_by_id("layer_version__branch").click() | 1152 | self.driver.find_element_by_id("layer_version__branch").click() |
1085 | self.driver.find_element_by_id("layer_version__layer__commit").click() | 1153 | self.driver.find_element_by_id("layer_version__layer__commit").click() |
1086 | self.driver.find_element_by_id("depends_by").click() | 1154 | self.driver.find_element_by_id("depends_by").click() |
1087 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 1155 | self.driver.find_element_by_id("edit-columns-button").click() |
1088 | # don't exist any more | 1156 | # don't exist any more |
1089 | head_list = self.get_table_head_text('otable') | 1157 | head_list = self.get_table_head_text('otable') |
1090 | for item in check_list: | 1158 | for item in check_list: |
1091 | self.failIf(item in head_list) | 1159 | self.assertFalse(item in head_list, msg=("item %s should not be in head row" % item)) |
1092 | 1160 | ||
1093 | 1161 | ||
1094 | ############## | 1162 | ############## |
@@ -1104,7 +1172,7 @@ class toaster_cases(toaster_cases_base): | |||
1104 | # step 3 | 1172 | # step 3 |
1105 | head_list = self.get_table_head_text('otable') | 1173 | head_list = self.get_table_head_text('otable') |
1106 | for item in ['Recipe', 'Recipe version', 'Recipe file', 'Section', 'License', 'Layer']: | 1174 | for item in ['Recipe', 'Recipe version', 'Recipe file', 'Section', 'License', 'Layer']: |
1107 | self.failUnless(item in head_list) | 1175 | self.assertTrue(item in head_list, msg=("item %s not in head row" % item)) |
1108 | # step 4 | 1176 | # step 4 |
1109 | self.driver.find_element_by_id("edit-columns-button").click() | 1177 | self.driver.find_element_by_id("edit-columns-button").click() |
1110 | # save screen | 1178 | # save screen |
@@ -1318,7 +1386,8 @@ class toaster_cases(toaster_cases_base): | |||
1318 | head_list = self.get_table_head_text('otable') | 1386 | head_list = self.get_table_head_text('otable') |
1319 | print head_list | 1387 | print head_list |
1320 | print len(head_list) | 1388 | print len(head_list) |
1321 | self.failUnless(head_list == ['Variable', 'Value', 'Set in file', 'Description']) | 1389 | self.assertTrue(head_list == ['Variable', 'Value', 'Set in file', 'Description'], \ |
1390 | msg=("head row contents wrong")) | ||
1322 | # step 8 | 1391 | # step 8 |
1323 | # search other string. and click "Variable" to re-sort, check if table | 1392 | # search other string. and click "Variable" to re-sort, check if table |
1324 | # head is still the same | 1393 | # head is still the same |
@@ -1327,10 +1396,12 @@ class toaster_cases(toaster_cases_base): | |||
1327 | self.driver.find_element_by_id("search-button").click() | 1396 | self.driver.find_element_by_id("search-button").click() |
1328 | self.find_element_by_link_text_in_table('otable', 'Variable').click() | 1397 | self.find_element_by_link_text_in_table('otable', 'Variable').click() |
1329 | head_list = self.get_table_head_text('otable') | 1398 | head_list = self.get_table_head_text('otable') |
1330 | self.failUnless(head_list == ['Variable', 'Value', 'Set in file', 'Description']) | 1399 | self.assertTrue(head_list == ['Variable', 'Value', 'Set in file', 'Description'], \ |
1400 | msg=("head row contents wrong")) | ||
1331 | self.find_element_by_link_text_in_table('otable', 'Variable').click() | 1401 | self.find_element_by_link_text_in_table('otable', 'Variable').click() |
1332 | head_list = self.get_table_head_text('otable') | 1402 | head_list = self.get_table_head_text('otable') |
1333 | self.failUnless(head_list == ['Variable', 'Value', 'Set in file', 'Description']) | 1403 | self.assertTrue(head_list == ['Variable', 'Value', 'Set in file', 'Description'], \ |
1404 | msg=("head row contents wrong")) | ||
1334 | 1405 | ||
1335 | 1406 | ||
1336 | ############## | 1407 | ############## |
@@ -1346,11 +1417,11 @@ class toaster_cases(toaster_cases_base): | |||
1346 | self.find_element_by_link_text_in_table('nav', 'Configuration').click() | 1417 | self.find_element_by_link_text_in_table('nav', 'Configuration').click() |
1347 | self.driver.find_element_by_link_text("BitBake variables").click() | 1418 | self.driver.find_element_by_link_text("BitBake variables").click() |
1348 | variable_list = self.get_table_column_text('class', 'variable_name') | 1419 | variable_list = self.get_table_column_text('class', 'variable_name') |
1349 | self.failUnless(is_list_sequenced(variable_list)) | 1420 | self.assertTrue(is_list_sequenced(variable_list), msg=("list not in order")) |
1350 | # step 4 | 1421 | # step 4 |
1351 | self.find_element_by_link_text_in_table('otable', 'Variable').click() | 1422 | self.find_element_by_link_text_in_table('otable', 'Variable').click() |
1352 | variable_list = self.get_table_column_text('class', 'variable_name') | 1423 | variable_list = self.get_table_column_text('class', 'variable_name') |
1353 | self.failUnless(is_list_inverted(variable_list)) | 1424 | self.assertTrue(is_list_inverted(variable_list), msg=("list not inverted")) |
1354 | self.find_element_by_link_text_in_table('otable', 'Variable').click() | 1425 | self.find_element_by_link_text_in_table('otable', 'Variable').click() |
1355 | # step 5 | 1426 | # step 5 |
1356 | # searching won't change the sequentiality | 1427 | # searching won't change the sequentiality |
@@ -1358,7 +1429,7 @@ class toaster_cases(toaster_cases_base): | |||
1358 | self.driver.find_element_by_id("search").send_keys("lib") | 1429 | self.driver.find_element_by_id("search").send_keys("lib") |
1359 | self.driver.find_element_by_id("search-button").click() | 1430 | self.driver.find_element_by_id("search-button").click() |
1360 | variable_list = self.get_table_column_text('class', 'variable_name') | 1431 | variable_list = self.get_table_column_text('class', 'variable_name') |
1361 | self.failUnless(is_list_sequenced(variable_list)) | 1432 | self.assertTrue(is_list_sequenced(variable_list), msg=("list not in order")) |
1362 | 1433 | ||
1363 | 1434 | ||
1364 | ############## | 1435 | ############## |
@@ -1372,7 +1443,7 @@ class toaster_cases(toaster_cases_base): | |||
1372 | # Step 2 | 1443 | # Step 2 |
1373 | # default sequence in "Completed on" column is inverted | 1444 | # default sequence in "Completed on" column is inverted |
1374 | c_list = self.get_table_column_text('class', 'completed_on') | 1445 | c_list = self.get_table_column_text('class', 'completed_on') |
1375 | self.failUnless(is_list_inverted(c_list)) | 1446 | self.assertTrue(is_list_inverted(c_list), msg=("list not inverted")) |
1376 | # step 3 | 1447 | # step 3 |
1377 | self.driver.find_element_by_id("edit-columns-button").click() | 1448 | self.driver.find_element_by_id("edit-columns-button").click() |
1378 | self.driver.find_element_by_id("started_on").click() | 1449 | self.driver.find_element_by_id("started_on").click() |
@@ -1380,8 +1451,8 @@ class toaster_cases(toaster_cases_base): | |||
1380 | self.driver.find_element_by_id("time").click() | 1451 | self.driver.find_element_by_id("time").click() |
1381 | self.driver.find_element_by_id("edit-columns-button").click() | 1452 | self.driver.find_element_by_id("edit-columns-button").click() |
1382 | head_list = self.get_table_head_text('otable') | 1453 | head_list = self.get_table_head_text('otable') |
1383 | for item in ['Outcome', 'Target', 'Machine', 'Started on', 'Completed on', 'Failed tasks', 'Errors', 'Warnings', 'Warnings', 'Time']: | 1454 | for item in ['Outcome', 'Recipe', 'Machine', 'Started on', 'Completed on', 'Failed tasks', 'Errors', 'Warnings', 'Warnings', 'Time']: |
1384 | self.failUnless(item in head_list) | 1455 | self.assertTrue(item in head_list, msg=("item %s not in head row" % item)) |
1385 | 1456 | ||
1386 | 1457 | ||
1387 | ############## | 1458 | ############## |
@@ -1395,7 +1466,7 @@ class toaster_cases(toaster_cases_base): | |||
1395 | # Please refer to case 924 requirement | 1466 | # Please refer to case 924 requirement |
1396 | # default sequence in "Completed on" column is inverted | 1467 | # default sequence in "Completed on" column is inverted |
1397 | c_list = self.get_table_column_text('class', 'completed_on') | 1468 | c_list = self.get_table_column_text('class', 'completed_on') |
1398 | self.failUnless(is_list_inverted(c_list)) | 1469 | self.assertTrue(is_list_inverted(c_list), msg=("list not inverted")) |
1399 | # Step 4 | 1470 | # Step 4 |
1400 | # click Errors , order in "Completed on" should be disturbed. Then hide | 1471 | # click Errors , order in "Completed on" should be disturbed. Then hide |
1401 | # error column to check if order in "Completed on" can be restored | 1472 | # error column to check if order in "Completed on" can be restored |
@@ -1406,7 +1477,7 @@ class toaster_cases(toaster_cases_base): | |||
1406 | # Note: without time.sleep here, there'll be unpredictable error..TBD | 1477 | # Note: without time.sleep here, there'll be unpredictable error..TBD |
1407 | time.sleep(1) | 1478 | time.sleep(1) |
1408 | c_list = self.get_table_column_text('class', 'completed_on') | 1479 | c_list = self.get_table_column_text('class', 'completed_on') |
1409 | self.failUnless(is_list_inverted(c_list)) | 1480 | self.assertTrue(is_list_inverted(c_list), msg=("list not inverted")) |
1410 | 1481 | ||
1411 | 1482 | ||
1412 | ############## | 1483 | ############## |
@@ -1422,7 +1493,7 @@ class toaster_cases(toaster_cases_base): | |||
1422 | self.find_element_by_link_text_in_table('nav', 'Packages').click() | 1493 | self.find_element_by_link_text_in_table('nav', 'Packages').click() |
1423 | check_head_list = ['Package', 'Package version', 'Size', 'Recipe'] | 1494 | check_head_list = ['Package', 'Package version', 'Size', 'Recipe'] |
1424 | head_list = self.get_table_head_text('otable') | 1495 | head_list = self.get_table_head_text('otable') |
1425 | self.failUnless(head_list == check_head_list) | 1496 | self.assertTrue(head_list == check_head_list, msg=("head row not as expected")) |
1426 | # Step 4 | 1497 | # Step 4 |
1427 | # pulldown menu | 1498 | # pulldown menu |
1428 | option_ids = ['recipe__layer_version__layer__name', 'recipe__layer_version__branch', \ | 1499 | option_ids = ['recipe__layer_version__layer__name', 'recipe__layer_version__branch', \ |
@@ -1451,7 +1522,7 @@ class toaster_cases(toaster_cases_base): | |||
1451 | self.find_element_by_link_text_in_table('nav', 'Packages').click() | 1522 | self.find_element_by_link_text_in_table('nav', 'Packages').click() |
1452 | # column -- Package | 1523 | # column -- Package |
1453 | column_list = self.get_table_column_text_by_column_number('otable', 1) | 1524 | column_list = self.get_table_column_text_by_column_number('otable', 1) |
1454 | self.failUnless(is_list_sequenced(column_list)) | 1525 | self.assertTrue(is_list_sequenced(column_list), msg=("list not in order")) |
1455 | self.find_element_by_link_text_in_table('otable', 'Size').click() | 1526 | self.find_element_by_link_text_in_table('otable', 'Size').click() |
1456 | 1527 | ||
1457 | 1528 | ||
@@ -1473,7 +1544,7 @@ class toaster_cases(toaster_cases_base): | |||
1473 | self.driver.find_element_by_id("edit-columns-button").click() | 1544 | self.driver.find_element_by_id("edit-columns-button").click() |
1474 | #get modified table header | 1545 | #get modified table header |
1475 | new_head = self.get_table_head_text('otable') | 1546 | new_head = self.get_table_head_text('otable') |
1476 | self.failUnless(head_list > new_head) | 1547 | self.assertTrue(head_list > new_head) |
1477 | 1548 | ||
1478 | ############## | 1549 | ############## |
1479 | # CASE 943 # | 1550 | # CASE 943 # |
@@ -1490,7 +1561,7 @@ class toaster_cases(toaster_cases_base): | |||
1490 | self.driver.find_element_by_id("search").send_keys("bash") | 1561 | self.driver.find_element_by_id("search").send_keys("bash") |
1491 | self.driver.find_element_by_id("search-button").click() | 1562 | self.driver.find_element_by_id("search-button").click() |
1492 | #check for the search result message "XX packages found" | 1563 | #check for the search result message "XX packages found" |
1493 | self.failUnless(self.is_text_present("packages found")) | 1564 | self.assertTrue(self.is_text_present("packages found"), msg=("no packages found text")) |
1494 | 1565 | ||
1495 | 1566 | ||
1496 | ############## | 1567 | ############## |
@@ -1511,11 +1582,12 @@ class toaster_cases(toaster_cases_base): | |||
1511 | self.driver.find_element_by_id("edit-columns-button").click() | 1582 | self.driver.find_element_by_id("edit-columns-button").click() |
1512 | # otable is the recipes table here | 1583 | # otable is the recipes table here |
1513 | otable_head_text = self.get_table_head_text('otable') | 1584 | otable_head_text = self.get_table_head_text('otable') |
1514 | for item in ["Layer", "Layer branch", "Layer commit", "Layer directory"]: | 1585 | for item in ["Layer", "Layer branch", "Layer commit"]: |
1515 | self.failIf(item not in otable_head_text) | 1586 | self.assertFalse(item not in otable_head_text, msg=("item %s should be in head row" % item)) |
1516 | # click the fist recipe, whatever it is | 1587 | # click the fist recipe, whatever it is |
1517 | self.get_table_element("otable", 1, 1).click() | 1588 | self.get_table_element("otable", 1, 1).click() |
1518 | self.failUnless(self.is_text_present(["Layer", "Layer branch", "Layer commit", "Recipe file"])) | 1589 | self.assertTrue(self.is_text_present(["Layer", "Layer branch", "Layer commit", "Recipe file"]), \ |
1590 | msg=("text not in web page")) | ||
1519 | 1591 | ||
1520 | # step 2: test Packages page stuff. almost same as above | 1592 | # step 2: test Packages page stuff. almost same as above |
1521 | self.driver.back() | 1593 | self.driver.back() |
@@ -1528,10 +1600,11 @@ class toaster_cases(toaster_cases_base): | |||
1528 | self.driver.find_element_by_id("edit-columns-button").click() | 1600 | self.driver.find_element_by_id("edit-columns-button").click() |
1529 | otable_head_text = self.get_table_head_text("otable") | 1601 | otable_head_text = self.get_table_head_text("otable") |
1530 | for item in ["Layer", "Layer branch", "Layer commit"]: | 1602 | for item in ["Layer", "Layer branch", "Layer commit"]: |
1531 | self.failIf(item not in otable_head_text) | 1603 | self.assertFalse(item not in otable_head_text, msg=("item %s should be in head row" % item)) |
1532 | # click the fist recipe, whatever it is | 1604 | # click the fist recipe, whatever it is |
1533 | self.get_table_element("otable", 1, 1).click() | 1605 | self.get_table_element("otable", 1, 1).click() |
1534 | self.failUnless(self.is_text_present(["Layer", "Layer branch", "Layer commit"])) | 1606 | self.assertTrue(self.is_text_present(["Layer", "Layer branch", "Layer commit"]), \ |
1607 | msg=("text not in web page")) | ||
1535 | 1608 | ||
1536 | # step 3: test Packages core-image-minimal(images) stuff. almost same as above. Note when future element-id changes... | 1609 | # step 3: test Packages core-image-minimal(images) stuff. almost same as above. Note when future element-id changes... |
1537 | self.driver.back() | 1610 | self.driver.back() |
@@ -1543,17 +1616,18 @@ class toaster_cases(toaster_cases_base): | |||
1543 | self.driver.find_element_by_id("edit-columns-button").click() | 1616 | self.driver.find_element_by_id("edit-columns-button").click() |
1544 | otable_head_text = self.get_table_head_text("otable") | 1617 | otable_head_text = self.get_table_head_text("otable") |
1545 | for item in ["Layer", "Layer branch", "Layer commit"]: | 1618 | for item in ["Layer", "Layer branch", "Layer commit"]: |
1546 | self.failIf(item not in otable_head_text) | 1619 | self.assertFalse(item not in otable_head_text, msg=("item %s should be in head row" % item)) |
1547 | # click the fist recipe, whatever it is | 1620 | # click the fist recipe, whatever it is |
1548 | self.get_table_element("otable", 1, 1).click() | 1621 | self.get_table_element("otable", 1, 1).click() |
1549 | self.failUnless(self.is_text_present(["Layer", "Layer branch", "Layer commit"])) | 1622 | self.assertTrue(self.is_text_present(["Layer", "Layer branch", "Layer commit"]), \ |
1623 | msg=("text not in web page")) | ||
1550 | 1624 | ||
1551 | # step 4: check Configuration page | 1625 | # step 4: check Configuration page |
1552 | self.driver.back() | 1626 | self.driver.back() |
1553 | self.driver.find_element_by_link_text("Configuration").click() | 1627 | self.driver.find_element_by_link_text("Configuration").click() |
1554 | otable_head_text = self.get_table_head_text() | 1628 | otable_head_text = self.get_table_head_text() |
1555 | for item in ["Layer", "Layer branch", "Layer commit"]: | 1629 | for item in ["Layer", "Layer branch", "Layer commit"]: |
1556 | self.failIf(item not in otable_head_text) | 1630 | self.assertTrue(item not in otable_head_text, msg=("item %s should not be in head row" % item)) |
1557 | 1631 | ||
1558 | 1632 | ||
1559 | ############## | 1633 | ############## |
@@ -1578,14 +1652,14 @@ class toaster_cases(toaster_cases_base): | |||
1578 | # Sure we can use driver.get(url) to refresh page, but since page will vary, we use click link text here | 1652 | # Sure we can use driver.get(url) to refresh page, but since page will vary, we use click link text here |
1579 | self.driver.find_element_by_link_text(items).click() | 1653 | self.driver.find_element_by_link_text(items).click() |
1580 | Select(self.driver.find_element_by_css_selector("select.pagesize")).select_by_visible_text(str(rows_displayed)) | 1654 | Select(self.driver.find_element_by_css_selector("select.pagesize")).select_by_visible_text(str(rows_displayed)) |
1581 | self.failUnless(self.is_element_present(By.XPATH, xpath_table + "/tr[" + str(rows_displayed) +"]")) | 1655 | self.assertTrue(self.is_element_present(By.XPATH, xpath_table + "/tr[" + str(rows_displayed) +"]")) |
1582 | self.failIf(self.is_element_present(By.XPATH, xpath_table + "/tr[" + str(rows_displayed+1) +"]")) | 1656 | self.assertFalse(self.is_element_present(By.XPATH, xpath_table + "/tr[" + str(rows_displayed+1) +"]")) |
1583 | 1657 | ||
1584 | # click 1st package, then go back to check if it's still those rows shown. | 1658 | # click 1st package, then go back to check if it's still those rows shown. |
1585 | self.driver.find_element_by_xpath(xpath_table + "/tr[1]/td[1]").click() | 1659 | self.driver.find_element_by_xpath(xpath_table + "/tr[1]/td[1]").click() |
1586 | self.driver.find_element_by_link_text(items).click() | 1660 | self.driver.find_element_by_link_text(items).click() |
1587 | self.failUnless(self.is_element_present(By.XPATH, xpath_table + "/tr[" + str(rows_displayed) +"]")) | 1661 | self.assertTrue(self.is_element_present(By.XPATH, xpath_table + "/tr[" + str(rows_displayed) +"]")) |
1588 | self.failIf(self.is_element_present(By.XPATH, xpath_table + "/tr[" + str(rows_displayed+1) +"]")) | 1662 | self.assertFalse(self.is_element_present(By.XPATH, xpath_table + "/tr[" + str(rows_displayed+1) +"]")) |
1589 | 1663 | ||
1590 | 1664 | ||
1591 | ############## | 1665 | ############## |
@@ -1676,7 +1750,7 @@ class toaster_cases(toaster_cases_base): | |||
1676 | check_list = ['Description', 'Set in file'] | 1750 | check_list = ['Description', 'Set in file'] |
1677 | head_list = self.get_table_head_text('otable') | 1751 | head_list = self.get_table_head_text('otable') |
1678 | for item in check_list: | 1752 | for item in check_list: |
1679 | self.failIf(item in head_list) | 1753 | self.assertFalse(item in head_list, msg=("item %s should not be in head row" % item)) |
1680 | # check these 2 options and verify again | 1754 | # check these 2 options and verify again |
1681 | self.driver.find_element_by_id('edit-columns-button').click() | 1755 | self.driver.find_element_by_id('edit-columns-button').click() |
1682 | self.driver.find_element_by_xpath(xpath_option('description')).click() | 1756 | self.driver.find_element_by_xpath(xpath_option('description')).click() |
@@ -1684,7 +1758,7 @@ class toaster_cases(toaster_cases_base): | |||
1684 | self.driver.find_element_by_id('edit-columns-button').click() | 1758 | self.driver.find_element_by_id('edit-columns-button').click() |
1685 | head_list = self.get_table_head_text('otable') | 1759 | head_list = self.get_table_head_text('otable') |
1686 | for item in check_list: | 1760 | for item in check_list: |
1687 | self.failUnless(item in head_list) | 1761 | self.assertTrue(item in head_list, msg=("item %s not in head row" % item)) |
1688 | 1762 | ||
1689 | 1763 | ||
1690 | ############## | 1764 | ############## |
@@ -1706,7 +1780,7 @@ class toaster_cases(toaster_cases_base): | |||
1706 | self.driver.find_element_by_id("search-button").click() | 1780 | self.driver.find_element_by_id("search-button").click() |
1707 | #get number of variables visible after search | 1781 | #get number of variables visible after search |
1708 | number_after_search = self.driver.find_element_by_class_name('page-header').text | 1782 | number_after_search = self.driver.find_element_by_class_name('page-header').text |
1709 | self.failUnless(number_before_search > number_after_search) | 1783 | self.assertTrue(number_before_search > number_after_search, msg=("items should be less after search")) |
1710 | 1784 | ||
1711 | 1785 | ||
1712 | ############## | 1786 | ############## |
@@ -1725,11 +1799,11 @@ class toaster_cases(toaster_cases_base): | |||
1725 | self.driver.find_element_by_partial_link_text("Directory structure") | 1799 | self.driver.find_element_by_partial_link_text("Directory structure") |
1726 | except Exception,e: | 1800 | except Exception,e: |
1727 | self.log.error(e) | 1801 | self.log.error(e) |
1728 | self.failIf(True) | 1802 | self.assertFalse(True) |
1729 | # step 4 | 1803 | # step 4 |
1730 | head_list = self.get_table_head_text('otable') | 1804 | head_list = self.get_table_head_text('otable') |
1731 | for item in ['Package', 'Package version', 'Size', 'Dependencies', 'Reverse dependencies', 'Recipe']: | 1805 | for item in ['Package', 'Package version', 'Size', 'Dependencies', 'Reverse dependencies', 'Recipe']: |
1732 | self.failUnless(item in head_list) | 1806 | self.assertTrue(item in head_list, msg=("item %s not in head row" % item)) |
1733 | # step 5-6 | 1807 | # step 5-6 |
1734 | self.driver.find_element_by_id("edit-columns-button").click() | 1808 | self.driver.find_element_by_id("edit-columns-button").click() |
1735 | selectable_class = 'checkbox' | 1809 | selectable_class = 'checkbox' |
@@ -1749,22 +1823,15 @@ class toaster_cases(toaster_cases_base): | |||
1749 | unselectable_list.append(element.text) | 1823 | unselectable_list.append(element.text) |
1750 | # check them | 1824 | # check them |
1751 | for item in selectable_check_list: | 1825 | for item in selectable_check_list: |
1752 | if item not in selectable_list: | 1826 | self.assertTrue(item in selectable_list, msg=("%s not found in dropdown menu" % item)) |
1753 | self.log.error(" %s not found in dropdown menu \n" % item) | ||
1754 | self.failIf(True) | ||
1755 | for item in unselectable_check_list: | 1827 | for item in unselectable_check_list: |
1756 | if item not in unselectable_list: | 1828 | self.assertTrue(item in unselectable_list, msg=("%s not found in dropdown menu" % item)) |
1757 | self.log.error(" %s not found in dropdown menu \n" % item) | ||
1758 | self.failIf(True) | ||
1759 | self.driver.find_element_by_id("edit-columns-button").click() | 1829 | self.driver.find_element_by_id("edit-columns-button").click() |
1760 | # step 7 | 1830 | # step 7 |
1761 | self.driver.find_element_by_partial_link_text("Directory structure").click() | 1831 | self.driver.find_element_by_partial_link_text("Directory structure").click() |
1762 | head_list = self.get_table_head_text('dirtable') | 1832 | head_list = self.get_table_head_text('dirtable') |
1763 | for item in ['Directory / File', 'Symbolic link to', 'Source package', 'Size', 'Permissions', 'Owner', 'Group']: | 1833 | for item in ['Directory / File', 'Symbolic link to', 'Source package', 'Size', 'Permissions', 'Owner', 'Group']: |
1764 | if item not in head_list: | 1834 | self.assertTrue(item in head_list, msg=("%s not found in Directory structure table head" % item)) |
1765 | self.log.error(" %s not found in Directory structure table head \n" % item) | ||
1766 | self.failIf(True) | ||
1767 | |||
1768 | 1835 | ||
1769 | ############## | 1836 | ############## |
1770 | # CASE 950 # | 1837 | # CASE 950 # |
@@ -1794,12 +1861,11 @@ class toaster_cases(toaster_cases_base): | |||
1794 | try: | 1861 | try: |
1795 | self.find_element_by_link_text_in_table('nav', item) | 1862 | self.find_element_by_link_text_in_table('nav', item) |
1796 | except Exception: | 1863 | except Exception: |
1797 | self.log.error("link %s cannot be found in the page" % item) | 1864 | self.assertFalse(True, msg=("link %s cannot be found in the page" % item)) |
1798 | self.failIf(True) | ||
1799 | # step 6 | 1865 | # step 6 |
1800 | check_list_2 = ['Packages included', 'Total package size', \ | 1866 | check_list_2 = ['Packages included', 'Total package size', \ |
1801 | 'License manifest', 'Image files'] | 1867 | 'License manifest', 'Image files'] |
1802 | self.failUnless(self.is_text_present(check_list_2)) | 1868 | self.assertTrue(self.is_text_present(check_list_2), msg=("text not in web page")) |
1803 | self.driver.back() | 1869 | self.driver.back() |
1804 | try: | 1870 | try: |
1805 | fail_icon = self.driver.find_element_by_xpath("//*[@class='icon-minus-sign error']") | 1871 | fail_icon = self.driver.find_element_by_xpath("//*[@class='icon-minus-sign error']") |
@@ -1816,12 +1882,11 @@ class toaster_cases(toaster_cases_base): | |||
1816 | try: | 1882 | try: |
1817 | self.find_element_by_link_text_in_table('nav', item) | 1883 | self.find_element_by_link_text_in_table('nav', item) |
1818 | except Exception: | 1884 | except Exception: |
1819 | self.log.error("link %s cannot be found in the page" % item) | 1885 | self.assertFalse(True, msg=("link %s cannot be found in the page" % item)) |
1820 | self.failIf(True) | ||
1821 | # step 7 involved | 1886 | # step 7 involved |
1822 | check_list_3 = ['Machine', 'Distro', 'Layers', 'Total number of tasks', 'Tasks executed', \ | 1887 | check_list_3 = ['Machine', 'Distro', 'Layers', 'Total number of tasks', 'Tasks executed', \ |
1823 | 'Tasks not executed', 'Reuse', 'Recipes built', 'Packages built'] | 1888 | 'Tasks not executed', 'Reuse', 'Recipes built', 'Packages built'] |
1824 | self.failUnless(self.is_text_present(check_list_3)) | 1889 | self.assertTrue(self.is_text_present(check_list_3), msg=("text not in web page")) |
1825 | self.driver.back() | 1890 | self.driver.back() |
1826 | 1891 | ||
1827 | 1892 | ||
@@ -1881,6 +1946,5 @@ class toaster_cases(toaster_cases_base): | |||
1881 | tasks, recipes, packages need to run manually") | 1946 | tasks, recipes, packages need to run manually") |
1882 | self.driver.find_element_by_partial_link_text("Toaster manual").click() | 1947 | self.driver.find_element_by_partial_link_text("Toaster manual").click() |
1883 | if not self.is_text_present("Toaster Manual"): | 1948 | if not self.is_text_present("Toaster Manual"): |
1884 | self.log.error("please check [Toaster manual] link on page") | 1949 | self.assertFalse(True, msg=("please check [Toaster manual] link on page")) |
1885 | self.failIf(True) | ||
1886 | 1950 | ||