summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/toaster/tests/functional/test_functional_basic.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/toaster/tests/functional/test_functional_basic.py')
-rw-r--r--bitbake/lib/toaster/tests/functional/test_functional_basic.py195
1 files changed, 111 insertions, 84 deletions
diff --git a/bitbake/lib/toaster/tests/functional/test_functional_basic.py b/bitbake/lib/toaster/tests/functional/test_functional_basic.py
index 5683e3873e..e4070fbb88 100644
--- a/bitbake/lib/toaster/tests/functional/test_functional_basic.py
+++ b/bitbake/lib/toaster/tests/functional/test_functional_basic.py
@@ -8,104 +8,129 @@
8# 8#
9 9
10import re 10import re
11from django.urls import reverse
12import pytest
11from tests.functional.functional_helpers import SeleniumFunctionalTestCase 13from tests.functional.functional_helpers import SeleniumFunctionalTestCase
12from orm.models import Project 14from orm.models import Project
15from selenium.webdriver.common.by import By
13 16
17from tests.functional.utils import get_projectId_from_url
18
19
20@pytest.mark.django_db
21@pytest.mark.order("second_to_last")
14class FuntionalTestBasic(SeleniumFunctionalTestCase): 22class FuntionalTestBasic(SeleniumFunctionalTestCase):
23 """Basic functional tests for Toaster"""
24 project_id = None
25
26 def setUp(self):
27 super(FuntionalTestBasic, self).setUp()
28 if not FuntionalTestBasic.project_id:
29 self._create_slenium_project()
30 current_url = self.driver.current_url
31 FuntionalTestBasic.project_id = get_projectId_from_url(current_url)
15 32
16# testcase (1514) 33# testcase (1514)
17 def test_create_slenium_project(self): 34 def _create_slenium_project(self):
18 project_name = 'selenium-project' 35 project_name = 'selenium-project'
19 self.get('') 36 self.get(reverse('newproject'))
20 self.driver.find_element_by_link_text("To start building, create your first Toaster project").click() 37 self.wait_until_visible('#new-project-name', poll=3)
21 self.driver.find_element_by_id("new-project-name").send_keys(project_name) 38 self.driver.find_element(By.ID, "new-project-name").send_keys(project_name)
22 self.driver.find_element_by_id('projectversion').click() 39 self.driver.find_element(By.ID, 'projectversion').click()
23 self.driver.find_element_by_id("create-project-button").click() 40 self.driver.find_element(By.ID, "create-project-button").click()
24 element = self.wait_until_visible('#project-created-notification') 41 element = self.wait_until_visible('#project-created-notification', poll=10)
25 self.assertTrue(self.element_exists('#project-created-notification'),'Project creation notification not shown') 42 self.assertTrue(self.element_exists('#project-created-notification'),'Project creation notification not shown')
26 self.assertTrue(project_name in element.text, 43 self.assertTrue(project_name in element.text,
27 "New project name not in new project notification") 44 "New project name not in new project notification")
28 self.assertTrue(Project.objects.filter(name=project_name).count(), 45 self.assertTrue(Project.objects.filter(name=project_name).count(),
29 "New project not found in database") 46 "New project not found in database")
47 return Project.objects.last().id
30 48
31 # testcase (1515) 49 # testcase (1515)
32 def test_verify_left_bar_menu(self): 50 def test_verify_left_bar_menu(self):
33 self.get('') 51 self.get(reverse('all-projects'))
34 self.wait_until_visible('#projectstable') 52 self.wait_until_present('#projectstable', poll=10)
35 self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click() 53 self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click()
54 self.wait_until_present('#config-nav', poll=10)
36 self.assertTrue(self.element_exists('#config-nav'),'Configuration Tab does not exist') 55 self.assertTrue(self.element_exists('#config-nav'),'Configuration Tab does not exist')
37 project_URL=self.get_URL() 56 project_URL=self.get_URL()
38 self.driver.find_element_by_xpath('//a[@href="'+project_URL+'"]').click() 57 self.driver.find_element(By.XPATH, '//a[@href="'+project_URL+'"]').click()
58 self.wait_until_present('#config-nav', poll=10)
39 59
40 try: 60 try:
41 self.driver.find_element_by_xpath("//*[@id='config-nav']/ul/li/a[@href="+'"'+project_URL+'customimages/"'+"]").click() 61 self.driver.find_element(By.XPATH, "//*[@id='config-nav']/ul/li/a[@href="+'"'+project_URL+'customimages/"'+"]").click()
42 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') 62 self.wait_until_present('#config-nav', poll=10)
63 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')
43 except: 64 except:
44 self.fail(msg='No Custom images tab available') 65 self.fail(msg='No Custom images tab available')
45 66
46 try: 67 try:
47 self.driver.find_element_by_xpath("//*[@id='config-nav']/ul/li/a[@href="+'"'+project_URL+'images/"'+"]").click() 68 self.driver.find_element(By.XPATH, "//*[@id='config-nav']/ul/li/a[@href="+'"'+project_URL+'images/"'+"]").click()
48 self.assertTrue(re.search("Compatible image recipes",self.driver.find_element_by_xpath("//div[@class='col-md-10']").text),'The Compatible image recipes information is not loading properly') 69 self.wait_until_present('#config-nav', poll=10)
70 self.assertTrue(re.search("Compatible image recipes",self.driver.find_element(By.XPATH, "//div[@class='col-md-10']").text),'The Compatible image recipes information is not loading properly')
49 except: 71 except:
50 self.fail(msg='No Compatible image tab available') 72 self.fail(msg='No Compatible image tab available')
51 73
52 try: 74 try:
53 self.driver.find_element_by_xpath("//*[@id='config-nav']/ul/li/a[@href="+'"'+project_URL+'softwarerecipes/"'+"]").click() 75 self.driver.find_element(By.XPATH, "//*[@id='config-nav']/ul/li/a[@href="+'"'+project_URL+'softwarerecipes/"'+"]").click()
54 self.assertTrue(re.search("Compatible software recipes",self.driver.find_element_by_xpath("//div[@class='col-md-10']").text),'The Compatible software recipe information is not loading properly') 76 self.wait_until_present('#config-nav', poll=10)
77 self.assertTrue(re.search("Compatible software recipes",self.driver.find_element(By.XPATH, "//div[@class='col-md-10']").text),'The Compatible software recipe information is not loading properly')
55 except: 78 except:
56 self.fail(msg='No Compatible software recipe tab available') 79 self.fail(msg='No Compatible software recipe tab available')
57 80
58 try: 81 try:
59 self.driver.find_element_by_xpath("//*[@id='config-nav']/ul/li/a[@href="+'"'+project_URL+'machines/"'+"]").click() 82 self.driver.find_element(By.XPATH, "//*[@id='config-nav']/ul/li/a[@href="+'"'+project_URL+'machines/"'+"]").click()
60 self.assertTrue(re.search("Compatible machines",self.driver.find_element_by_xpath("//div[@class='col-md-10']").text),'The Compatible machine information is not loading properly') 83 self.wait_until_present('#config-nav', poll=10)
84 self.assertTrue(re.search("Compatible machines",self.driver.find_element(By.XPATH, "//div[@class='col-md-10']").text),'The Compatible machine information is not loading properly')
61 except: 85 except:
62 self.fail(msg='No Compatible machines tab available') 86 self.fail(msg='No Compatible machines tab available')
63 87
64 try: 88 try:
65 self.driver.find_element_by_xpath("//*[@id='config-nav']/ul/li/a[@href="+'"'+project_URL+'layers/"'+"]").click() 89 self.driver.find_element(By.XPATH, "//*[@id='config-nav']/ul/li/a[@href="+'"'+project_URL+'layers/"'+"]").click()
66 self.assertTrue(re.search("Compatible layers",self.driver.find_element_by_xpath("//div[@class='col-md-10']").text),'The Compatible layer information is not loading properly') 90 self.wait_until_present('#config-nav', poll=10)
91 self.assertTrue(re.search("Compatible layers",self.driver.find_element(By.XPATH, "//div[@class='col-md-10']").text),'The Compatible layer information is not loading properly')
67 except: 92 except:
68 self.fail(msg='No Compatible layers tab available') 93 self.fail(msg='No Compatible layers tab available')
69 94
70 try: 95 try:
71 self.driver.find_element_by_xpath("//*[@id='config-nav']/ul/li/a[@href="+'"'+project_URL+'configuration"'+"]").click() 96 self.driver.find_element(By.XPATH, "//*[@id='config-nav']/ul/li/a[@href="+'"'+project_URL+'configuration"'+"]").click()
72 self.assertTrue(re.search("Bitbake variables",self.driver.find_element_by_xpath("//div[@class='col-md-10']").text),'The Bitbake variables information is not loading properly') 97 self.wait_until_present('#config-nav', poll=10)
98 self.assertTrue(re.search("Bitbake variables",self.driver.find_element(By.XPATH, "//div[@class='col-md-10']").text),'The Bitbake variables information is not loading properly')
73 except: 99 except:
74 self.fail(msg='No Bitbake variables tab available') 100 self.fail(msg='No Bitbake variables tab available')
75 101
76# testcase (1516) 102# testcase (1516)
77 def test_review_configuration_information(self): 103 def test_review_configuration_information(self):
78 self.get('') 104 self.get(reverse('all-projects'))
79 self.driver.find_element_by_xpath("//div[@id='global-nav']/ul/li/a[@href="+'"'+'/toastergui/projects/'+'"'+"]").click() 105 self.wait_until_present('#projectstable', poll=10)
80 self.wait_until_visible('#projectstable')
81 self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click() 106 self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click()
82 project_URL=self.get_URL() 107 project_URL=self.get_URL()
83 108 self.wait_until_present('#config-nav', poll=10)
84 try: 109 try:
85 self.assertTrue(self.element_exists('#machine-section'),'Machine section for the project configuration page does not exist') 110 self.assertTrue(self.element_exists('#machine-section'),'Machine section for the project configuration page does not exist')
86 self.assertTrue(re.search("qemux86",self.driver.find_element_by_xpath("//span[@id='project-machine-name']").text),'The machine type is not assigned') 111 self.assertTrue(re.search("qemux86-64",self.driver.find_element(By.XPATH, "//span[@id='project-machine-name']").text),'The machine type is not assigned')
87 self.driver.find_element_by_xpath("//span[@id='change-machine-toggle']").click() 112 self.driver.find_element(By.XPATH, "//span[@id='change-machine-toggle']").click()
88 self.wait_until_visible('#select-machine-form') 113 self.wait_until_visible('#select-machine-form', poll=10)
89 self.wait_until_visible('#cancel-machine-change') 114 self.wait_until_visible('#cancel-machine-change', poll=10)
90 self.driver.find_element_by_xpath("//form[@id='select-machine-form']/a[@id='cancel-machine-change']").click() 115 self.driver.find_element(By.XPATH, "//form[@id='select-machine-form']/a[@id='cancel-machine-change']").click()
91 except: 116 except:
92 self.fail(msg='The machine information is wrong in the configuration page') 117 self.fail(msg='The machine information is wrong in the configuration page')
93 118
94 try: 119 try:
95 self.driver.find_element_by_id('no-most-built') 120 self.driver.find_element(By.ID, 'no-most-built')
96 except: 121 except:
97 self.fail(msg='No Most built information in project detail page') 122 self.fail(msg='No Most built information in project detail page')
98 123
99 try: 124 try:
100 self.assertTrue(re.search("Yocto Project master",self.driver.find_element_by_xpath("//span[@id='project-release-title']").text),'The project release is not defined') 125 self.assertTrue(re.search("Yocto Project master",self.driver.find_element(By.XPATH, "//span[@id='project-release-title']").text),'The project release is not defined')
101 except: 126 except:
102 self.fail(msg='No project release title information in project detail page') 127 self.fail(msg='No project release title information in project detail page')
103 128
104 try: 129 try:
105 self.driver.find_element_by_xpath("//div[@id='layer-container']") 130 self.driver.find_element(By.XPATH, "//div[@id='layer-container']")
106 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') 131 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')
107 layer_list = self.driver.find_element_by_id("layers-in-project-list") 132 layer_list = self.driver.find_element(By.ID, "layers-in-project-list")
108 layers = layer_list.find_elements_by_tag_name("li") 133 layers = layer_list.find_elements(By.TAG_NAME, "li")
109 for layer in layers: 134 for layer in layers:
110 if re.match ("openembedded-core",layer.text): 135 if re.match ("openembedded-core",layer.text):
111 print ("openembedded-core layer is a default layer in the project configuration") 136 print ("openembedded-core layer is a default layer in the project configuration")
@@ -120,61 +145,60 @@ class FuntionalTestBasic(SeleniumFunctionalTestCase):
120 145
121# testcase (1517) 146# testcase (1517)
122 def test_verify_machine_information(self): 147 def test_verify_machine_information(self):
123 self.get('') 148 self.get(reverse('all-projects'))
124 self.driver.find_element_by_xpath("//div[@id='global-nav']/ul/li/a[@href="+'"'+'/toastergui/projects/'+'"'+"]").click() 149 self.wait_until_present('#projectstable', poll=10)
125 self.wait_until_visible('#projectstable')
126 self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click() 150 self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click()
151 self.wait_until_present('#config-nav', poll=10)
127 152
128 try: 153 try:
129 self.assertTrue(self.element_exists('#machine-section'),'Machine section for the project configuration page does not exist') 154 self.assertTrue(self.element_exists('#machine-section'),'Machine section for the project configuration page does not exist')
130 self.assertTrue(re.search("qemux86",self.driver.find_element_by_id("project-machine-name").text),'The machine type is not assigned') 155 self.assertTrue(re.search("qemux86-64",self.driver.find_element(By.ID, "project-machine-name").text),'The machine type is not assigned')
131 self.driver.find_element_by_id("change-machine-toggle").click() 156 self.driver.find_element(By.ID, "change-machine-toggle").click()
132 self.wait_until_visible('#select-machine-form') 157 self.wait_until_visible('#select-machine-form', poll=10)
133 self.wait_until_visible('#cancel-machine-change') 158 self.wait_until_visible('#cancel-machine-change', poll=10)
134 self.driver.find_element_by_id("cancel-machine-change").click() 159 self.driver.find_element(By.ID, "cancel-machine-change").click()
135 except: 160 except:
136 self.fail(msg='The machine information is wrong in the configuration page') 161 self.fail(msg='The machine information is wrong in the configuration page')
137 162
138# testcase (1518) 163# testcase (1518)
139 def test_verify_most_built_recipes_information(self): 164 def test_verify_most_built_recipes_information(self):
140 self.get('') 165 self.get(reverse('all-projects'))
141 self.driver.find_element_by_xpath("//div[@id='global-nav']/ul/li/a[@href="+'"'+'/toastergui/projects/'+'"'+"]").click() 166 self.wait_until_present('#projectstable', poll=10)
142 self.wait_until_visible('#projectstable')
143 self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click() 167 self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click()
168 self.wait_until_present('#config-nav', poll=10)
144 project_URL=self.get_URL() 169 project_URL=self.get_URL()
145
146 try: 170 try:
147 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') 171 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')
148 self.driver.find_element_by_xpath("//div[@id='no-most-built']/p/a[@href="+'"'+project_URL+'images/"'+"]").click() 172 self.driver.find_element(By.XPATH, "//div[@id='no-most-built']/p/a[@href="+'"'+project_URL+'images/"'+"]").click()
149 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') 173 self.wait_until_present('#config-nav', poll=10)
174 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')
150 except: 175 except:
151 self.fail(msg='No Most built information in project detail page') 176 self.fail(msg='No Most built information in project detail page')
152 177
153# testcase (1519) 178# testcase (1519)
154 def test_verify_project_release_information(self): 179 def test_verify_project_release_information(self):
155 self.get('') 180 self.get(reverse('all-projects'))
156 self.driver.find_element_by_xpath("//div[@id='global-nav']/ul/li/a[@href="+'"'+'/toastergui/projects/'+'"'+"]").click() 181 self.wait_until_present('#projectstable', poll=10)
157 self.wait_until_visible('#projectstable')
158 self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click() 182 self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click()
183 self.wait_until_present('#config-nav', poll=10)
159 184
160 try: 185 try:
161 self.assertTrue(re.search("Yocto Project master",self.driver.find_element_by_id("project-release-title").text),'The project release is not defined') 186 self.assertTrue(re.search("Yocto Project master",self.driver.find_element(By.ID, "project-release-title").text),'The project release is not defined')
162 except: 187 except:
163 self.fail(msg='No project release title information in project detail page') 188 self.fail(msg='No project release title information in project detail page')
164 189
165# testcase (1520) 190# testcase (1520)
166 def test_verify_layer_information(self): 191 def test_verify_layer_information(self):
167 self.get('') 192 self.get(reverse('all-projects'))
168 self.driver.find_element_by_xpath("//div[@id='global-nav']/ul/li/a[@href="+'"'+'/toastergui/projects/'+'"'+"]").click() 193 self.wait_until_present('#projectstable', poll=10)
169 self.wait_until_visible('#projectstable')
170 self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click() 194 self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click()
195 self.wait_until_present('#config-nav', poll=10)
171 project_URL=self.get_URL() 196 project_URL=self.get_URL()
172
173 try: 197 try:
174 self.driver.find_element_by_xpath("//div[@id='layer-container']") 198 self.driver.find_element(By.XPATH, "//div[@id='layer-container']")
175 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') 199 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')
176 layer_list = self.driver.find_element_by_id("layers-in-project-list") 200 layer_list = self.driver.find_element(By.ID, "layers-in-project-list")
177 layers = layer_list.find_elements_by_tag_name("li") 201 layers = layer_list.find_elements(By.TAG_NAME, "li")
178 202
179 for layer in layers: 203 for layer in layers:
180 if re.match ("openembedded-core",layer.text): 204 if re.match ("openembedded-core",layer.text):
@@ -186,43 +210,46 @@ class FuntionalTestBasic(SeleniumFunctionalTestCase):
186 else: 210 else:
187 self.fail(msg='default layers are missing from the project configuration') 211 self.fail(msg='default layers are missing from the project configuration')
188 212
189 self.driver.find_element_by_xpath("//input[@id='layer-add-input']") 213 self.driver.find_element(By.XPATH, "//input[@id='layer-add-input']")
190 self.driver.find_element_by_xpath("//button[@id='add-layer-btn']") 214 self.driver.find_element(By.XPATH, "//button[@id='add-layer-btn']")
191 self.driver.find_element_by_xpath("//div[@id='layer-container']/form[@class='form-inline']/p/a[@id='view-compatible-layers']") 215 self.driver.find_element(By.XPATH, "//div[@id='layer-container']/form[@class='form-inline']/p/a[@id='view-compatible-layers']")
192 self.driver.find_element_by_xpath("//div[@id='layer-container']/form[@class='form-inline']/p/a[@href="+'"'+project_URL+'importlayer"'+"]") 216 self.driver.find_element(By.XPATH, "//div[@id='layer-container']/form[@class='form-inline']/p/a[@href="+'"'+project_URL+'importlayer"'+"]")
193 except: 217 except:
194 self.fail(msg='No Layer information in project detail page') 218 self.fail(msg='No Layer information in project detail page')
195 219
196# testcase (1521) 220# testcase (1521)
197 def test_verify_project_detail_links(self): 221 def test_verify_project_detail_links(self):
198 self.get('') 222 self.get(reverse('all-projects'))
199 self.driver.find_element_by_xpath("//div[@id='global-nav']/ul/li/a[@href="+'"'+'/toastergui/projects/'+'"'+"]").click() 223 self.wait_until_present('#projectstable', poll=10)
200 self.wait_until_visible('#projectstable')
201 self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click() 224 self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click()
225 self.wait_until_present('#config-nav', poll=10)
202 project_URL=self.get_URL() 226 project_URL=self.get_URL()
203 227 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()
204 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() 228 self.wait_until_present('#config-nav', poll=10)
205 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') 229 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')
206 230
207 try: 231 try:
208 self.driver.find_element_by_xpath("//div[@id='project-topbar']/ul[@class='nav nav-tabs']/li/a[@href="+'"'+project_URL+'builds/"'+"]").click() 232 self.driver.find_element(By.XPATH, "//div[@id='project-topbar']/ul[@class='nav nav-tabs']/li/a[@href="+'"'+project_URL+'builds/"'+"]").click()
209 self.assertTrue(re.search("Builds",self.driver.find_element_by_xpath("//div[@id='project-topbar']/ul[@class='nav nav-tabs']/li/a[@href="+'"'+project_URL+'builds/"'+"]").text), 'Builds tab in project topbar is misspelled') 233 self.wait_until_visible('#project-topbar', poll=10)
210 self.driver.find_element_by_xpath("//div[@id='empty-state-projectbuildstable']") 234 self.assertTrue(re.search("Builds",self.driver.find_element(By.XPATH, "//div[@id='project-topbar']/ul[@class='nav nav-tabs']/li/a[@href="+'"'+project_URL+'builds/"'+"]").text), 'Builds tab in project topbar is misspelled')
235 self.driver.find_element(By.XPATH, "//div[@id='empty-state-projectbuildstable']")
211 except: 236 except:
212 self.fail(msg='Builds tab information is not present') 237 self.fail(msg='Builds tab information is not present')
213 238
214 try: 239 try:
215 self.driver.find_element_by_xpath("//div[@id='project-topbar']/ul[@class='nav nav-tabs']/li/a[@href="+'"'+project_URL+'importlayer"'+"]").click() 240 self.driver.find_element(By.XPATH, "//div[@id='project-topbar']/ul[@class='nav nav-tabs']/li/a[@href="+'"'+project_URL+'importlayer"'+"]").click()
216 self.assertTrue(re.search("Import layer",self.driver.find_element_by_xpath("//div[@id='project-topbar']/ul[@class='nav nav-tabs']/li/a[@href="+'"'+project_URL+'importlayer"'+"]").text), 'Import layer tab in project topbar is misspelled') 241 self.wait_until_visible('#project-topbar', poll=10)
217 self.driver.find_element_by_xpath("//fieldset[@id='repo-select']") 242 self.assertTrue(re.search("Import layer",self.driver.find_element(By.XPATH, "//div[@id='project-topbar']/ul[@class='nav nav-tabs']/li/a[@href="+'"'+project_URL+'importlayer"'+"]").text), 'Import layer tab in project topbar is misspelled')
218 self.driver.find_element_by_xpath("//fieldset[@id='git-repo']") 243 self.driver.find_element(By.XPATH, "//fieldset[@id='repo-select']")
244 self.driver.find_element(By.XPATH, "//fieldset[@id='git-repo']")
219 except: 245 except:
220 self.fail(msg='Import layer tab not loading properly') 246 self.fail(msg='Import layer tab not loading properly')
221 247
222 try: 248 try:
223 self.driver.find_element_by_xpath("//div[@id='project-topbar']/ul[@class='nav nav-tabs']/li/a[@href="+'"'+project_URL+'newcustomimage/"'+"]").click() 249 self.driver.find_element(By.XPATH, "//div[@id='project-topbar']/ul[@class='nav nav-tabs']/li/a[@href="+'"'+project_URL+'newcustomimage/"'+"]").click()
224 self.assertTrue(re.search("New custom image",self.driver.find_element_by_xpath("//div[@id='project-topbar']/ul[@class='nav nav-tabs']/li/a[@href="+'"'+project_URL+'newcustomimage/"'+"]").text), 'New custom image tab in project topbar is misspelled') 250 self.wait_until_visible('#project-topbar', poll=10)
225 self.assertTrue(re.search("Select the image recipe you want to customise",self.driver.find_element_by_xpath("//div[@class='col-md-12']/h2").text),'The new custom image tab is not loading correctly') 251 self.assertTrue(re.search("New custom image",self.driver.find_element(By.XPATH, "//div[@id='project-topbar']/ul[@class='nav nav-tabs']/li/a[@href="+'"'+project_URL+'newcustomimage/"'+"]").text), 'New custom image tab in project topbar is misspelled')
252 self.assertTrue(re.search("Select the image recipe you want to customise",self.driver.find_element(By.XPATH, "//div[@class='col-md-12']/h2").text),'The new custom image tab is not loading correctly')
226 except: 253 except:
227 self.fail(msg='New custom image tab not loading properly') 254 self.fail(msg='New custom image tab not loading properly')
228 255