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 | |||
