diff options
Diffstat (limited to 'bitbake/lib/toaster/tests_functional/base.py')
-rw-r--r-- | bitbake/lib/toaster/tests_functional/base.py | 103 |
1 files changed, 98 insertions, 5 deletions
diff --git a/bitbake/lib/toaster/tests_functional/base.py b/bitbake/lib/toaster/tests_functional/base.py index a72c298d153..5e74a82437b 100644 --- a/bitbake/lib/toaster/tests_functional/base.py +++ b/bitbake/lib/toaster/tests_functional/base.py @@ -4,11 +4,16 @@ import logging import unittest import time import platform -import shutil, argparse, ConfigParser, json +import shutil, argparse, configparser, json +import errno +import re +from selenium import webdriver +from selenium.webdriver.support.ui import Select +from time import strftime, gmtime +from selenium.common.exceptions import NoSuchElementException -from time import strftime, gmtime sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), '../', 'tests', 'browser')) # XXX: Test tool should insert the path @@ -38,9 +43,40 @@ class ToasterFunctionalTests(SeleniumTestCaseBase): @classmethod def setUpClass(cls): + SeleniumTestCaseBase.setUpClass() cls.log = cls.logger_create() + def mkdir_p(self, dir): + try: + os.makedirs(dir) + except OSError as exc: + if exc.errno == errno.EEXIST and os.path.isdir(dir): + pass + else: + raise + + + + def setup_browser(self, *browser_path): + self.browser = eval(self.parser.get('toaster_test_' + self.target_suite, 'test_browser')) + print(self.browser) + if self.browser == "firefox": + driver = webdriver.Firefox() + elif self.browser == "chrome": + driver = webdriver.Chrome() + elif self.browser == "ie": + driver = webdriver.Ie() + else: + driver = None + print("unrecognized browser type, please check") + self.driver = driver + self.driver.implicitly_wait(30) + return self.driver + + + def setUp(self): + self.screenshot_sequence = 1 self.verificationErrors = [] self.accept_next_alert = True @@ -50,7 +86,7 @@ class ToasterFunctionalTests(SeleniumTestCaseBase): else: self.target_suite = self.host_os - self.parser = ConfigParser.SafeConfigParser() + self.parser = configparser.ConfigParser() self.parser.read('toaster_test.cfg') self.base_url = eval(self.parser.get('toaster_test_' + self.target_suite, 'toaster_url')) @@ -58,12 +94,12 @@ class ToasterFunctionalTests(SeleniumTestCaseBase): # test cases are done, move them to log/$datetime dir self.log_tmp_dir = os.path.abspath(sys.path[0]) + os.sep + 'log' + os.sep + 'tmp' try: - mkdir_p(self.log_tmp_dir) + self.mkdir_p(self.log_tmp_dir) except OSError : logging.error("%(asctime)s Cannot create tmp dir under log, please check your privilege") # self.log = self.logger_create() # driver setup - self.setup_browser() + #self.setup_browser() @@ -103,3 +139,60 @@ class ToasterFunctionalTests(SeleniumTestCaseBase): log.addHandler(ch) return log + + + + + def get_table_element(self, table_id, *coordinate): + if len(coordinate) == 0: + #return whole-table element + element_xpath = "//*[@id='" + table_id + "']" + try: + element = self.driver.find_element_by_xpath(element_xpath) + except NoSuchElementException as e: + raise + return element + row = coordinate[0] + + if len(coordinate) == 1: + #return whole-row element + element_xpath = "//*[@id='" + table_id + "']/tbody/tr[" + str(row) + "]" + try: + element = self.driver.find_element_by_xpath(element_xpath) + except NoSuchElementException as e: + return False + return element + #now we are looking for an element with specified X and Y + column = coordinate[1] + + element_xpath = "//*[@id='" + table_id + "']/tbody/tr[" + str(row) + "]/td[" + str(column) + "]" + try: + element = self.driver.find_element_by_xpath(element_xpath) + except NoSuchElementException as e: + return False + return element + + + + + + def find_element_by_link_text_in_table(self, table_id, link_text): + """ + Assume there're multiple suitable "find_element_by_link_text". + In this circumstance we need to specify "table". + """ + try: + table_element = self.get_table_element(table_id) + element = table_element.find_element_by_link_text(link_text) + except NoSuchElementException as e: + print('no element found') + raise + return element + + def get_URL(self): + rc=self.get_page_source() + project_url=re.search("(projectPageUrl\s:\s\")(.*)(\",)",rc) + return project_url.group(2) + + + |