Update UI tests to work with changes in Toaster 2.0
cover Update UI tests to work with changes in Toaster 2.0
Add additional back-end tests and update all tests to work for Toaster 2.0.
The following changes since commit d27c3c279025a7c4bd1c0851ad40195cad318937 (poky-contrib, toaster-next):
toasterui: process CommandStarted event (2015-12-02 09:40:21 -0800)
are available in the git repository at:
git://git.yoctoproject.org/poky-contrib elliot/submit/mihai/ui-tests-update
http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=elliot/submit/mihai/ui-tests-update
Mihail Stanciu (2):
toaster: tests Automated build-mode backend tests
toaster: tests Update UI tests to work with 2.0 changes
.../contrib/tts/toasteruitest/toaster.sqlite | 1 + .../tts/toasteruitest/toaster_automation_test.py | 702 ++++++++++++++++++--- .../contrib/tts/toasteruitest/toasterconf.json | 1 + 3 files changed, 623 insertions(+), 81 deletions(-) create mode 120000 bitbake/lib/toaster/contrib/tts/toasteruitest/toaster.sqlite create mode 120000 bitbake/lib/toaster/contrib/tts/toasteruitest/toasterconf.json
--
1.9.3
---------------------------------------------------------------------
Intel Corporation (UK) Limited
Registered No. 1134945 (England)
Registered Office: Pipers Way, Swindon SN3 1RJ
VAT No: 860 2173 47
This e-mail and any attachments may contain confidential material for the sole use of the intended recipient(s). Any review or distribution by others is strictly prohibited. If you are not the intended recipient, please contact the sender and delete all copies.
PATCH 1/2 toaster: tests Automated build-mode backend tests
From: Mihail Stanciu <[email protected]>
Add tests to check various backend scenarios that
require UI interaction.
Add necessary files for above tests (the sqlite file and the default config json).
--- .../contrib/tts/toasteruitest/toaster.sqlite | 1 + .../tts/toasteruitest/toaster_automation_test.py | 383 ++++++++++++++++++++- .../contrib/tts/toasteruitest/toasterconf.json | 1 + 3 files changed, 384 insertions(+), 1 deletion(-) create mode 120000 bitbake/lib/toaster/contrib/tts/toasteruitest/toaster.sqlite create mode 120000 bitbake/lib/toaster/contrib/tts/toasteruitest/toasterconf.json
lib/toaster/contrib/tts/toasteruitest/toaster.sqlite new file +1 -0
@@ -0,0 +1 @@ +../../../../../../toaster.sqlite
lib/toaster/contrib/tts/toasteruitest/toaster_automation_test.py +382 -1
398 lines not on this page · raw message
lib/toaster/contrib/tts/toasteruitest/toasterconf.json new file +1 -0
@@ -0,0 +1 @@ +../../../../../../meta-yocto/conf/toasterconf.json
Signature · 12 lines
1.9.3 --------------------------------------------------------------------- Intel Corporation (UK) Limited Registered No. 1134945 (England) Registered Office: Pipers Way, Swindon SN3 1RJ VAT No: 860 2173 47 This e-mail and any attachments may contain confidential material for the sole use of the intended recipient(s). Any review or distribution by others is strictly prohibited. If you are not the intended recipient, please contact the sender and delete all copies.
PATCH 2/2 toaster: tests Update UI tests to work with 2.0 changes
From: Mihail Stanciu <[email protected]>
Update tests that were referencing items removed in 2.0.
Update most xpath elements left to use IDs.
--- .../tts/toasteruitest/toaster_automation_test.py | 335 +++++++++++++++------ 1 file changed, 247 insertions(+), 88 deletions(-)
lib/toaster/contrib/tts/toasteruitest/toaster_automation_test.py +247 -88
@@ -597,7 +597,7 @@ class toaster_cases_base(unittest.TestCase): def is_text_present (self, patterns): for pattern in patterns: if str(pattern) not in self.driver.page_source: - print pattern + print 'Text "'+pattern+'" is missing' return False return True
@@ -606,6 +606,7 @@ class toaster_cases_base(unittest.TestCase): try: self.driver.find_element(how, what) except NoSuchElementException, e: + print 'Could not find element '+str(what)+' by ' + str(how) return False return True
@@ -744,7 +745,7 @@ class toaster_cases(toaster_cases_base): self.driver.find_element_by_id("started_on").click() self.driver.find_element_by_id("edit-columns-button").click() # step 4 - items = ["Outcome", "Completed on", "Started on", "Failed tasks", "Errors", "Warnings"] + items = ["Outcome", "Completed on", "Started on"] for item in items: try: temp_element = self.find_element_by_text_in_table('otable', item)
@@ -810,10 +811,9 @@ class toaster_cases(toaster_cases_base): self.driver.find_element_by_id("edit-columns-button").click() self.driver.find_element_by_id("cpu_used").click() self.driver.find_element_by_id("disk_io").click() - self.driver.find_element_by_id("task_log").click() self.driver.find_element_by_id("recipe_version").click() self.driver.find_element_by_id("time_taken").click() - self.driver.find_element_by_css_selector("edit-columns-button").click() + self.driver.find_element_by_id("edit-columns-button").click() # The operation is the same as case901 # dict: {lint text name : actual class name} table_head_dict = {'Order':'order', 'Recipe':'recipe_name', 'Task':'task_name', 'Executed':'executed', \
@@ -863,9 +863,17 @@ class toaster_cases(toaster_cases_base): self.save_screenshot(screenshot_type='selenium', append_name='step8') # after the last option was clicked, we don't need operation below anymore if number < len(avail_options)-1: - temp_element = self.find_element_by_link_text_in_table(self.table_name, key) - temp_element.find_element_by_xpath("..//*[@class='icon-filter filtered']").click() - avail_options = self.driver.find_elements_by_xpath("//*[@id='" + filter_dict[key] + "']//*[@name='filter'][not(@disabled)]") + try: + temp_element = self.find_element_by_link_text_in_table(self.table_name, key) + temp_element.find_element_by_xpath("..//*[@class='icon-filter filtered']").click() + avail_options = self.driver.find_elements_by_xpath("//*[@id='" + filter_dict[key] + "']//*[@name='filter'][not(@disabled)]") + except: + print "in exception" + self.find_element_by_text("Show all tasks").click() +# self.driver.find_element_by_xpath("//*[@id='searchform']/button[2]").click() + temp_element = self.find_element_by_link_text_in_table(self.table_name, key) + temp_element.find_element_by_xpath("..//*[@class='icon-filter filtered']").click() + avail_options = self.driver.find_elements_by_xpath("//*[@id='" + filter_dict[key] + "']//*[@name='filter'][not(@disabled)]") self.browser_delay() # step 11 for item in ['order', 'task_name', 'executed', 'outcome', 'recipe_name', 'recipe_version']:
@@ -942,11 +950,8 @@ class toaster_cases(toaster_cases_base): c_list = self.get_table_column_text_by_column_number('dependencies', 1) self.assertTrue(is_list_sequenced(c_list), msg=("list not in order")) texts = ['Size', 'License', 'Recipe', 'Recipe version', 'Layer', \ - 'Layer branch', 'Layer commit'] - time.sleep(1) -# for text in texts: -# self.assertTrue(self.is_text_present(text), msg=("text %s not in page" % text)) - self.assertTrue(self.is_text_present(texts), msg=("text not in page")) + 'Layer commit'] + self.failUnless(self.is_text_present(texts)) ##############
@@ -1113,8 +1118,10 @@ class toaster_cases(toaster_cases_base): # we deliberately want "no result" here self.driver.find_element_by_id("search").send_keys("no such input") self.driver.find_element_by_id("search-button").click() - self.find_element_by_text("Show all recipes").click() - + try: + self.find_element_by_text("Show all recipes").click() + except: + self.fail(msg='Could not identify blank page elements') ############## # CASE 912 #
@@ -1184,42 +1191,184 @@ class toaster_cases(toaster_cases_base): def test_914(self): self.case_no = self.get_case_number() self.log.info(' CASE %s log: ' % str(self.case_no)) - self.driver.maximize_window() - self.driver.get(self.base_url) - self.find_element_by_link_text_in_table('otable', "core-image-minimal").click() - self.find_element_by_link_text_in_table('nav', 'Recipes').click() - # step 4 - self.find_element_by_link_text_in_table('otable', "busybox").click() - # this step needs some observation here - self.save_screenshot(screenshot_type='selenium', append_name='step4') - # step 5 - self.driver.find_element_by_partial_link_text('Packages (').click() - head_list = self.get_table_head_text('otable') - head_checklist = ['Version', 'Size'] - for item in head_checklist: - self.assertTrue(item in head_list, msg=("%s should be in head list" % item)) - # step 6 - self.driver.find_element_by_partial_link_text('Build dependencies (').click() - # the dependencies number may vary(even 0), so screenshot here - self.save_screenshot(screenshot_type='selenium', append_name='step6') - self.driver.find_element_by_partial_link_text('Reverse build dependencies (').click() - self.save_screenshot(screenshot_type='selenium', append_name='step7') - # step 8 - self.find_element_by_link_text_in_table('breadcrumb', "Recipes").click() - # in case that gdbm doesn't appear on the first page, we use "search" - self.driver.find_element_by_id("search").clear() - self.driver.find_element_by_id("search").send_keys("gdbm") - self.driver.find_element_by_id("search-button").click() - self.driver.find_element_by_link_text("gdbm").click() - # step 9 - self.driver.find_element_by_partial_link_text('Packages (').click() - # below are different from the contents described in testcase web - # page, so .. screenshot again - self.save_screenshot(screenshot_type='selenium', append_name='step9') - self.driver.find_element_by_partial_link_text('Build dependencies (').click() - self.save_screenshot(screenshot_type='selenium', append_name='step10') - self.driver.find_element_by_partial_link_text('Reverse build dependencies (').click() - self.save_screenshot(screenshot_type='selenium', append_name='step11') + image_type="core-image-minimal" + test_package1="busybox" + test_package2="gdbm" + test_package3="gettext-native" + driver = self.driver + driver.maximize_window() + driver.get(self.base_url) + driver.find_element_by_link_text(image_type).click() + driver.find_element_by_link_text("Recipes").click() + driver.find_element_by_link_text(test_package1).click() + + self.table_name = 'information' + + tasks_row_count = len(driver.find_elements_by_xpath("//*[@id='"+self.table_name+"']/table/tbody/tr/td[1]")) + tasks_column_count = len(driver.find_elements_by_xpath("//*[@id='"+self.table_name+"']/table/tbody/tr[1]/td")) + print 'rows: '+str(tasks_row_count) + print 'columns: '+str(tasks_column_count) + + Tasks_column = self.get_table_column_text_by_column_number(self.table_name, 2) + print ("Tasks_column=", Tasks_column) + + key_tasks=["do_fetch", "do_unpack", "do_patch", "do_configure", "do_compile", "do_install", "do_package", "do_build"] + i = 0 + while i < len(key_tasks): + if key_tasks[i] not in Tasks_column: + print ("Error! Missing key task: %s" % key_tasks[i]) + else: + print ("%s is in tasks" % key_tasks[i]) + i = i + 1 + + if Tasks_column.index(key_tasks[0]) != 0: + print ("Error! %s is not in the right position" % key_tasks[0]) + else: + print ("%s is in right position" % key_tasks[0]) + + if Tasks_column[-1] != key_tasks[-1]: + print ("Error! %s is not in the right position" % key_tasks[-1]) + else: + print ("%s is in right position" % key_tasks[-1]) + + driver.find_element_by_partial_link_text("Packages (").click() + packages_name = driver.find_element_by_partial_link_text("Packages (").text + print packages_name + packages_num = int(filter(str.isdigit, repr(packages_name))) + print packages_num + + #switch the table to show more than 10 rows at a time + self.driver.find_element_by_xpath("//*[@id='packages-built']/div[1]/div/select").click() + Select(driver.find_element_by_xpath("//*[@id='packages-built']/div[1]/div/select")).select_by_value('150') + self.driver.find_element_by_xpath("//*[@id='packages-built']/div[1]/div/select").send_keys(Keys.ENTER) + + packages_row_count = len(driver.find_elements_by_xpath("//*[@id='otable']/tbody/tr/td[1]")) + print packages_row_count + + if packages_num != packages_row_count: + print ("Error! The packages number is not correct") + else: + print ("The packages number is correct") + + driver.find_element_by_partial_link_text("Build dependencies (").click() + depends_name = driver.find_element_by_partial_link_text("Build dependencies (").text + print depends_name + depends_num = int(filter(str.isdigit, repr(depends_name))) + print depends_num + + if depends_num == 0: + depends_message = repr(driver.find_element_by_css_selector("div.alert.alert-info").text) + print depends_message + if depends_message.find("has no build dependencies.") < 0: + print ("Error! The message isn't expected.") + else: + print ("The message is expected") + else: + depends_row_count = len(driver.find_elements_by_xpath("//*[@id='dependencies']/table/tbody/tr/td[1]")) + print depends_row_count + if depends_num != depends_row_count: + print ("Error! The dependent packages number is not correct") + else: + print ("The dependent packages number is correct") + + driver.find_element_by_partial_link_text("Reverse build dependencies (").click() + rdepends_name = driver.find_element_by_partial_link_text("Reverse build dependencies (").text + print rdepends_name + rdepends_num = int(filter(str.isdigit, repr(rdepends_name))) + print rdepends_num + + if rdepends_num == 0: + rdepends_message = repr(driver.find_element_by_css_selector("#brought-in-by > div.alert.alert-info").text) + print rdepends_message + if rdepends_message.find("has no reverse build dependencies.") < 0: + print ("Error! The message isn't expected.") + else: + print ("The message is expected") + else: + print ("The reverse dependent packages number is correct") + + driver.find_element_by_link_text("Recipes").click() + driver.find_element_by_link_text(test_package2).click() + driver.find_element_by_partial_link_text("Packages (").click() + driver.find_element_by_partial_link_text("Build dependencies (").click() + driver.find_element_by_partial_link_text("Reverse build dependencies (").click() + + + driver.find_element_by_link_text("Recipes").click() + driver.find_element_by_link_text(test_package3).click() + + native_tasks_row_count = len(driver.find_elements_by_xpath("//*[@id='information']/table/tbody/tr/td[1]")) + native_tasks_column_count = len(driver.find_elements_by_xpath("//*[@id='information']/table/tbody/tr[1]/td")) + print native_tasks_row_count + print native_tasks_column_count + + Native_Tasks_column = self.get_table_column_text_by_column_number(self.table_name, 2) + print ("Native_Tasks_column=", Native_Tasks_column) + + native_key_tasks=["do_fetch", "do_unpack", "do_patch", "do_configure", "do_compile", "do_install", "do_build"] + i = 0 + while i < len(native_key_tasks): + if native_key_tasks[i] not in Native_Tasks_column: + print ("Error! Missing key task: %s" % native_key_tasks[i]) + else: + print ("%s is in tasks" % native_key_tasks[i]) + i = i + 1 + + if Native_Tasks_column.index(native_key_tasks[0]) != 0: + print ("Error! %s is not in the right position" % native_key_tasks[0]) + else: + print ("%s is in right position" % native_key_tasks[0]) + + if Native_Tasks_column[-1] != native_key_tasks[-1]: + print ("Error! %s is not in the right position" % native_key_tasks[-1]) + else: + print ("%s is in right position" % native_key_tasks[-1]) + + driver.find_element_by_partial_link_text("Packages (").click() + native_packages_name = driver.find_element_by_partial_link_text("Packages (").text + print native_packages_name + native_packages_num = int(filter(str.isdigit, repr(native_packages_name))) + print native_packages_num + + if native_packages_num != 0: + print ("Error! Native task shouldn't have any packages.") + else: + native_package_message = repr(driver.find_element_by_css_selector("#packages-built > div.alert.alert-info").text) + print native_package_message + if native_package_message.find("does not build any packages.") < 0: + print ("Error! The message for native task isn't expected.") + else: + print ("The message for native task is expected.") + + driver.find_element_by_partial_link_text("Build dependencies (").click() + native_depends_name = driver.find_element_by_partial_link_text("Build dependencies (").text + print native_depends_name + native_depends_num = int(filter(str.isdigit, repr(native_depends_name))) + print native_depends_num + + native_depends_row_count = len(driver.find_elements_by_xpath("//*[@id='dependencies']/table/tbody/tr/td[1]")) + print native_depends_row_count + + if native_depends_num != native_depends_row_count: + print ("Error! The dependent packages number is not correct") + else: + print ("The dependent packages number is correct") + + driver.find_element_by_partial_link_text("Reverse build dependencies (").click() + native_rdepends_name = driver.find_element_by_partial_link_text("Reverse build dependencies (").text + print native_rdepends_name + native_rdepends_num = int(filter(str.isdigit, repr(native_rdepends_name))) + print native_rdepends_num + + native_rdepends_row_count = len(driver.find_elements_by_xpath("//*[@id='brought-in-by']/table/tbody/tr/td[1]")) + print native_rdepends_row_count + + if native_rdepends_num != native_rdepends_row_count: + print ("Error! The reverse dependent packages number is not correct") + else: + print ("The reverse dependent packages number is correct") + + driver.find_element_by_link_text("Recipes").click() ##############
@@ -1307,12 +1456,11 @@ class toaster_cases(toaster_cases_base): # step 3 self.driver.find_element_by_id("edit-columns-button").click() self.driver.find_element_by_id("started_on").click() - self.driver.find_element_by_id("log").click() self.driver.find_element_by_id("time").click() self.driver.find_element_by_id("edit-columns-button").click() head_list = self.get_table_head_text('otable') - for item in ['Outcome', 'Recipe', 'Machine', 'Started on', 'Completed on', 'Failed tasks', 'Errors', 'Warnings', 'Warnings', 'Time']: - self.assertTrue(item in head_list, msg=("item %s not in head row" % item)) + for item in ['Outcome', 'Recipe', 'Machine', 'Started on', 'Completed on', 'Failed tasks', 'Errors', 'Warnings', 'Time', "Image files", "Project"]: + self.failUnless(item in head_list, msg=item+' is missing from table head.') ##############
@@ -1330,10 +1478,11 @@ class toaster_cases(toaster_cases_base): # Step 4 # click Errors , order in "Completed on" should be disturbed. Then hide # error column to check if order in "Completed on" can be restored - self.find_element_by_link_text_in_table('otable', 'Errors').click() - self.driver.find_element_by_id("edit-columns-button").click() - self.driver.find_element_by_id("errors_no").click() - self.driver.find_element_by_id("edit-columns-button").click() +#THIS TEST IS NO LONGER VALID DUE TO DESIGN CHANGES. LEAVING IN PENDING UPDATES TO DESIGN + #self.find_element_by_link_text_in_table('otable', 'Errors').click() + #self.driver.find_element_by_id("edit-columns-button").click() + #self.driver.find_element_by_id("errors_no").click() + #self.driver.find_element_by_id("edit-columns-button").click() # Note: without time.sleep here, there'll be unpredictable error..TBD time.sleep(1) c_list = self.get_table_column_text('class', 'completed_on')
@@ -1443,7 +1592,7 @@ class toaster_cases(toaster_cases_base): # otable is the recipes table here otable_head_text = self.get_table_head_text('otable') for item in ["Layer", "Layer branch", "Layer commit"]: - self.assertFalse(item not in otable_head_text, msg=("item %s should be in head row" % item)) + self.failIf(item not in otable_head_text, msg=item+' not in table head.') # click the fist recipe, whatever it is self.get_table_element("otable", 1, 1).click() self.assertTrue(self.is_text_present(["Layer", "Layer branch", "Layer commit", "Recipe file"]), \
@@ -1499,25 +1648,22 @@ class toaster_cases(toaster_cases_base): self.driver.maximize_window() for item in ["Packages", "Recipes", "Tasks"]: self.driver.get(self.base_url) - self.find_element_by_link_text_in_table('otable', "core-image-minimal").click() - self.driver.find_element_by_link_text(item).click() - # step 3 - options = Select(self.driver.find_element_by_css_selector("select.pagesize")).options - options_numbers = [] - for option in options: - options_numbers.append(int(option.text)) - # the default options are : 10 25 50 100 150 - self.assertTrue(options_numbers==[10, 25, 50, 100, 150], msg=("%s options not as expected" % item)) - # step 4 - # in this case it's 50 - option_tobeselected = options_numbers[2] - Select(self.driver.find_element_by_css_selector("select.pagesize")).select_by_index(2) - xpath_otable=".//*[@id='otable']/tbody" - # examine if the 50th row exists while 51th does not - self.assertTrue(self.is_element_present(By.XPATH, xpath_otable + "/tr[" + str(option_tobeselected) +"]"),\ - msg=("Row %d should exist" %option_tobeselected)) - self.assertFalse(self.is_element_present(By.XPATH, xpath_otable + "/tr[" + str(option_tobeselected+1) +"]"),\ - msg=("Row %d should not exist" %(option_tobeselected+1))) + self.driver.find_element_by_link_text("core-image-minimal").click() + self.driver.find_element_by_link_text(items).click() + + # this may be page specific. If future page content changes, try to replace it with new xpath + xpath_showrows = "/html/body/div[4]/div/div/div[2]/div[2]/div[2]/div/div/div[2]/select" + xpath_table = "html/body/div[4]/div/div/div[2]/div[2]/table/tbody"#"id=('otable')/tbody" + self.driver.find_element_by_xpath(xpath_showrows).click() + rows_displayed = int(self.driver.find_element_by_xpath(xpath_showrows + "/option[2]").text) + + # not sure if this is a Selenium Select bug: If page is not refreshed here, "select(by visible text)" operation will go back to 100-row page + # Sure we can use driver.get(url) to refresh page, but since page will vary, we use click link text here + self.driver.find_element_by_link_text(items).click() + Select(self.driver.find_element_by_css_selector("select.pagesize")).select_by_visible_text(str(rows_displayed)) + self.failUnless(self.is_element_present(By.XPATH, xpath_table + "/tr[" + str(rows_displayed) +"]")) + self.failIf(self.is_element_present(By.XPATH, xpath_table + "/tr[" + str(rows_displayed+1) +"]")) + # click 1st package, then go back to check if it's still those rows shown. self.driver.find_element_by_xpath(xpath_otable + "/tr[1]/td[1]/a").click() time.sleep(3)
@@ -1811,9 +1957,10 @@ class toaster_cases(toaster_cases_base): # step 2-3 need to run manually self.log.info("step 2-3: checking the help message when you hover on help icon of target,\ tasks, recipes, packages need to run manually") - self.driver.find_element_by_partial_link_text("Toaster manual").click() - if not self.is_text_present("Toaster Manual"): - self.assertFalse(True, msg=("please check [Toaster manual] link on page")) + self.driver.find_element_by_partial_link_text("Manual").click() + if not self.is_text_present("Manual"): + self.log.error("please check [Toaster manual] link on page") + self.failIf(True) #################################################################################################### # Starting backend tests ###########################################################################
@@ -1929,10 +2076,16 @@ class toaster_cases(toaster_cases_base): query = "select name from orm_branch where layer_source_id=1;" cursor.execute(query) data = cursor.fetchall() - for i in range(0,4): - data[i] = data[i][0] + lenght = len(data) + try: + for i in range(0,lenght): + data[i] = data[i][0] + except: + pass print data json_parse = json.loads(open('toasterconf.json').read()) + json_location = json_parse['layersources'][0]['name'] + print json_location json_data = json_parse['layersources'][0]['branches'] print json_data self.failUnless(set(data) == set(json_data))
@@ -1940,13 +2093,16 @@ class toaster_cases(toaster_cases_base): print 'Checking branches for "OpenEmbedded"' con=sqlite.connect('toaster.sqlite') cursor = con.cursor() - query = "select name from orm_branch where layer_source_id=2;" + query = "select name from orm_branch where layer_source_id=3;" cursor.execute(query) data = cursor.fetchall() - for i in range(0,3): + lenght = len(data) + for i in range(0,lenght): data[i] = data[i][0] print data json_parse = json.loads(open('toasterconf.json').read()) + json_location = json_parse['layersources'][1]['name'] + print json_location json_data = json_parse['layersources'][1]['branches'] print json_data self.failUnless(set(data) == set(json_data))
@@ -1954,13 +2110,16 @@ class toaster_cases(toaster_cases_base): print 'Checking branches for "Imported layers"' con=sqlite.connect('toaster.sqlite') cursor = con.cursor() - query = "select name from orm_branch where layer_source_id=3;" + query = "select name from orm_branch where layer_source_id=2;" cursor.execute(query) data = cursor.fetchall() - for i in range(0,4): + lenght = len(data) + for i in range(0,lenght): data[i] = data[i][0] print data json_parse = json.loads(open('toasterconf.json').read()) + json_location = json_parse['layersources'][2]['name'] + print json_location json_data = json_parse['layersources'][2]['branches'] print json_data self.failUnless(set(data) == set(json_data))
@@ -2066,7 +2225,7 @@ class toaster_cases(toaster_cases_base): self.driver.find_element_by_id('change-machine-toggle').click() self.driver.find_element_by_id('machine-change-input').clear() self.driver.find_element_by_id('machine-change-input').send_keys('qemuarm64') - self.driver.find_element_by_id('machine-change-input').send_keys(Keys.RETURN) +# self.driver.find_element_by_id('machine-change-input').send_keys(Keys.RETURN) self.driver.find_element_by_id('machine-change-btn').click() con=sqlite.connect('toaster.sqlite') cursor = con.cursor()
@@ -2093,7 +2252,7 @@ class toaster_cases(toaster_cases_base): cursor.execute(query) data = cursor.fetchall() try: - data = data[0] + data = data[0][0] except: pass print data
Signature · 12 lines
1.9.3 --------------------------------------------------------------------- Intel Corporation (UK) Limited Registered No. 1134945 (England) Registered Office: Pipers Way, Swindon SN3 1RJ VAT No: 860 2173 47 This e-mail and any attachments may contain confidential material for the sole use of the intended recipient(s). Any review or distribution by others is strictly prohibited. If you are not the intended recipient, please contact the sender and delete all copies.