diff options
author | Marlon Rodriguez Garcia <marlon.rodriguez-garcia@savoirfairelinux.com> | 2023-10-12 13:42:19 -0400 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2023-10-17 11:41:33 +0100 |
commit | 480aeaff0816e667b6be74d74680bbe690c84c86 (patch) | |
tree | be601f0e6a6160b8462f67645a8b6fc611053c7b | |
parent | 06f2cf81f41858d0b47950af4e8f9bd6bca580bc (diff) | |
download | poky-480aeaff0816e667b6be74d74680bbe690c84c86.tar.gz |
bitbake: toaster: fixed functional test
Updated functional test file to fix url access and added waiting time after click operations
to allow following elements to be available for tests, this will needed to be revisited
when autobuilder is ready
(Bitbake rev: fa30af75b3b7d37215f2615aa4b458525fce509e)
Signed-off-by: Marlon Rodriguez Garcia <marlon.rodriguez-garcia@savoirfairelinux.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | bitbake/lib/toaster/tests/functional/test_functional_basic.py | 33 |
1 files changed, 23 insertions, 10 deletions
diff --git a/bitbake/lib/toaster/tests/functional/test_functional_basic.py b/bitbake/lib/toaster/tests/functional/test_functional_basic.py index 067ad99a9c..b0def544ae 100644 --- a/bitbake/lib/toaster/tests/functional/test_functional_basic.py +++ b/bitbake/lib/toaster/tests/functional/test_functional_basic.py | |||
@@ -7,7 +7,8 @@ | |||
7 | # SPDX-License-Identifier: GPL-2.0-only | 7 | # SPDX-License-Identifier: GPL-2.0-only |
8 | # | 8 | # |
9 | 9 | ||
10 | import re | 10 | import re, time |
11 | from django.urls import reverse | ||
11 | from tests.functional.functional_helpers import SeleniumFunctionalTestCase | 12 | from tests.functional.functional_helpers import SeleniumFunctionalTestCase |
12 | from orm.models import Project | 13 | from orm.models import Project |
13 | from selenium.webdriver.common.by import By | 14 | from selenium.webdriver.common.by import By |
@@ -17,11 +18,11 @@ class FuntionalTestBasic(SeleniumFunctionalTestCase): | |||
17 | # testcase (1514) | 18 | # testcase (1514) |
18 | def test_create_slenium_project(self): | 19 | def test_create_slenium_project(self): |
19 | project_name = 'selenium-project' | 20 | project_name = 'selenium-project' |
20 | self.get('') | 21 | self.get(reverse('newproject')) |
21 | self.driver.find_element(By.LINK_TEXT, "To start building, create your first Toaster project").click() | ||
22 | self.driver.find_element(By.ID, "new-project-name").send_keys(project_name) | 22 | self.driver.find_element(By.ID, "new-project-name").send_keys(project_name) |
23 | self.driver.find_element(By.ID, 'projectversion').click() | 23 | self.driver.find_element(By.ID, 'projectversion').click() |
24 | self.driver.find_element(By.ID, "create-project-button").click() | 24 | self.driver.find_element(By.ID, "create-project-button").click() |
25 | time.sleep(2) | ||
25 | element = self.wait_until_visible('#project-created-notification') | 26 | element = self.wait_until_visible('#project-created-notification') |
26 | self.assertTrue(self.element_exists('#project-created-notification'),'Project creation notification not shown') | 27 | self.assertTrue(self.element_exists('#project-created-notification'),'Project creation notification not shown') |
27 | self.assertTrue(project_name in element.text, | 28 | self.assertTrue(project_name in element.text, |
@@ -31,15 +32,18 @@ class FuntionalTestBasic(SeleniumFunctionalTestCase): | |||
31 | 32 | ||
32 | # testcase (1515) | 33 | # testcase (1515) |
33 | def test_verify_left_bar_menu(self): | 34 | def test_verify_left_bar_menu(self): |
34 | self.get('') | 35 | self.get(reverse('all-projects')) |
35 | self.wait_until_visible('#projectstable') | 36 | self.wait_until_visible('#projectstable') |
36 | self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click() | 37 | self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click() |
38 | time.sleep(2) | ||
37 | self.assertTrue(self.element_exists('#config-nav'),'Configuration Tab does not exist') | 39 | self.assertTrue(self.element_exists('#config-nav'),'Configuration Tab does not exist') |
38 | project_URL=self.get_URL() | 40 | project_URL=self.get_URL() |
39 | self.driver.find_element(By.XPATH, '//a[@href="'+project_URL+'"]').click() | 41 | self.driver.find_element(By.XPATH, '//a[@href="'+project_URL+'"]').click() |
42 | time.sleep(2) | ||
40 | 43 | ||
41 | try: | 44 | try: |
42 | self.driver.find_element(By.XPATH, "//*[@id='config-nav']/ul/li/a[@href="+'"'+project_URL+'customimages/"'+"]").click() | 45 | self.driver.find_element(By.XPATH, "//*[@id='config-nav']/ul/li/a[@href="+'"'+project_URL+'customimages/"'+"]").click() |
46 | time.sleep(2) | ||
43 | self.assertTrue(re.search("Custom images",self.driver.find_element(By.XPATH, "//div[@class='col-md-10']").text),'Custom images information is not loading properly') | 47 | self.assertTrue(re.search("Custom images",self.driver.find_element(By.XPATH, "//div[@class='col-md-10']").text),'Custom images information is not loading properly') |
44 | except: | 48 | except: |
45 | self.fail(msg='No Custom images tab available') | 49 | self.fail(msg='No Custom images tab available') |
@@ -78,14 +82,16 @@ class FuntionalTestBasic(SeleniumFunctionalTestCase): | |||
78 | def test_review_configuration_information(self): | 82 | def test_review_configuration_information(self): |
79 | self.get('') | 83 | self.get('') |
80 | self.driver.find_element(By.XPATH, "//div[@id='global-nav']/ul/li/a[@href="+'"'+'/toastergui/projects/'+'"'+"]").click() | 84 | self.driver.find_element(By.XPATH, "//div[@id='global-nav']/ul/li/a[@href="+'"'+'/toastergui/projects/'+'"'+"]").click() |
85 | time.sleep(2) | ||
81 | self.wait_until_visible('#projectstable') | 86 | self.wait_until_visible('#projectstable') |
82 | self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click() | 87 | self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click() |
83 | project_URL=self.get_URL() | 88 | project_URL=self.get_URL() |
84 | 89 | time.sleep(2) | |
85 | try: | 90 | try: |
86 | self.assertTrue(self.element_exists('#machine-section'),'Machine section for the project configuration page does not exist') | 91 | self.assertTrue(self.element_exists('#machine-section'),'Machine section for the project configuration page does not exist') |
87 | self.assertTrue(re.search("qemux86",self.driver.find_element(By.XPATH, "//span[@id='project-machine-name']").text),'The machine type is not assigned') | 92 | self.assertTrue(re.search("qemux86",self.driver.find_element(By.XPATH, "//span[@id='project-machine-name']").text),'The machine type is not assigned') |
88 | self.driver.find_element(By.XPATH, "//span[@id='change-machine-toggle']").click() | 93 | self.driver.find_element(By.XPATH, "//span[@id='change-machine-toggle']").click() |
94 | time.sleep(2) | ||
89 | self.wait_until_visible('#select-machine-form') | 95 | self.wait_until_visible('#select-machine-form') |
90 | self.wait_until_visible('#cancel-machine-change') | 96 | self.wait_until_visible('#cancel-machine-change') |
91 | self.driver.find_element(By.XPATH, "//form[@id='select-machine-form']/a[@id='cancel-machine-change']").click() | 97 | self.driver.find_element(By.XPATH, "//form[@id='select-machine-form']/a[@id='cancel-machine-change']").click() |
@@ -123,13 +129,16 @@ class FuntionalTestBasic(SeleniumFunctionalTestCase): | |||
123 | def test_verify_machine_information(self): | 129 | def test_verify_machine_information(self): |
124 | self.get('') | 130 | self.get('') |
125 | self.driver.find_element(By.XPATH, "//div[@id='global-nav']/ul/li/a[@href="+'"'+'/toastergui/projects/'+'"'+"]").click() | 131 | self.driver.find_element(By.XPATH, "//div[@id='global-nav']/ul/li/a[@href="+'"'+'/toastergui/projects/'+'"'+"]").click() |
132 | time.sleep(2) | ||
126 | self.wait_until_visible('#projectstable') | 133 | self.wait_until_visible('#projectstable') |
127 | self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click() | 134 | self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click() |
135 | time.sleep(2) | ||
128 | 136 | ||
129 | try: | 137 | try: |
130 | self.assertTrue(self.element_exists('#machine-section'),'Machine section for the project configuration page does not exist') | 138 | self.assertTrue(self.element_exists('#machine-section'),'Machine section for the project configuration page does not exist') |
131 | self.assertTrue(re.search("qemux86",self.driver.find_element(By.ID, "project-machine-name").text),'The machine type is not assigned') | 139 | self.assertTrue(re.search("qemux86",self.driver.find_element(By.ID, "project-machine-name").text),'The machine type is not assigned') |
132 | self.driver.find_element(By.ID, "change-machine-toggle").click() | 140 | self.driver.find_element(By.ID, "change-machine-toggle").click() |
141 | time.sleep(2) | ||
133 | self.wait_until_visible('#select-machine-form') | 142 | self.wait_until_visible('#select-machine-form') |
134 | self.wait_until_visible('#cancel-machine-change') | 143 | self.wait_until_visible('#cancel-machine-change') |
135 | self.driver.find_element(By.ID, "cancel-machine-change").click() | 144 | self.driver.find_element(By.ID, "cancel-machine-change").click() |
@@ -140,14 +149,15 @@ class FuntionalTestBasic(SeleniumFunctionalTestCase): | |||
140 | def test_verify_most_built_recipes_information(self): | 149 | def test_verify_most_built_recipes_information(self): |
141 | self.get('') | 150 | self.get('') |
142 | self.driver.find_element(By.XPATH, "//div[@id='global-nav']/ul/li/a[@href="+'"'+'/toastergui/projects/'+'"'+"]").click() | 151 | self.driver.find_element(By.XPATH, "//div[@id='global-nav']/ul/li/a[@href="+'"'+'/toastergui/projects/'+'"'+"]").click() |
143 | 152 | time.sleep(2) | |
144 | self.wait_until_visible('#projectstable') | 153 | self.wait_until_visible('#projectstable') |
145 | self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click() | 154 | self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click() |
146 | project_URL=self.get_URL() | 155 | project_URL=self.get_URL() |
147 | 156 | time.sleep(2) | |
148 | try: | 157 | try: |
149 | self.assertTrue(re.search("You haven't built any recipes yet",self.driver.find_element(By.ID, "no-most-built").text),'Default message of no builds is not present') | 158 | self.assertTrue(re.search("You haven't built any recipes yet",self.driver.find_element(By.ID, "no-most-built").text),'Default message of no builds is not present') |
150 | self.driver.find_element(By.XPATH, "//div[@id='no-most-built']/p/a[@href="+'"'+project_URL+'images/"'+"]").click() | 159 | self.driver.find_element(By.XPATH, "//div[@id='no-most-built']/p/a[@href="+'"'+project_URL+'images/"'+"]").click() |
160 | time.sleep(2) | ||
151 | self.assertTrue(re.search("Compatible image recipes",self.driver.find_element(By.XPATH, "//div[@class='col-md-10']").text),'The Choose a recipe to build link is not working properly') | 161 | self.assertTrue(re.search("Compatible image recipes",self.driver.find_element(By.XPATH, "//div[@class='col-md-10']").text),'The Choose a recipe to build link is not working properly') |
152 | except: | 162 | except: |
153 | self.fail(msg='No Most built information in project detail page') | 163 | self.fail(msg='No Most built information in project detail page') |
@@ -156,8 +166,10 @@ class FuntionalTestBasic(SeleniumFunctionalTestCase): | |||
156 | def test_verify_project_release_information(self): | 166 | def test_verify_project_release_information(self): |
157 | self.get('') | 167 | self.get('') |
158 | self.driver.find_element(By.XPATH, "//div[@id='global-nav']/ul/li/a[@href="+'"'+'/toastergui/projects/'+'"'+"]").click() | 168 | self.driver.find_element(By.XPATH, "//div[@id='global-nav']/ul/li/a[@href="+'"'+'/toastergui/projects/'+'"'+"]").click() |
169 | time.sleep(2) | ||
159 | self.wait_until_visible('#projectstable') | 170 | self.wait_until_visible('#projectstable') |
160 | self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click() | 171 | self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click() |
172 | time.sleep(2) | ||
161 | 173 | ||
162 | try: | 174 | try: |
163 | self.assertTrue(re.search("Yocto Project master",self.driver.find_element(By.ID, "project-release-title").text),'The project release is not defined') | 175 | self.assertTrue(re.search("Yocto Project master",self.driver.find_element(By.ID, "project-release-title").text),'The project release is not defined') |
@@ -171,12 +183,12 @@ class FuntionalTestBasic(SeleniumFunctionalTestCase): | |||
171 | self.wait_until_visible('#projectstable') | 183 | self.wait_until_visible('#projectstable') |
172 | self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click() | 184 | self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click() |
173 | project_URL=self.get_URL() | 185 | project_URL=self.get_URL() |
174 | 186 | time.sleep(2) | |
175 | try: | 187 | try: |
176 | self.driver.find_element(By.XPATH, "//div[@id='layer-container']") | 188 | self.driver.find_element(By.XPATH, "//div[@id='layer-container']") |
177 | self.assertTrue(re.search("3",self.driver.find_element(By.ID, "project-layers-count").text),'There should be 3 layers listed in the layer count') | 189 | self.assertTrue(re.search("3",self.driver.find_element(By.ID, "project-layers-count").text),'There should be 3 layers listed in the layer count') |
178 | layer_list = self.driver.find_element(By.ID, "layers-in-project-list") | 190 | layer_list = self.driver.find_element(By.ID, "layers-in-project-list") |
179 | layers = layer_list.find_element(By.TAG_NAME, "li") | 191 | layers = layer_list.find_elements(By.TAG_NAME, "li") |
180 | 192 | ||
181 | for layer in layers: | 193 | for layer in layers: |
182 | if re.match ("openembedded-core",layer.text): | 194 | if re.match ("openembedded-core",layer.text): |
@@ -199,10 +211,11 @@ class FuntionalTestBasic(SeleniumFunctionalTestCase): | |||
199 | def test_verify_project_detail_links(self): | 211 | def test_verify_project_detail_links(self): |
200 | self.get('') | 212 | self.get('') |
201 | self.driver.find_element(By.XPATH, "//div[@id='global-nav']/ul/li/a[@href="+'"'+'/toastergui/projects/'+'"'+"]").click() | 213 | self.driver.find_element(By.XPATH, "//div[@id='global-nav']/ul/li/a[@href="+'"'+'/toastergui/projects/'+'"'+"]").click() |
214 | time.sleep(2) | ||
202 | self.wait_until_visible('#projectstable') | 215 | self.wait_until_visible('#projectstable') |
203 | self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click() | 216 | self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click() |
204 | project_URL=self.get_URL() | 217 | project_URL=self.get_URL() |
205 | 218 | time.sleep(2) | |
206 | self.driver.find_element(By.XPATH, "//div[@id='project-topbar']/ul[@class='nav nav-tabs']/li[@id='topbar-configuration-tab']/a[@href="+'"'+project_URL+'"'+"]").click() | 219 | self.driver.find_element(By.XPATH, "//div[@id='project-topbar']/ul[@class='nav nav-tabs']/li[@id='topbar-configuration-tab']/a[@href="+'"'+project_URL+'"'+"]").click() |
207 | self.assertTrue(re.search("Configuration",self.driver.find_element(By.XPATH, "//div[@id='project-topbar']/ul[@class='nav nav-tabs']/li[@id='topbar-configuration-tab']/a[@href="+'"'+project_URL+'"'+"]").text), 'Configuration tab in project topbar is misspelled') | 220 | self.assertTrue(re.search("Configuration",self.driver.find_element(By.XPATH, "//div[@id='project-topbar']/ul[@class='nav nav-tabs']/li[@id='topbar-configuration-tab']/a[@href="+'"'+project_URL+'"'+"]").text), 'Configuration tab in project topbar is misspelled') |
208 | 221 | ||