diff options
-rwxr-xr-x | bitbake/lib/toaster/contrib/tts/toasteruitest/toaster_automation_test.py | 307 |
1 files changed, 133 insertions, 174 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 0cb3934339..2a2078f080 100755 --- a/bitbake/lib/toaster/contrib/tts/toasteruitest/toaster_automation_test.py +++ b/bitbake/lib/toaster/contrib/tts/toasteruitest/toaster_automation_test.py | |||
@@ -605,18 +605,16 @@ class toaster_cases(toaster_cases_base): | |||
605 | self.driver.maximize_window() | 605 | self.driver.maximize_window() |
606 | self.driver.get(self.base_url) | 606 | self.driver.get(self.base_url) |
607 | # open all columns | 607 | # open all columns |
608 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 608 | self.driver.find_element_by_id("edit-columns-button").click() |
609 | # adding explicitly wait for chromedriver..-_- | 609 | # adding explicitly wait for chromedriver..-_- |
610 | self.browser_delay() | 610 | self.browser_delay() |
611 | self.driver.find_element_by_id("log").click() | ||
612 | self.browser_delay() | ||
613 | self.driver.find_element_by_id("started_on").click() | 611 | self.driver.find_element_by_id("started_on").click() |
614 | self.browser_delay() | 612 | self.browser_delay() |
615 | self.driver.find_element_by_id("time").click() | 613 | self.driver.find_element_by_id("time").click() |
616 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 614 | self.driver.find_element_by_id("edit-columns-button").click() |
617 | # dict: {lint text name : actual class name} | 615 | # dict: {lint text name : actual class name} |
618 | table_head_dict = {'Outcome':'outcome', 'Target':'target', 'Machine':'machine', 'Started on':'started_on', 'Completed on':'completed_on', \ | 616 | table_head_dict = {'Outcome':'outcome', 'Recipe':'target', 'Machine':'machine', 'Started on':'started_on', 'Completed on':'completed_on', \ |
619 | 'Errors':'errors_no', 'Warnings':'warnings_no', 'Time':'time', 'Log':'log'} | 617 | 'Errors':'errors_no', 'Warnings':'warnings_no', 'Time':'time'} |
620 | for key in table_head_dict: | 618 | for key in table_head_dict: |
621 | try: | 619 | try: |
622 | self.driver.find_element_by_link_text(key).click() | 620 | self.driver.find_element_by_link_text(key).click() |
@@ -653,7 +651,7 @@ class toaster_cases(toaster_cases_base): | |||
653 | print ori_target_column_texts | 651 | print ori_target_column_texts |
654 | self.driver.find_element_by_id("search").clear() | 652 | self.driver.find_element_by_id("search").clear() |
655 | self.driver.find_element_by_id("search").send_keys(pattern) | 653 | self.driver.find_element_by_id("search").send_keys(pattern) |
656 | self.driver.find_element_by_css_selector("button.btn").click() | 654 | self.driver.find_element_by_id("search-button").click() |
657 | new_target_column_texts = self.get_table_column_text("class", "target") | 655 | new_target_column_texts = self.get_table_column_text("class", "target") |
658 | # if nothing found, we still count it as "pass" | 656 | # if nothing found, we still count it as "pass" |
659 | if new_target_column_texts: | 657 | if new_target_column_texts: |
@@ -673,11 +671,11 @@ class toaster_cases(toaster_cases_base): | |||
673 | self.driver.maximize_window() | 671 | self.driver.maximize_window() |
674 | self.driver.get(self.base_url) | 672 | self.driver.get(self.base_url) |
675 | # when opening a new page, "started_on" is not displayed by default | 673 | # when opening a new page, "started_on" is not displayed by default |
676 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 674 | self.driver.find_element_by_id("edit-columns-button").click() |
677 | # currently all the delay are for chrome driver -_- | 675 | # currently all the delay are for chrome driver -_- |
678 | self.browser_delay() | 676 | self.browser_delay() |
679 | self.driver.find_element_by_id("started_on").click() | 677 | self.driver.find_element_by_id("started_on").click() |
680 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 678 | self.driver.find_element_by_id("edit-columns-button").click() |
681 | # step 4 | 679 | # step 4 |
682 | items = ["Outcome", "Completed on", "Started on", "Failed tasks", "Errors", "Warnings"] | 680 | items = ["Outcome", "Completed on", "Started on", "Failed tasks", "Errors", "Warnings"] |
683 | for item in items: | 681 | for item in items: |
@@ -711,7 +709,7 @@ class toaster_cases(toaster_cases_base): | |||
711 | self.save_screenshot(screenshot_type='selenium', append_name='step6') | 709 | self.save_screenshot(screenshot_type='selenium', append_name='step6') |
712 | self.driver.find_element_by_id("search").clear() | 710 | self.driver.find_element_by_id("search").clear() |
713 | self.driver.find_element_by_id("search").send_keys("core-image") | 711 | self.driver.find_element_by_id("search").send_keys("core-image") |
714 | self.driver.find_element_by_css_selector("button.btn").click() | 712 | self.driver.find_element_by_id("search-button").click() |
715 | 713 | ||
716 | 714 | ||
717 | ############## | 715 | ############## |
@@ -737,24 +735,24 @@ class toaster_cases(toaster_cases_base): | |||
737 | 735 | ||
738 | self.driver.find_element_by_id("search").clear() | 736 | self.driver.find_element_by_id("search").clear() |
739 | self.driver.find_element_by_id("search").send_keys("busybox") | 737 | self.driver.find_element_by_id("search").send_keys("busybox") |
740 | self.driver.find_element_by_css_selector("button.btn").click() | 738 | self.driver.find_element_by_id("search-button").click() |
741 | self.browser_delay() | 739 | self.browser_delay() |
742 | self.save_screenshot(screenshot_type='selenium', append_name='step5') | 740 | self.save_screenshot(screenshot_type='selenium', append_name='step5') |
743 | self.driver.find_element_by_css_selector("i.icon-remove").click() | 741 | self.driver.find_element_by_css_selector("i.icon-remove").click() |
744 | # Save screen here | 742 | # Save screen here |
745 | self.save_screenshot(screenshot_type='selenium', append_name='step5_2') | 743 | self.save_screenshot(screenshot_type='selenium', append_name='step5_2') |
746 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 744 | self.driver.find_element_by_id("edit-columns-button").click() |
747 | self.driver.find_element_by_id("cpu_used").click() | 745 | self.driver.find_element_by_id("cpu_used").click() |
748 | self.driver.find_element_by_id("disk_io").click() | 746 | self.driver.find_element_by_id("disk_io").click() |
749 | self.driver.find_element_by_id("task_log").click() | 747 | self.driver.find_element_by_id("task_log").click() |
750 | self.driver.find_element_by_id("recipe_version").click() | 748 | self.driver.find_element_by_id("recipe_version").click() |
751 | self.driver.find_element_by_id("time_taken").click() | 749 | self.driver.find_element_by_id("time_taken").click() |
752 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 750 | self.driver.find_element_by_css_selector("edit-columns-button").click() |
753 | # The operation is the same as case901 | 751 | # The operation is the same as case901 |
754 | # dict: {lint text name : actual class name} | 752 | # dict: {lint text name : actual class name} |
755 | table_head_dict = {'Order':'order', 'Recipe':'recipe_name', 'Task':'task_name', 'Executed':'executed', \ | 753 | table_head_dict = {'Order':'order', 'Recipe':'recipe_name', 'Task':'task_name', 'Executed':'executed', \ |
756 | 'Outcome':'outcome', 'Cache attempt':'cache_attempt', 'Time (secs)':'time_taken', 'CPU usage':'cpu_used', \ | 754 | 'Outcome':'outcome', 'Cache attempt':'cache_attempt', 'Time (secs)':'time_taken', 'CPU usage':'cpu_used', \ |
757 | 'Disk I/O (ms)':'disk_io', 'Log':'task_log'} | 755 | 'Disk I/O (ms)':'disk_io'} |
758 | for key in table_head_dict: | 756 | for key in table_head_dict: |
759 | # This is tricky here: we are doing so because there may be more than 1 | 757 | # This is tricky here: we are doing so because there may be more than 1 |
760 | # same-name link_text in one page. So we only find element inside the table | 758 | # 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): | |||
818 | 'Time':{ | 816 | 'Time':{ |
819 | 'class':'time_taken', | 817 | 'class':'time_taken', |
820 | 'check_head_list':['Recipe', 'Task', 'Executed', 'Outcome', 'Time (secs)'], | 818 | 'check_head_list':['Recipe', 'Task', 'Executed', 'Outcome', 'Time (secs)'], |
821 | 'check_column_list':['cpu_used', 'cache_attempt', 'disk_io', 'task_log', 'order', 'recipe_version'] | 819 | 'check_column_list':['cpu_used', 'cache_attempt', 'disk_io', 'order', 'recipe_version'] |
822 | }, | 820 | }, |
823 | 'CPU usage':{ | 821 | 'CPU usage':{ |
824 | 'class':'cpu_used', | 822 | 'class':'cpu_used', |
825 | 'check_head_list':['Recipe', 'Task', 'Executed', 'Outcome', 'CPU usage'], | 823 | 'check_head_list':['Recipe', 'Task', 'Executed', 'Outcome', 'CPU usage'], |
826 | 'check_column_list':['cache_attempt', 'disk_io', 'task_log', 'order', 'recipe_version', 'time_taken'] | 824 | 'check_column_list':['cache_attempt', 'disk_io', 'order', 'recipe_version', 'time_taken'] |
827 | }, | 825 | }, |
828 | 'Disk I/O':{ | 826 | 'Disk I/O':{ |
829 | 'class':'disk_io', | 827 | 'class':'disk_io', |
830 | 'check_head_list':['Recipe', 'Task', 'Executed', 'Outcome', 'Disk I/O (ms)'], | 828 | 'check_head_list':['Recipe', 'Task', 'Executed', 'Outcome', 'Disk I/O (ms)'], |
831 | 'check_column_list':['cpu_used', 'cache_attempt', 'task_log', 'order', 'recipe_version', 'time_taken'] | 829 | 'check_column_list':['cpu_used', 'cache_attempt', 'order', 'recipe_version', 'time_taken'] |
832 | } | 830 | } |
833 | } | 831 | } |
834 | for key in test_dict: | 832 | for key in test_dict: |
@@ -840,10 +838,10 @@ class toaster_cases(toaster_cases_base): | |||
840 | column_list = self.get_table_column_text('class', test_dict[key]['class']) | 838 | column_list = self.get_table_column_text('class', test_dict[key]['class']) |
841 | self.failUnless(is_list_inverted(column_list)) | 839 | self.failUnless(is_list_inverted(column_list)) |
842 | 840 | ||
843 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 841 | self.driver.find_element_by_id("edit-columns-button").click() |
844 | for item2 in test_dict[key]['check_column_list']: | 842 | for item2 in test_dict[key]['check_column_list']: |
845 | self.driver.find_element_by_id(item2).click() | 843 | self.driver.find_element_by_id(item2).click() |
846 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 844 | self.driver.find_element_by_id("edit-columns-button").click() |
847 | # TBD: save screen here | 845 | # TBD: save screen here |
848 | 846 | ||
849 | 847 | ||
@@ -916,36 +914,35 @@ class toaster_cases(toaster_cases_base): | |||
916 | 914 | ||
917 | self.driver.find_element_by_id("search").clear() | 915 | self.driver.find_element_by_id("search").clear() |
918 | self.driver.find_element_by_id("search").send_keys(test_package1) | 916 | self.driver.find_element_by_id("search").send_keys(test_package1) |
919 | self.driver.find_element_by_css_selector("button.btn").click() | 917 | self.driver.find_element_by_id("search-button").click() |
920 | # Save screen here | 918 | # Save screen here |
921 | self.save_screenshot(screenshot_type='selenium', append_name='step4') | 919 | self.save_screenshot(screenshot_type='selenium', append_name='step4') |
922 | self.driver.find_element_by_css_selector("i.icon-remove").click() | 920 | self.driver.find_element_by_css_selector("i.icon-remove").click() |
923 | self.save_screenshot(screenshot_type='selenium', append_name='step4_2') | 921 | self.save_screenshot(screenshot_type='selenium', append_name='step4_2') |
924 | 922 | ||
925 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 923 | self.driver.find_element_by_id("edit-columns-button").click() |
926 | self.driver.find_element_by_id("depends_on").click() | 924 | self.driver.find_element_by_id("depends_on").click() |
927 | self.driver.find_element_by_id("layer_version__branch").click() | 925 | self.driver.find_element_by_id("layer_version__branch").click() |
928 | self.driver.find_element_by_id("layer_version__layer__commit").click() | 926 | self.driver.find_element_by_id("layer_version__layer__commit").click() |
929 | self.driver.find_element_by_id("layer_version__local_path").click() | ||
930 | self.driver.find_element_by_id("depends_by").click() | 927 | self.driver.find_element_by_id("depends_by").click() |
931 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 928 | self.driver.find_element_by_id("edit-columns-button").click() |
932 | 929 | ||
933 | self.find_element_by_link_text_in_table(self.table_name, 'Recipe').click() | 930 | self.find_element_by_link_text_in_table(self.table_name, 'Recipe').click() |
934 | # Check the inverted table by Recipe | 931 | # Check the inverted table by Recipe |
935 | # Recipe doesn't have class name | 932 | # Recipe doesn't have class name |
936 | 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]")) | 933 | #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]")) |
937 | print inverted_tasks_column_count | 934 | #print inverted_tasks_column_count |
938 | inverted_column_list = self.get_table_column_text_by_column_number(self.table_name, 1) | 935 | #inverted_column_list = self.get_table_column_text_by_column_number(self.table_name, 1) |
939 | #print inverted_column_list | 936 | #print inverted_column_list |
940 | 937 | ||
941 | self.driver.find_element_by_xpath("/html/body/div[2]/div/div[2]/div[2]/table/tbody/tr[1]/td[1]/a").click() | 938 | #self.driver.find_element_by_partial_link_text("zlib").click() |
942 | self.driver.back() | 939 | #self.driver.back() |
943 | self.failUnless(is_list_inverted(inverted_column_list)) | 940 | #self.failUnless(is_list_inverted(inverted_column_list)) |
944 | self.find_element_by_link_text_in_table(self.table_name, 'Recipe').click() | 941 | #self.find_element_by_link_text_in_table(self.table_name, 'Recipe').click() |
945 | 942 | ||
946 | table_head_dict = {'Recipe file':'recipe_file', 'Section':'recipe_section', \ | 943 | table_head_dict = {'Recipe':'recipe__name', 'Recipe file':'recipe_file', 'Section':'recipe_section', \ |
947 | 'License':'recipe_license', 'Layer':'layer_version__layer__name', \ | 944 | 'License':'recipe_license', 'Layer':'layer_version__layer__name', \ |
948 | 'Layer branch':'layer_version__branch', 'Layer directory':'layer_version__local_path'} | 945 | 'Layer branch':'layer_version__branch'} |
949 | for key in table_head_dict: | 946 | for key in table_head_dict: |
950 | self.find_element_by_link_text_in_table(self.table_name, key).click() | 947 | self.find_element_by_link_text_in_table(self.table_name, key).click() |
951 | column_list = self.get_table_column_text("class", table_head_dict[key]) | 948 | column_list = self.get_table_column_text("class", table_head_dict[key]) |
@@ -954,14 +951,14 @@ class toaster_cases(toaster_cases_base): | |||
954 | self.find_element_by_link_text_in_table(self.table_name, key).click() | 951 | 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]) | 952 | 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)) | 953 | self.failUnless(is_list_sequenced(column_list) or is_list_inverted(column_list)) |
957 | self.driver.find_element_by_xpath("/html/body/div[2]/div/div[2]/div[2]/table/tbody/tr[1]/td[1]/a").click() | 954 | self.driver.find_element_by_partial_link_text("acl").click() |
958 | self.driver.back() | 955 | self.driver.back() |
959 | self.failUnless(is_list_sequenced(column_list) or is_list_inverted(column_list)) | 956 | self.failUnless(is_list_sequenced(column_list) or is_list_inverted(column_list)) |
960 | # Search text box background text is "Search recipes" | 957 | # Search text box background text is "Search recipes" |
961 | self.failUnless(self.driver.find_element_by_xpath("//*[@id='searchform']/*[@placeholder='Search recipes']")) | 958 | self.failUnless(self.driver.find_element_by_xpath("//*[@id='searchform']/*[@placeholder='Search recipes']")) |
962 | self.driver.find_element_by_id("search").clear() | 959 | self.driver.find_element_by_id("search").clear() |
963 | self.driver.find_element_by_id("search").send_keys(test_package2) | 960 | self.driver.find_element_by_id("search").send_keys(test_package2) |
964 | self.driver.find_element_by_css_selector("button.btn").click() | 961 | self.driver.find_element_by_id("search-button").click() |
965 | column_search_list = self.get_table_column_text("class", table_head_dict[key]) | 962 | 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)) | 963 | self.failUnless(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() | 964 | self.driver.find_element_by_css_selector("i.icon-remove").click() |
@@ -969,14 +966,14 @@ class toaster_cases(toaster_cases_base): | |||
969 | self.find_element_by_link_text_in_table(self.table_name, key).click() | 966 | 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]) | 967 | column_list = self.get_table_column_text("class", table_head_dict[key]) |
971 | self.failUnless(is_list_sequenced(column_list)) | 968 | self.failUnless(is_list_sequenced(column_list)) |
972 | self.driver.find_element_by_xpath("/html/body/div[2]/div/div[2]/div[2]/table/tbody/tr[1]/td[1]/a").click() | 969 | self.driver.find_element_by_partial_link_text("acl").click() |
973 | self.driver.back() | 970 | self.driver.back() |
974 | self.failUnless(is_list_sequenced(column_list)) | 971 | self.failUnless(is_list_sequenced(column_list)) |
975 | # Search text box background text is "Search recipes" | 972 | # Search text box background text is "Search recipes" |
976 | self.failUnless(self.driver.find_element_by_xpath("//*[@id='searchform']/*[@placeholder='Search recipes']")) | 973 | self.failUnless(self.driver.find_element_by_xpath("//*[@id='searchform']/*[@placeholder='Search recipes']")) |
977 | self.driver.find_element_by_id("search").clear() | 974 | self.driver.find_element_by_id("search").clear() |
978 | self.driver.find_element_by_id("search").send_keys(test_package2) | 975 | self.driver.find_element_by_id("search").send_keys(test_package2) |
979 | self.driver.find_element_by_css_selector("button.btn").click() | 976 | self.driver.find_element_by_id("search-button").click() |
980 | column_search_list = self.get_table_column_text("class", table_head_dict[key]) | 977 | column_search_list = self.get_table_column_text("class", table_head_dict[key]) |
981 | self.failUnless(is_list_sequenced(column_search_list)) | 978 | self.failUnless(is_list_sequenced(column_search_list)) |
982 | self.driver.find_element_by_css_selector("i.icon-remove").click() | 979 | self.driver.find_element_by_css_selector("i.icon-remove").click() |
@@ -985,14 +982,17 @@ class toaster_cases(toaster_cases_base): | |||
985 | self.find_element_by_link_text_in_table(self.table_name, key).click() | 982 | 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]) | 983 | column_list = self.get_table_column_text("class", table_head_dict[key]) |
987 | self.failUnless(is_list_inverted(column_list)) | 984 | self.failUnless(is_list_inverted(column_list)) |
988 | self.driver.find_element_by_xpath("/html/body/div[2]/div/div[2]/div[2]/table/tbody/tr[1]/td[1]/a").click() | 985 | try: |
986 | self.driver.find_element_by_partial_link_text("acl").click() | ||
987 | except: | ||
988 | self.driver.find_element_by_partial_link_text("zlib").click() | ||
989 | self.driver.back() | 989 | self.driver.back() |
990 | self.failUnless(is_list_inverted(column_list)) | 990 | self.failUnless(is_list_inverted(column_list)) |
991 | # Search text box background text is "Search recipes" | 991 | # Search text box background text is "Search recipes" |
992 | self.failUnless(self.driver.find_element_by_xpath("//*[@id='searchform']/*[@placeholder='Search recipes']")) | 992 | self.failUnless(self.driver.find_element_by_xpath("//*[@id='searchform']/*[@placeholder='Search recipes']")) |
993 | self.driver.find_element_by_id("search").clear() | 993 | self.driver.find_element_by_id("search").clear() |
994 | self.driver.find_element_by_id("search").send_keys(test_package2) | 994 | self.driver.find_element_by_id("search").send_keys(test_package2) |
995 | self.driver.find_element_by_css_selector("button.btn").click() | 995 | self.driver.find_element_by_id("search-button").click() |
996 | column_search_list = self.get_table_column_text("class", table_head_dict[key]) | 996 | column_search_list = self.get_table_column_text("class", table_head_dict[key]) |
997 | #print column_search_list | 997 | #print column_search_list |
998 | self.failUnless(is_list_inverted(column_search_list)) | 998 | self.failUnless(is_list_inverted(column_search_list)) |
@@ -1002,23 +1002,23 @@ class toaster_cases(toaster_cases_base): | |||
1002 | for key in table_head_dict: | 1002 | for key in table_head_dict: |
1003 | print key | 1003 | print key |
1004 | self.find_element_by_link_text_in_table(self.table_name, key).click() | 1004 | self.find_element_by_link_text_in_table(self.table_name, key).click() |
1005 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 1005 | self.driver.find_element_by_id("edit-columns-button").click() |
1006 | self.driver.find_element_by_id(table_head_dict[key]).click() | 1006 | self.driver.find_element_by_id(table_head_dict[key]).click() |
1007 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 1007 | self.driver.find_element_by_id("edit-columns-button").click() |
1008 | self.browser_delay() | 1008 | self.browser_delay() |
1009 | # After hide the column, the default table should be sorted by Recipe | 1009 | # After hide the column, the default table should be sorted by Recipe |
1010 | tasks_column_count = len(self.driver.find_elements_by_xpath("/html/body/div[2]/div/div[2]/div[2]/table/tbody/tr/td[1]")) | 1010 | tasks_column_count = len(self.driver.find_elements_by_partial_link_text("acl")) |
1011 | #print tasks_column_count | 1011 | #print tasks_column_count |
1012 | default_column_list = self.get_table_column_text_by_column_number(self.table_name, 1) | 1012 | default_column_list = self.get_table_column_text_by_column_number(self.table_name, 1) |
1013 | #print default_column_list | 1013 | #print default_column_list |
1014 | self.failUnless(is_list_sequenced(default_column_list)) | 1014 | self.failUnless(is_list_sequenced(default_column_list)) |
1015 | 1015 | ||
1016 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 1016 | self.driver.find_element_by_id("edit-columns-button").click() |
1017 | self.driver.find_element_by_id("recipe_file").click() | 1017 | self.driver.find_element_by_id("recipe_file").click() |
1018 | self.driver.find_element_by_id("recipe_section").click() | 1018 | self.driver.find_element_by_id("recipe_section").click() |
1019 | self.driver.find_element_by_id("recipe_license").click() | 1019 | self.driver.find_element_by_id("recipe_license").click() |
1020 | self.driver.find_element_by_id("layer_version__layer__name").click() | 1020 | self.driver.find_element_by_id("layer_version__layer__name").click() |
1021 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 1021 | self.driver.find_element_by_id("edit-columns-button").click() |
1022 | 1022 | ||
1023 | 1023 | ||
1024 | ############## | 1024 | ############## |
@@ -1034,15 +1034,15 @@ class toaster_cases(toaster_cases_base): | |||
1034 | # step 3-5 | 1034 | # step 3-5 |
1035 | self.driver.find_element_by_id("search").clear() | 1035 | self.driver.find_element_by_id("search").clear() |
1036 | self.driver.find_element_by_id("search").send_keys("lib") | 1036 | self.driver.find_element_by_id("search").send_keys("lib") |
1037 | self.driver.find_element_by_css_selector("button.btn").click() | 1037 | self.driver.find_element_by_id("search-button").click() |
1038 | # save screen here for observation | 1038 | # save screen here for observation |
1039 | self.save_screenshot(screenshot_type='selenium', append_name='step5') | 1039 | self.save_screenshot(screenshot_type='selenium', append_name='step5') |
1040 | # step 6 | 1040 | # step 6 |
1041 | self.driver.find_element_by_css_selector("i.icon-remove").click() | 1041 | self.driver.find_element_by_css_selector("i.icon-remove").click() |
1042 | self.driver.find_element_by_id("search").clear() | 1042 | self.driver.find_element_by_id("search").clear() |
1043 | # we deliberately want "no result" here | 1043 | # we deliberately want "no result" here |
1044 | self.driver.find_element_by_id("search").send_keys("what the hell") | 1044 | self.driver.find_element_by_id("search").send_keys("no such input") |
1045 | self.driver.find_element_by_css_selector("button.btn").click() | 1045 | self.driver.find_element_by_id("search-button").click() |
1046 | self.find_element_by_text("Show all recipes").click() | 1046 | self.find_element_by_text("Show all recipes").click() |
1047 | self.driver.quit() | 1047 | self.driver.quit() |
1048 | 1048 | ||
@@ -1066,7 +1066,6 @@ class toaster_cases(toaster_cases_base): | |||
1066 | self.driver.find_element_by_id("depends_on").click() | 1066 | self.driver.find_element_by_id("depends_on").click() |
1067 | self.driver.find_element_by_id("layer_version__branch").click() | 1067 | self.driver.find_element_by_id("layer_version__branch").click() |
1068 | self.driver.find_element_by_id("layer_version__layer__commit").click() | 1068 | self.driver.find_element_by_id("layer_version__layer__commit").click() |
1069 | self.driver.find_element_by_id("layer_version__local_path").click() | ||
1070 | self.driver.find_element_by_id("depends_by").click() | 1069 | self.driver.find_element_by_id("depends_by").click() |
1071 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 1070 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() |
1072 | # check if columns selected above is shown | 1071 | # check if columns selected above is shown |
@@ -1081,7 +1080,6 @@ class toaster_cases(toaster_cases_base): | |||
1081 | self.driver.find_element_by_id("depends_on").click() | 1080 | self.driver.find_element_by_id("depends_on").click() |
1082 | self.driver.find_element_by_id("layer_version__branch").click() | 1081 | self.driver.find_element_by_id("layer_version__branch").click() |
1083 | self.driver.find_element_by_id("layer_version__layer__commit").click() | 1082 | self.driver.find_element_by_id("layer_version__layer__commit").click() |
1084 | self.driver.find_element_by_id("layer_version__local_path").click() | ||
1085 | self.driver.find_element_by_id("depends_by").click() | 1083 | self.driver.find_element_by_id("depends_by").click() |
1086 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 1084 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() |
1087 | # don't exist any more | 1085 | # don't exist any more |
@@ -1105,11 +1103,11 @@ class toaster_cases(toaster_cases_base): | |||
1105 | for item in ['Recipe', 'Recipe version', 'Recipe file', 'Section', 'License', 'Layer']: | 1103 | for item in ['Recipe', 'Recipe version', 'Recipe file', 'Section', 'License', 'Layer']: |
1106 | self.failUnless(item in head_list) | 1104 | self.failUnless(item in head_list) |
1107 | # step 4 | 1105 | # step 4 |
1108 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 1106 | self.driver.find_element_by_id("edit-columns-button").click() |
1109 | # save screen | 1107 | # save screen |
1110 | self.browser_delay() | 1108 | self.browser_delay() |
1111 | self.save_screenshot(screenshot_type='selenium', append_name='step4') | 1109 | self.save_screenshot(screenshot_type='selenium', append_name='step4') |
1112 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 1110 | self.driver.find_element_by_id("edit-columns-button").click() |
1113 | 1111 | ||
1114 | 1112 | ||
1115 | ############## | 1113 | ############## |
@@ -1308,7 +1306,7 @@ class toaster_cases(toaster_cases_base): | |||
1308 | # step 4 | 1306 | # step 4 |
1309 | self.driver.find_element_by_id("search").clear() | 1307 | self.driver.find_element_by_id("search").clear() |
1310 | self.driver.find_element_by_id("search").send_keys("lib") | 1308 | self.driver.find_element_by_id("search").send_keys("lib") |
1311 | self.driver.find_element_by_css_selector("button.btn").click() | 1309 | self.driver.find_element_by_id("search-button").click() |
1312 | # save screen to see result | 1310 | # save screen to see result |
1313 | self.browser_delay() | 1311 | self.browser_delay() |
1314 | self.save_screenshot(screenshot_type='selenium', append_name='step4') | 1312 | self.save_screenshot(screenshot_type='selenium', append_name='step4') |
@@ -1323,7 +1321,7 @@ class toaster_cases(toaster_cases_base): | |||
1323 | # head is still the same | 1321 | # head is still the same |
1324 | self.driver.find_element_by_id("search").clear() | 1322 | self.driver.find_element_by_id("search").clear() |
1325 | self.driver.find_element_by_id("search").send_keys("poky") | 1323 | self.driver.find_element_by_id("search").send_keys("poky") |
1326 | self.driver.find_element_by_css_selector("button.btn").click() | 1324 | self.driver.find_element_by_id("search-button").click() |
1327 | self.find_element_by_link_text_in_table('otable', 'Variable').click() | 1325 | self.find_element_by_link_text_in_table('otable', 'Variable').click() |
1328 | head_list = self.get_table_head_text('otable') | 1326 | head_list = self.get_table_head_text('otable') |
1329 | self.failUnless(head_list == ['Variable', 'Value', 'Set in file', 'Description']) | 1327 | self.failUnless(head_list == ['Variable', 'Value', 'Set in file', 'Description']) |
@@ -1355,7 +1353,7 @@ class toaster_cases(toaster_cases_base): | |||
1355 | # searching won't change the sequentiality | 1353 | # searching won't change the sequentiality |
1356 | self.driver.find_element_by_id("search").clear() | 1354 | self.driver.find_element_by_id("search").clear() |
1357 | self.driver.find_element_by_id("search").send_keys("lib") | 1355 | self.driver.find_element_by_id("search").send_keys("lib") |
1358 | self.driver.find_element_by_css_selector("button.btn").click() | 1356 | self.driver.find_element_by_id("search-button").click() |
1359 | variable_list = self.get_table_column_text('class', 'variable_name') | 1357 | variable_list = self.get_table_column_text('class', 'variable_name') |
1360 | self.failUnless(is_list_sequenced(variable_list)) | 1358 | self.failUnless(is_list_sequenced(variable_list)) |
1361 | 1359 | ||
@@ -1373,11 +1371,11 @@ class toaster_cases(toaster_cases_base): | |||
1373 | c_list = self.get_table_column_text('class', 'completed_on') | 1371 | c_list = self.get_table_column_text('class', 'completed_on') |
1374 | self.failUnless(is_list_inverted(c_list)) | 1372 | self.failUnless(is_list_inverted(c_list)) |
1375 | # step 3 | 1373 | # step 3 |
1376 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 1374 | self.driver.find_element_by_id("edit-columns-button").click() |
1377 | self.driver.find_element_by_id("started_on").click() | 1375 | self.driver.find_element_by_id("started_on").click() |
1378 | self.driver.find_element_by_id("log").click() | 1376 | self.driver.find_element_by_id("log").click() |
1379 | self.driver.find_element_by_id("time").click() | 1377 | self.driver.find_element_by_id("time").click() |
1380 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 1378 | self.driver.find_element_by_id("edit-columns-button").click() |
1381 | head_list = self.get_table_head_text('otable') | 1379 | head_list = self.get_table_head_text('otable') |
1382 | for item in ['Outcome', 'Target', 'Machine', 'Started on', 'Completed on', 'Failed tasks', 'Errors', 'Warnings', 'Warnings', 'Time']: | 1380 | for item in ['Outcome', 'Target', 'Machine', 'Started on', 'Completed on', 'Failed tasks', 'Errors', 'Warnings', 'Warnings', 'Time']: |
1383 | self.failUnless(item in head_list) | 1381 | self.failUnless(item in head_list) |
@@ -1399,9 +1397,9 @@ class toaster_cases(toaster_cases_base): | |||
1399 | # click Errors , order in "Completed on" should be disturbed. Then hide | 1397 | # click Errors , order in "Completed on" should be disturbed. Then hide |
1400 | # error column to check if order in "Completed on" can be restored | 1398 | # error column to check if order in "Completed on" can be restored |
1401 | self.find_element_by_link_text_in_table('otable', 'Errors').click() | 1399 | self.find_element_by_link_text_in_table('otable', 'Errors').click() |
1402 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 1400 | self.driver.find_element_by_id("edit-columns-button").click() |
1403 | self.driver.find_element_by_id("errors_no").click() | 1401 | self.driver.find_element_by_id("errors_no").click() |
1404 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 1402 | self.driver.find_element_by_id("edit-columns-button").click() |
1405 | # Note: without time.sleep here, there'll be unpredictable error..TBD | 1403 | # Note: without time.sleep here, there'll be unpredictable error..TBD |
1406 | time.sleep(1) | 1404 | time.sleep(1) |
1407 | c_list = self.get_table_column_text('class', 'completed_on') | 1405 | c_list = self.get_table_column_text('class', 'completed_on') |
@@ -1425,13 +1423,12 @@ class toaster_cases(toaster_cases_base): | |||
1425 | # Step 4 | 1423 | # Step 4 |
1426 | # pulldown menu | 1424 | # pulldown menu |
1427 | option_ids = ['recipe__layer_version__layer__name', 'recipe__layer_version__branch', \ | 1425 | option_ids = ['recipe__layer_version__layer__name', 'recipe__layer_version__branch', \ |
1428 | 'recipe__layer_version__layer__commit', 'recipe__layer_version__local_path', \ | 1426 | 'recipe__layer_version__layer__commit', 'license', 'recipe__version'] |
1429 | 'license', 'recipe__version'] | 1427 | self.driver.find_element_by_id("edit-columns-button").click() |
1430 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | ||
1431 | for item in option_ids: | 1428 | for item in option_ids: |
1432 | if not self.driver.find_element_by_id(item).is_selected(): | 1429 | if not self.driver.find_element_by_id(item).is_selected(): |
1433 | self.driver.find_element_by_id(item).click() | 1430 | self.driver.find_element_by_id(item).click() |
1434 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 1431 | self.driver.find_element_by_id("edit-columns-button").click() |
1435 | # save screen here to observe that 'Package' and 'Package version' is | 1432 | # save screen here to observe that 'Package' and 'Package version' is |
1436 | # not selectable | 1433 | # not selectable |
1437 | self.browser_delay() | 1434 | self.browser_delay() |
@@ -1456,6 +1453,44 @@ class toaster_cases(toaster_cases_base): | |||
1456 | 1453 | ||
1457 | 1454 | ||
1458 | ############## | 1455 | ############## |
1456 | # CASE 942 # | ||
1457 | ############## | ||
1458 | def test_942(self): | ||
1459 | self.case_no = self.get_case_number() | ||
1460 | self.log.info(' CASE %s log: ' % str(self.case_no)) | ||
1461 | self.driver.maximize_window() | ||
1462 | self.driver.get(self.base_url) | ||
1463 | self.driver.find_element_by_link_text("core-image-minimal").click() | ||
1464 | self.driver.find_element_by_link_text("Packages").click() | ||
1465 | #get initial table header | ||
1466 | head_list = self.get_table_head_text('otable') | ||
1467 | #remove the Recipe column from table header | ||
1468 | self.driver.find_element_by_id("edit-columns-button").click() | ||
1469 | self.driver.find_element_by_id("recipe__name").click() | ||
1470 | self.driver.find_element_by_id("edit-columns-button").click() | ||
1471 | #get modified table header | ||
1472 | new_head = self.get_table_head_text('otable') | ||
1473 | self.failUnless(head_list > new_head) | ||
1474 | |||
1475 | ############## | ||
1476 | # CASE 943 # | ||
1477 | ############## | ||
1478 | def test_943(self): | ||
1479 | self.case_no = self.get_case_number() | ||
1480 | self.log.info(' CASE %s log: ' % str(self.case_no)) | ||
1481 | self.driver.maximize_window() | ||
1482 | self.driver.get(self.base_url) | ||
1483 | self.driver.find_element_by_link_text("core-image-minimal").click() | ||
1484 | self.driver.find_element_by_link_text("Packages").click() | ||
1485 | #search for the "bash" package -> this should definitely be present | ||
1486 | self.driver.find_element_by_id("search").clear() | ||
1487 | self.driver.find_element_by_id("search").send_keys("bash") | ||
1488 | self.driver.find_element_by_id("search-button").click() | ||
1489 | #check for the search result message "XX packages found" | ||
1490 | self.failUnless(self.is_text_present("packages found")) | ||
1491 | |||
1492 | |||
1493 | ############## | ||
1459 | # CASE 944 # | 1494 | # CASE 944 # |
1460 | ############## | 1495 | ############## |
1461 | def test_944(self): | 1496 | def test_944(self): |
@@ -1467,57 +1502,54 @@ class toaster_cases(toaster_cases_base): | |||
1467 | # step 1: test Recipes page stuff | 1502 | # step 1: test Recipes page stuff |
1468 | self.driver.find_element_by_link_text("Recipes").click() | 1503 | self.driver.find_element_by_link_text("Recipes").click() |
1469 | # for these 3 items, default status is not-checked | 1504 | # for these 3 items, default status is not-checked |
1470 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 1505 | self.driver.find_element_by_id("edit-columns-button").click() |
1471 | self.driver.find_element_by_id("layer_version__branch").click() | 1506 | self.driver.find_element_by_id("layer_version__branch").click() |
1472 | self.driver.find_element_by_id("layer_version__layer__commit").click() | 1507 | self.driver.find_element_by_id("layer_version__layer__commit").click() |
1473 | self.driver.find_element_by_id("layer_version__local_path").click() | 1508 | self.driver.find_element_by_id("edit-columns-button").click() |
1474 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | ||
1475 | # otable is the recipes table here | 1509 | # otable is the recipes table here |
1476 | otable_head_text = self.get_table_head_text('otable') | 1510 | otable_head_text = self.get_table_head_text('otable') |
1477 | for item in ["Layer", "Layer branch", "Layer commit", "Layer directory"]: | 1511 | for item in ["Layer", "Layer branch", "Layer commit", "Layer directory"]: |
1478 | self.failIf(item not in otable_head_text) | 1512 | self.failIf(item not in otable_head_text) |
1479 | # click the fist recipe, whatever it is | 1513 | # click the fist recipe, whatever it is |
1480 | self.get_table_element("otable", 1, 1).click() | 1514 | self.get_table_element("otable", 1, 1).click() |
1481 | self.failUnless(self.is_text_present(["Layer", "Layer branch", "Layer commit", "Layer directory", "Recipe file"])) | 1515 | self.failUnless(self.is_text_present(["Layer", "Layer branch", "Layer commit", "Recipe file"])) |
1482 | 1516 | ||
1483 | # step 2: test Packages page stuff. almost same as above | 1517 | # step 2: test Packages page stuff. almost same as above |
1484 | self.driver.back() | 1518 | self.driver.back() |
1485 | self.browser_delay() | 1519 | self.browser_delay() |
1486 | self.driver.find_element_by_link_text("Packages").click() | 1520 | self.driver.find_element_by_link_text("Packages").click() |
1487 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 1521 | self.driver.find_element_by_id("edit-columns-button").click() |
1488 | self.driver.find_element_by_id("recipe__layer_version__layer__name").click() | 1522 | self.driver.find_element_by_id("recipe__layer_version__layer__name").click() |
1489 | self.driver.find_element_by_id("recipe__layer_version__branch").click() | 1523 | self.driver.find_element_by_id("recipe__layer_version__branch").click() |
1490 | self.driver.find_element_by_id("recipe__layer_version__layer__commit").click() | 1524 | self.driver.find_element_by_id("recipe__layer_version__layer__commit").click() |
1491 | self.driver.find_element_by_id("recipe__layer_version__local_path").click() | 1525 | self.driver.find_element_by_id("edit-columns-button").click() |
1492 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | ||
1493 | otable_head_text = self.get_table_head_text("otable") | 1526 | otable_head_text = self.get_table_head_text("otable") |
1494 | for item in ["Layer", "Layer branch", "Layer commit", "Layer directory"]: | 1527 | for item in ["Layer", "Layer branch", "Layer commit"]: |
1495 | self.failIf(item not in otable_head_text) | 1528 | self.failIf(item not in otable_head_text) |
1496 | # click the fist recipe, whatever it is | 1529 | # click the fist recipe, whatever it is |
1497 | self.get_table_element("otable", 1, 1).click() | 1530 | self.get_table_element("otable", 1, 1).click() |
1498 | self.failUnless(self.is_text_present(["Layer", "Layer branch", "Layer commit", "Layer directory"])) | 1531 | self.failUnless(self.is_text_present(["Layer", "Layer branch", "Layer commit"])) |
1499 | 1532 | ||
1500 | # step 3: test Packages core-image-minimal(images) stuff. almost same as above. Note when future element-id changes... | 1533 | # step 3: test Packages core-image-minimal(images) stuff. almost same as above. Note when future element-id changes... |
1501 | self.driver.back() | 1534 | self.driver.back() |
1502 | self.driver.find_element_by_link_text("core-image-minimal").click() | 1535 | self.driver.find_element_by_link_text("core-image-minimal").click() |
1503 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 1536 | self.driver.find_element_by_id("edit-columns-button").click() |
1504 | self.driver.find_element_by_id("layer_name").click() | 1537 | self.driver.find_element_by_id("layer_name").click() |
1505 | self.driver.find_element_by_id("layer_branch").click() | 1538 | self.driver.find_element_by_id("layer_branch").click() |
1506 | self.driver.find_element_by_id("layer_commit").click() | 1539 | self.driver.find_element_by_id("layer_commit").click() |
1507 | self.driver.find_element_by_id("layer_directory").click() | 1540 | self.driver.find_element_by_id("edit-columns-button").click() |
1508 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | ||
1509 | otable_head_text = self.get_table_head_text("otable") | 1541 | otable_head_text = self.get_table_head_text("otable") |
1510 | for item in ["Layer", "Layer branch", "Layer commit", "Layer directory"]: | 1542 | for item in ["Layer", "Layer branch", "Layer commit"]: |
1511 | self.failIf(item not in otable_head_text) | 1543 | self.failIf(item not in otable_head_text) |
1512 | # click the fist recipe, whatever it is | 1544 | # click the fist recipe, whatever it is |
1513 | self.get_table_element("otable", 1, 1).click() | 1545 | self.get_table_element("otable", 1, 1).click() |
1514 | self.failUnless(self.is_text_present(["Layer", "Layer branch", "Layer commit", "Layer directory"])) | 1546 | self.failUnless(self.is_text_present(["Layer", "Layer branch", "Layer commit"])) |
1515 | 1547 | ||
1516 | # step 4: check Configuration page | 1548 | # step 4: check Configuration page |
1517 | self.driver.back() | 1549 | self.driver.back() |
1518 | self.driver.find_element_by_link_text("Configuration").click() | 1550 | self.driver.find_element_by_link_text("Configuration").click() |
1519 | otable_head_text = self.get_table_head_text() | 1551 | otable_head_text = self.get_table_head_text() |
1520 | for item in ["Layer", "Layer branch", "Layer commit", "Layer directory"]: | 1552 | for item in ["Layer", "Layer branch", "Layer commit"]: |
1521 | self.failIf(item not in otable_head_text) | 1553 | self.failIf(item not in otable_head_text) |
1522 | 1554 | ||
1523 | 1555 | ||
@@ -1568,7 +1600,7 @@ class toaster_cases(toaster_cases_base): | |||
1568 | for item in check_list: | 1600 | for item in check_list: |
1569 | if not self.is_element_present(how=By.LINK_TEXT, what=item): | 1601 | if not self.is_element_present(how=By.LINK_TEXT, what=item): |
1570 | self.log.error("%s not found" %item) | 1602 | self.log.error("%s not found" %item) |
1571 | if not self.is_text_present(['Layers', 'Layer', 'Layer branch', 'Layer commit', 'Layer directory']): | 1603 | if not self.is_text_present(['Layers', 'Layer', 'Layer branch', 'Layer commit']): |
1572 | self.log.error("text not found") | 1604 | self.log.error("text not found") |
1573 | # step 5 | 1605 | # step 5 |
1574 | self.driver.find_element_by_link_text("BitBake variables").click() | 1606 | self.driver.find_element_by_link_text("BitBake variables").click() |
@@ -1579,18 +1611,24 @@ class toaster_cases(toaster_cases_base): | |||
1579 | temp_element = self.find_element_by_text_in_table('otable', "Set in file") | 1611 | temp_element = self.find_element_by_text_in_table('otable', "Set in file") |
1580 | temp_element.find_element_by_xpath("..//*/a/i[@class='icon-filter filtered']").click() | 1612 | temp_element.find_element_by_xpath("..//*/a/i[@class='icon-filter filtered']").click() |
1581 | self.browser_delay() | 1613 | self.browser_delay() |
1582 | self.driver.find_element_by_xpath("(//input[@name='filter'])[2]").click() | 1614 | self.driver.find_element_by_xpath("(//input[@name='filter'])[3]").click() |
1583 | self.driver.find_element_by_css_selector("button.btn.btn-primary").click() | 1615 | btns = self.driver.find_elements_by_css_selector("button.btn.btn-primary") |
1616 | for btn in btns: | ||
1617 | try: | ||
1618 | btn.click() | ||
1619 | break | ||
1620 | except: | ||
1621 | pass | ||
1584 | # save screen here | 1622 | # save screen here |
1585 | self.browser_delay() | 1623 | self.browser_delay() |
1586 | self.save_screenshot(screenshot_type='selenium', append_name='step6') | 1624 | self.save_screenshot(screenshot_type='selenium', append_name='step6') |
1587 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 1625 | self.driver.find_element_by_id("edit-columns-button").click() |
1588 | # save screen here | 1626 | # save screen here |
1589 | # step 7 | 1627 | # step 7 |
1590 | # we should manually check the step 6-8 result using screenshot | 1628 | # we should manually check the step 6-8 result using screenshot |
1591 | self.browser_delay() | 1629 | self.browser_delay() |
1592 | self.save_screenshot(screenshot_type='selenium', append_name='step7') | 1630 | self.save_screenshot(screenshot_type='selenium', append_name='step7') |
1593 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 1631 | self.driver.find_element_by_id("edit-columns-button").click() |
1594 | # step 9 | 1632 | # step 9 |
1595 | # click the 1st item, no matter what it is | 1633 | # click the 1st item, no matter what it is |
1596 | self.driver.find_element_by_xpath("//*[@id='otable']/tbody/tr[1]/td[1]/a").click() | 1634 | 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): | |||
1602 | if item not in element.text: | 1640 | if item not in element.text: |
1603 | self.log.error("%s not found" %item) | 1641 | self.log.error("%s not found" %item) |
1604 | # any better way to close this pop-up? ... TBD | 1642 | # any better way to close this pop-up? ... TBD |
1605 | element.find_element_by_xpath(".//*[@class='close']").click() | 1643 | element.find_element_by_class_name("close").click() |
1606 | # step 10 : need to manually check "Yocto Manual" in saved screen | 1644 | # step 10 : need to manually check "Yocto Manual" in saved screen |
1607 | self.driver.find_element_by_css_selector("i.icon-share.get-info").click() | 1645 | self.driver.find_element_by_css_selector("i.icon-share.get-info").click() |
1608 | # save screen here | 1646 | # save screen here |
@@ -1627,20 +1665,20 @@ class toaster_cases(toaster_cases_base): | |||
1627 | # return xpath of options under "Edit columns" button | 1665 | # return xpath of options under "Edit columns" button |
1628 | return self.shortest_xpath('id', 'navTab') + self.shortest_xpath('id', 'editcol') \ | 1666 | return self.shortest_xpath('id', 'navTab') + self.shortest_xpath('id', 'editcol') \ |
1629 | + self.shortest_xpath('id', column_name) | 1667 | + self.shortest_xpath('id', column_name) |
1630 | self.find_element_by_xpath_in_table('navTab', self.shortest_xpath('class', 'btn dropdown-toggle')).click() | 1668 | self.driver.find_element_by_id('edit-columns-button').click() |
1631 | # by default, option "Description" and "Set in file" were checked | 1669 | # by default, option "Description" and "Set in file" were checked |
1632 | self.driver.find_element_by_xpath(xpath_option('description')).click() | 1670 | self.driver.find_element_by_xpath(xpath_option('description')).click() |
1633 | self.driver.find_element_by_xpath(xpath_option('file')).click() | 1671 | self.driver.find_element_by_xpath(xpath_option('file')).click() |
1634 | self.find_element_by_xpath_in_table('navTab', self.shortest_xpath('class', 'btn dropdown-toggle')).click() | 1672 | self.driver.find_element_by_id('edit-columns-button').click() |
1635 | check_list = ['Description', 'Set in file'] | 1673 | check_list = ['Description', 'Set in file'] |
1636 | head_list = self.get_table_head_text('otable') | 1674 | head_list = self.get_table_head_text('otable') |
1637 | for item in check_list: | 1675 | for item in check_list: |
1638 | self.failIf(item in head_list) | 1676 | self.failIf(item in head_list) |
1639 | # check these 2 options and verify again | 1677 | # check these 2 options and verify again |
1640 | self.find_element_by_xpath_in_table('navTab', self.shortest_xpath('class', 'btn dropdown-toggle')).click() | 1678 | self.driver.find_element_by_id('edit-columns-button').click() |
1641 | self.driver.find_element_by_xpath(xpath_option('description')).click() | 1679 | self.driver.find_element_by_xpath(xpath_option('description')).click() |
1642 | self.driver.find_element_by_xpath(xpath_option('file')).click() | 1680 | self.driver.find_element_by_xpath(xpath_option('file')).click() |
1643 | self.find_element_by_xpath_in_table('navTab', self.shortest_xpath('class', 'btn dropdown-toggle')).click() | 1681 | self.driver.find_element_by_id('edit-columns-button').click() |
1644 | head_list = self.get_table_head_text('otable') | 1682 | head_list = self.get_table_head_text('otable') |
1645 | for item in check_list: | 1683 | for item in check_list: |
1646 | self.failUnless(item in head_list) | 1684 | self.failUnless(item in head_list) |
@@ -1657,66 +1695,15 @@ class toaster_cases(toaster_cases_base): | |||
1657 | self.driver.find_element_by_link_text("core-image-minimal").click() | 1695 | self.driver.find_element_by_link_text("core-image-minimal").click() |
1658 | self.find_element_by_link_text_in_table('nav', 'Configuration').click() | 1696 | self.find_element_by_link_text_in_table('nav', 'Configuration').click() |
1659 | self.driver.find_element_by_link_text("BitBake variables").click() | 1697 | self.driver.find_element_by_link_text("BitBake variables").click() |
1660 | number_before_search = list() | 1698 | #get number of variables visible by default |
1661 | number_after_search = list() | 1699 | number_before_search = self.driver.find_element_by_class_name('page-header').text |
1662 | # step 3 | ||
1663 | # temp_dict -- filter string : filter name in firepath | ||
1664 | temp_dict = {'Set in file':'filter_vhistory__file_name', 'Description':'filter_description'} | ||
1665 | count = 0 | ||
1666 | for key in temp_dict: | ||
1667 | try: | ||
1668 | temp_element = self.find_element_by_text_in_table('otable', key) | ||
1669 | temp_element.find_element_by_xpath("..//*[@class='icon-filter filtered']").click() | ||
1670 | # delay here. otherwise it won't get correct "text" we need. | ||
1671 | # TBD | ||
1672 | time.sleep(1) | ||
1673 | # step 4-5, we need to make sure that "search" manipulation | ||
1674 | # does reduce the number in the filter. | ||
1675 | # in this case, text returned will be "All variables (xxx)" | ||
1676 | temp_text = self.driver.find_element_by_xpath("//*[@id='" + temp_dict[key] + "']//*[@class='radio']").text | ||
1677 | number_list = extract_number_from_string(temp_text) | ||
1678 | print number_list | ||
1679 | # probably we only need the first number. in this case. | ||
1680 | number_before_search.append(eval(number_list[0])) | ||
1681 | count +=1 | ||
1682 | # how we locate the close button | ||
1683 | self.driver.find_element_by_xpath("//*[@id='" + temp_dict[key] + "']//*[@class='close']").click() | ||
1684 | self.browser_delay() | ||
1685 | except Exception,e: | ||
1686 | self.log.error(e) | ||
1687 | raise | ||
1688 | # search for a while... | 1700 | # search for a while... |
1689 | self.driver.find_element_by_id("search").clear() | 1701 | self.driver.find_element_by_id("search").clear() |
1690 | self.driver.find_element_by_id("search").send_keys("BB") | 1702 | self.driver.find_element_by_id("search").send_keys("BB") |
1691 | self.driver.find_element_by_css_selector("button.btn").click() | 1703 | self.driver.find_element_by_id("search-button").click() |
1692 | # same operation as above, only to get the new numbers in the filter | 1704 | #get number of variables visible after search |
1693 | count = 0 | 1705 | number_after_search = self.driver.find_element_by_class_name('page-header').text |
1694 | for key in temp_dict: | 1706 | self.failUnless(number_before_search > number_after_search) |
1695 | try: | ||
1696 | temp_element = self.find_element_by_text_in_table('otable', key) | ||
1697 | temp_element.find_element_by_xpath("..//*[@class='icon-filter filtered']").click() | ||
1698 | time.sleep(1) | ||
1699 | # in this case, text returned will be "All variables (xxx)" | ||
1700 | temp_text = self.driver.find_element_by_xpath("//*[@id='" + temp_dict[key] + "']//*[@class='radio']").text | ||
1701 | number_list = extract_number_from_string(temp_text) | ||
1702 | # probably we only need the first number. in this case. | ||
1703 | number_after_search.append(eval(number_list[0])) | ||
1704 | count += 1 | ||
1705 | # how we locate the close button | ||
1706 | self.driver.find_element_by_xpath("//*[@id='" + temp_dict[key] + "']//*[@class='close']").click() | ||
1707 | self.browser_delay() | ||
1708 | except Exception,e: | ||
1709 | self.log.error(e) | ||
1710 | raise | ||
1711 | for i in range(0, count): | ||
1712 | print i | ||
1713 | print number_after_search[i] | ||
1714 | print number_before_search[i] | ||
1715 | if number_after_search[i] < number_before_search[i]: | ||
1716 | self.log.info("After search, filter number reduces") | ||
1717 | else: | ||
1718 | self.log.error("Error: After search, filter number doesn't reduce") | ||
1719 | self.failIf(True) | ||
1720 | 1707 | ||
1721 | 1708 | ||
1722 | ############## | 1709 | ############## |
@@ -1741,11 +1728,11 @@ class toaster_cases(toaster_cases_base): | |||
1741 | for item in ['Package', 'Package version', 'Size', 'Dependencies', 'Reverse dependencies', 'Recipe']: | 1728 | for item in ['Package', 'Package version', 'Size', 'Dependencies', 'Reverse dependencies', 'Recipe']: |
1742 | self.failUnless(item in head_list) | 1729 | self.failUnless(item in head_list) |
1743 | # step 5-6 | 1730 | # step 5-6 |
1744 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 1731 | self.driver.find_element_by_id("edit-columns-button").click() |
1745 | selectable_class = 'checkbox' | 1732 | selectable_class = 'checkbox' |
1746 | # minimum-table : means unselectable items | 1733 | # minimum-table : means unselectable items |
1747 | unselectable_class = 'checkbox muted' | 1734 | unselectable_class = 'checkbox muted' |
1748 | selectable_check_list = ['Dependencies', 'Layer', 'Layer branch', 'Layer commit', 'Layer directory', \ | 1735 | selectable_check_list = ['Dependencies', 'Layer', 'Layer branch', 'Layer commit', \ |
1749 | 'License', 'Recipe', 'Recipe version', 'Reverse dependencies', \ | 1736 | 'License', 'Recipe', 'Recipe version', 'Reverse dependencies', \ |
1750 | 'Size', 'Size over total (%)'] | 1737 | 'Size', 'Size over total (%)'] |
1751 | unselectable_check_list = ['Package', 'Package version'] | 1738 | unselectable_check_list = ['Package', 'Package version'] |
@@ -1766,7 +1753,7 @@ class toaster_cases(toaster_cases_base): | |||
1766 | if item not in unselectable_list: | 1753 | if item not in unselectable_list: |
1767 | self.log.error(" %s not found in dropdown menu \n" % item) | 1754 | self.log.error(" %s not found in dropdown menu \n" % item) |
1768 | self.failIf(True) | 1755 | self.failIf(True) |
1769 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | 1756 | self.driver.find_element_by_id("edit-columns-button").click() |
1770 | # step 7 | 1757 | # step 7 |
1771 | self.driver.find_element_by_partial_link_text("Directory structure").click() | 1758 | self.driver.find_element_by_partial_link_text("Directory structure").click() |
1772 | head_list = self.get_table_head_text('dirtable') | 1759 | head_list = self.get_table_head_text('dirtable') |
@@ -1894,31 +1881,3 @@ class toaster_cases(toaster_cases_base): | |||
1894 | self.log.error("please check [Toaster manual] link on page") | 1881 | self.log.error("please check [Toaster manual] link on page") |
1895 | self.failIf(True) | 1882 | self.failIf(True) |
1896 | 1883 | ||
1897 | |||
1898 | ############## | ||
1899 | # CASE 959 # | ||
1900 | ############## | ||
1901 | def test_959(self): | ||
1902 | self.case_no = self.get_case_number() | ||
1903 | self.log.info(' CASE %s log: ' % str(self.case_no)) | ||
1904 | self.driver.maximize_window() | ||
1905 | self.driver.get(self.base_url) | ||
1906 | self.driver.find_element_by_link_text("core-image-minimal").click() | ||
1907 | # step 2-3 | ||
1908 | self.find_element_by_link_text_in_table('nav', 'Tasks').click() | ||
1909 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | ||
1910 | self.driver.find_element_by_id("task_log").click() | ||
1911 | self.driver.find_element_by_css_selector("button.btn.dropdown-toggle").click() | ||
1912 | # step 4: "Not Executed" tasks have no log. So click "Log"... | ||
1913 | self.find_element_by_link_text_in_table('otable', 'Log').click() | ||
1914 | # save screen to see if there's "absolute path" of logs | ||
1915 | self.browser_delay() | ||
1916 | self.save_screenshot(screenshot_type='selenium', append_name='step4_1') | ||
1917 | self.find_element_by_link_text_in_table('otable', 'Log').click() | ||
1918 | # save screen to see if there's "absolute path" of logs | ||
1919 | self.browser_delay() | ||
1920 | self.save_screenshot(screenshot_type='selenium', append_name='step4_2') | ||
1921 | |||
1922 | |||
1923 | |||
1924 | |||