summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--toasteruitest/Base_Utility.py279
-rw-r--r--toasteruitest/ReadMe.txt44
-rw-r--r--toasteruitest/Utility.py272
-rw-r--r--toasteruitest/__init__.py0
-rw-r--r--toasteruitest/run_toastertests.py114
-rw-r--r--toasteruitest/toaster_automation_test.py1789
-rw-r--r--toasteruitest/toaster_test.cfg10
7 files changed, 2508 insertions, 0 deletions
diff --git a/toasteruitest/Base_Utility.py b/toasteruitest/Base_Utility.py
new file mode 100644
index 00000000000..1706a84dcad
--- /dev/null
+++ b/toasteruitest/Base_Utility.py
@@ -0,0 +1,279 @@
+#!/usr/bin/python
+#
+# DESCRIPTION
+# This is script has baseclass and contains class selenium-based functions.
+#
+import ConfigParser
+import logging
+import os
+import platform
+import sys
+import time
+import unittest
+from selenium import webdriver
+from selenium.common.exceptions import NoSuchElementException
+from Utility import LogResults
+from Utility import mkdir_p
+
+@LogResults
+class toaster_cases_base(unittest.TestCase):
+
+ @classmethod
+ def setUpClass(cls):
+ cls.log = cls.logger_create()
+
+ def setUp(self):
+ self.screenshot_sequence = 1
+ self.verificationErrors = []
+ self.accept_next_alert = True
+ self.host_os = platform.system().lower()
+ if os.getenv('TOASTER_SUITE'):
+ self.target_suite = os.getenv('TOASTER_SUITE')
+ else:
+ self.target_suite = self.host_os
+
+ self.parser = ConfigParser.SafeConfigParser()
+ self.parser.read('toaster_test.cfg')
+ self.base_url = eval(self.parser.get('toaster_test_' + self.target_suite, 'toaster_url'))
+ self.log_tmp_dir = os.path.abspath(sys.path[0]) + os.sep + 'log' + os.sep + 'tmp'
+ try:
+ mkdir_p(self.log_tmp_dir)
+ except OSError :
+ logging.error("%(asctime)s Cannot create tmp dir under log, please check your privilege")
+ self.setup_browser()
+
+ @staticmethod
+ def logger_create():
+ log_file = "toaster-auto-" + time.strftime("%Y%m%d%H%M%S") + ".log"
+ if os.path.exists("toaster-auto.log"): os.remove("toaster-auto.log")
+ os.symlink(log_file, "toaster-auto.log")
+
+ log = logging.getLogger("toaster")
+ log.setLevel(logging.DEBUG)
+
+ fh = logging.FileHandler(filename=log_file, mode='w')
+ fh.setLevel(logging.DEBUG)
+
+ ch = logging.StreamHandler(sys.stdout)
+ ch.setLevel(logging.INFO)
+
+ formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
+ fh.setFormatter(formatter)
+ ch.setFormatter(formatter)
+
+ log.addHandler(fh)
+ log.addHandler(ch)
+ return log
+
+ 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 save_screenshot(self, **log_args):
+ types = [log_args.get('screenshot_type')]
+ if types == [None]:
+ types = ['native', 'selenium']
+ add_name = log_args.get('append_name')
+ if not add_name:
+ add_name = '-'
+ sub_dir = log_args.get('log_sub_dir')
+ if not sub_dir:
+ sub_dir = 'case' + str(self.case_no)
+ for item in types:
+ log_dir = self.log_tmp_dir + os.sep + sub_dir
+ mkdir_p(log_dir)
+ log_path = log_dir + os.sep + self.browser + '-' +\
+ item + '-' + add_name + '-' + str(self.screenshot_sequence) + '.png'
+ if item == 'native':
+ if self.host_os == "linux":
+ os.system("scrot " + log_path)
+ elif self.host_os=="darwin":
+ os.system("screencapture -x " + log_path)
+ elif item == 'selenium':
+ self.driver.get_screenshot_as_file(log_path)
+ self.screenshot_sequence += 1
+ def find_element_by_text(self, string):
+ return self.driver.find_element_by_xpath("//*[text()='" + string + "']")
+
+ def find_elements_by_text(self, string):
+ return self.driver.find_elements_by_xpath("//*[text()='" + string + "']")
+
+ def find_element_by_text_in_table(self, table_id, text_string):
+ try:
+ table_element = self.get_table_element(table_id)
+ element = table_element.find_element_by_xpath("//*[text()='" + text_string + "']")
+ except NoSuchElementException as e:
+ print('no element found')
+ raise
+ return element
+
+ def find_element_by_link_text_in_table(self, table_id, link_text):
+ 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 find_elements_by_link_text_in_table(self, table_id, link_text):
+ try:
+ table_element = self.get_table_element(table_id)
+ element_list = table_element.find_elements_by_link_text(link_text)
+ except NoSuchElementException as e:
+ print('no element found')
+ raise
+ return element_list
+
+ def find_element_by_partial_link_text_in_table(self, table_id, link_text):
+ try:
+ table_element = self.get_table_element(table_id)
+ element = table_element.find_element_by_partial_link_text(link_text)
+ return element
+ except NoSuchElementException as e:
+ print('no element found')
+ raise
+
+ def find_elements_by_partial_link_text_in_table(self, table_id, link_text):
+ try:
+ table_element = self.get_table_element(table_id)
+ element_list = table_element.find_elements_by_partial_link_text(link_text)
+ return element_list
+ except NoSuchElementException as e:
+ print('no element found')
+ raise
+
+ def find_element_by_xpath_in_table(self, table_id, xpath):
+ try:
+ table_element = self.get_table_element(table_id)
+ element = table_element.find_element_by_xpath(xpath)
+ except NoSuchElementException as e:
+ print('no element found')
+ raise
+ return element
+
+ def find_elements_by_xpath_in_table(self, table_id, xpath):
+ try:
+ table_element = self.get_table_element(table_id)
+ element_list = table_element.find_elements_by_xpath(xpath)
+ except NoSuchElementException as e:
+ print('no elements found')
+ raise
+ return element_list
+
+ def shortest_xpath(self, pname, pvalue):
+ return "//*[@" + pname + "='" + pvalue + "']"
+
+ def get_table_column_text(self, attr_name, attr_value):
+ c_xpath = self.shortest_xpath(attr_name, attr_value)
+ elements = self.driver.find_elements_by_xpath(c_xpath)
+ c_list = []
+ for element in elements:
+ c_list.append(element.text)
+ return c_list
+
+ def get_table_column_text_by_column_number(self, table_id, column_number):
+ c_xpath = "//*[@id='" + table_id + "']//td[" + str(column_number) + "]"
+ elements = self.driver.find_elements_by_xpath(c_xpath)
+ c_list = []
+ for element in elements:
+ c_list.append(element.text)
+ return c_list
+
+ def get_table_head_text(self, *table_id):
+ if table_id:
+ thead_xpath = "//*[@id='" + table_id[0] + "']//thead//th[text()]"
+ elements = self.driver.find_elements_by_xpath(thead_xpath)
+ c_list = []
+ for element in elements:
+ if element.text:
+ c_list.append(element.text)
+ return c_list
+ else:
+ return self.driver.find_element_by_xpath("//*/table/thead").text
+
+ def get_table_element(self, table_id, *coordinate):
+ if len(coordinate) == 0:
+ 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:
+ 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
+ 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 get_table_data(self, table_id, row_count, column_count):
+ row = 1
+ Lists = []
+ while row <= row_count:
+ column = 1
+ row_content=[]
+ while column <= column_count:
+ s= "//*[@id='" + table_id + "']/tbody/tr[" + str(row) +"]/td[" + str(column) + "]"
+ v = self.driver.find_element_by_xpath(s).text
+ row_content.append(v)
+ column = column + 1
+ print("row_content=",row_content)
+ Lists.extend(row_content)
+ print(Lists[row-1][0])
+ row = row + 1
+ return Lists
+
+ def is_text_present (self, patterns):
+ for pattern in patterns:
+ if str(pattern) not in self.driver.page_source:
+ print('Text "'+pattern+'" is missing')
+ return False
+ return True
+
+ def is_element_present(self, how, what):
+ try:
+ self.driver.find_element(how, what)
+ except NoSuchElementException as e:
+ print('Could not find element '+str(what)+' by ' + str(how))
+ return False
+ return True
+
+ def get_case_number(self):
+ funcname = sys._getframe(1).f_code.co_name
+ caseno_str = funcname.strip('test_')
+ try:
+ caseno = int(caseno_str)
+ except ValueError:
+ print("get case number error! please check if func name is test_xxx")
+ return False
+ return caseno
+
+ def tearDown(self):
+ self.log.info(' END: CASE %s log \n\n' % str(self.case_no))
+ self.driver.quit()
+ self.assertEqual([], self.verificationErrors) \ No newline at end of file
diff --git a/toasteruitest/ReadMe.txt b/toasteruitest/ReadMe.txt
new file mode 100644
index 00000000000..38af738abdf
--- /dev/null
+++ b/toasteruitest/ReadMe.txt
@@ -0,0 +1,44 @@
+Before running toaster test case, we need to have following pre-requisite:
+
+Pre-requisite: -
+a) To run toaster follow below step:
+1.Fetch the source code for yocto
+git clone http://git.yoctoproject.org/git/poky
+
+2. run below command to initiate build environment
+source oe-init-build-env
+
+3. Install the basic requirement for Toaster with the below given command-
+sudo pip3 install -r <Location-of-toaster-file(toaster-requirements.txt)>
+Example- sudo pip3 install -r /home/…. /poky/bitbake/toaster-requirements.txt
+
+4. Start the toaster
+source toaster start
+
+b) To install selenium
+$ sudo apt-get install scrot python-pip
+$ sudo pip install selenium
+
+c) To test with Chrome browser and chromedriver
+Download/install chrome on host
+Download chromedriver from https://code.google.com/p/chromedriver/downloads/list according to your host type
+put chromedriver in PATH, (e.g. /usr/bin/, provide permission to chromedriver)
+set path for chromedriver
+export path=$PATH:/usr/bin/chromedriver
+
+d) Necessary images to be built
+1) core-image-minimal
+2) core-image-sato
+while building if it gives error please install other dependencies like gawk,chrpath,texinfo etc.
+
+e) Please copy contrib file as attached on path "poky/bitbake/lib/toaster"
+
+f) Please copy toasteruitest directory into poky/bitbake/lib/toaster
+then goto
+"poky/bitbake/lib/toaster/toasteruitest" and run "./run_toastertests.py" from that location.
+
+
+NOTE:
+1) Make sure your system should not be in locked/sleep mode at least for 1 hour.
+2) Test case Number 900: Its not included as all are manual steps and its time consuming for now, It will be included in future release.
+3) Test case Number 955,951: Since Ctrl+C is not working (bug id:12813)so that portion is not implemented as of now.
diff --git a/toasteruitest/Utility.py b/toasteruitest/Utility.py
new file mode 100644
index 00000000000..78c99624c16
--- /dev/null
+++ b/toasteruitest/Utility.py
@@ -0,0 +1,272 @@
+#!/usr/bin/python
+#
+# DESCRIPTION
+# This is script consist of common utils like sorting, getting attribute and so on.
+# These modules are used for running all selected toaster cases
+# on selected web browser manifested in toaster_test.cfg
+#
+
+import errno
+import logging
+import os
+import re
+import sys
+
+class Listattr(object):
+ """
+ Set of list attribute. This is used to determine what the list content is.
+ Later on we may add more attributes here.
+ """
+ NULL = "null"
+ NUMBERS = "numbers"
+ STRINGS = "strings"
+ PERCENT = "percentage"
+ SIZE = "size"
+ UNKNOWN = "unknown"
+
+def get_log_root_dir():
+ max_depth = 5
+ parent_dir = '../'
+ for number in range(0, max_depth):
+ if os.path.isdir(sys.path[0] + os.sep + (os.pardir + os.sep)*number + 'log'):
+ log_root_dir = os.path.abspath(sys.path[0] + os.sep + (os.pardir + os.sep)*number + 'log')
+ break
+
+ if number == (max_depth - 1):
+ print('No log dir found. Please check')
+ raise Exception
+
+ return log_root_dir
+
+def get_list_attr(testlist):
+ """
+ To determine the list content
+ """
+ if not testlist:
+ return Listattr.NULL
+ listtest = testlist[:]
+ try:
+ listtest.remove('')
+ except ValueError:
+ pass
+ pattern_percent = re.compile(r"^([0-9])+(\.)?([0-9])*%$")
+ pattern_size = re.compile(r"^([0-9])+(\.)?([0-9])*( )*(K)*(M)*(G)*B$")
+ pattern_number = re.compile(r"^([0-9])+(\.)?([0-9])*$")
+ def get_patterned_number(pattern, tlist):
+ count = 0
+ for item in tlist:
+ if re.search(pattern, item):
+ count += 1
+ return count
+ if get_patterned_number(pattern_percent, listtest) == len(listtest):
+ return Listattr.PERCENT
+ elif get_patterned_number(pattern_size, listtest) == len(listtest):
+ return Listattr.SIZE
+ elif get_patterned_number(pattern_number, listtest) == len(listtest):
+ return Listattr.NUMBERS
+ else:
+ return Listattr.STRINGS
+
+def is_list_sequenced(testlist):
+ """
+ Function to tell if list is sequenced
+ Currently we may have list made up of: Strings ; numbers ; percentage ; time; size
+ Each has respective way to determine if it's sequenced.
+ """
+ test_list = testlist[:]
+ try:
+ test_list.remove('')
+ except ValueError:
+ pass
+
+ if get_list_attr(testlist) == Listattr.NULL :
+ return True
+
+ elif get_list_attr(testlist) == Listattr.STRINGS :
+ return (sorted(test_list) == test_list)
+
+ elif get_list_attr(testlist) == Listattr.NUMBERS :
+ list_number = []
+ for item in test_list:
+ list_number.append(eval(item))
+ return (sorted(list_number) == list_number)
+
+ elif get_list_attr(testlist) == Listattr.PERCENT :
+ list_number = []
+ for item in test_list:
+ list_number.append(eval(item.strip('%')))
+ return (sorted(list_number) == list_number)
+
+ elif get_list_attr(testlist) == Listattr.SIZE :
+ list_number = []
+ # currently SIZE is splitted by space
+ for item in test_list:
+ if item.split()[1].upper() == "KB":
+ list_number.append(1024 * eval(item.split()[0]))
+ elif item.split()[1].upper() == "MB":
+ list_number.append(1024 * 1024 * eval(item.split()[0]))
+ elif item.split()[1].upper() == "GB":
+ list_number.append(1024 * 1024 * 1024 * eval(item.split()[0]))
+ else:
+ list_number.append(eval(item.split()[0]))
+ return (sorted(list_number) == list_number)
+
+ else:
+ print('Unrecognized list type, please check')
+ return False
+
+
+def is_list_inverted(testlist):
+ """
+ Function to tell if list is inverted
+ Currently we may have list made up of: Strings ; numbers ; percentage ; time; size
+ Each has respective way to determine if it's inverted.
+ """
+ test_list = testlist[:]
+ try:
+ test_list.remove('')
+ except ValueError:
+ pass
+
+ if get_list_attr(testlist) == Listattr.NULL :
+ print ("is_list_inverted ---> 1")
+ return True
+
+ elif get_list_attr(testlist) == Listattr.STRINGS :
+ print ("is_list_inverted ---> 2")
+ return (sorted(test_list, reverse = True) == test_list)
+ print ("is_list_inverted ---> 3")
+
+ elif get_list_attr(testlist) == Listattr.NUMBERS :
+ print ("is_list_inverted ---> 4")
+ list_number = []
+ for item in test_list:
+ list_number.append(eval(item))
+ return (sorted(list_number, reverse = True) == list_number)
+
+ elif get_list_attr(testlist) == Listattr.PERCENT :
+ print ("is_list_inverted ---> 5")
+ list_number = []
+ for item in test_list:
+ list_number.append(eval(item.strip('%')))
+ return (sorted(list_number, reverse = True) == list_number)
+
+ elif get_list_attr(testlist) == Listattr.SIZE :
+ print ("is_list_inverted ---> 6")
+ list_number = []
+ # currently SIZE is splitted by space. such as 0 B; 1 KB; 2 MB
+ for item in test_list:
+ if item.split()[1].upper() == "KB":
+ list_number.append(1024 * eval(item.split()[0]))
+ elif item.split()[1].upper() == "MB":
+ list_number.append(1024 * 1024 * eval(item.split()[0]))
+ elif item.split()[1].upper() == "GB":
+ list_number.append(1024 * 1024 * 1024 * eval(item.split()[0]))
+ else:
+ list_number.append(eval(item.split()[0]))
+ return (sorted(list_number, reverse = True) == list_number)
+
+ else:
+ print ("is_list_inverted ---> 7")
+ print('Unrecognized list type, please check')
+ return False
+
+def replace_file_content(filename, item, option):
+ f = open(filename)
+ lines = f.readlines()
+ f.close()
+ output = open(filename, 'w')
+ for line in lines:
+ if line.startswith(item):
+ output.write(item + " = '" + option + "'\n")
+ else:
+ output.write(line)
+ output.close()
+
+def extract_number_from_string(s):
+ """
+ extract the numbers in a string. return type is 'list'
+ """
+ return re.findall(r'([0-9]+)', s)
+
+def mkdir_p(dir):
+ try:
+ os.makedirs(dir)
+ except OSError as exc:
+ if exc.errno == errno.EEXIST and os.path.isdir(dir):
+ pass
+ else:
+ raise
+
+# Below is decorator derived from toaster backend test code
+class NoParsingFilter(logging.Filter):
+ def filter(self, record):
+ return record.levelno == 100
+
+#rewrite the run method of unittest.TestCase to add testcase logging
+def LogResults(original_class):
+ orig_method = original_class.run
+
+ from time import strftime, gmtime
+ caller = 'toaster'
+ timestamp = strftime('%Y%m%d%H%M%S', gmtime())
+ logfile = os.path.join(os.getcwd(), 'results-' + caller + '.' + timestamp + '.log')
+ linkfile = os.path.join(os.getcwd(), 'results-' + caller + '.log')
+
+ # rewrite the run method of unittest.TestCase to add testcase logging
+ def run(self, result, *args, **kws):
+ orig_method(self, result, *args, **kws)
+ passed = True
+ testMethod = getattr(self, self._testMethodName)
+ # if test case is decorated then use it's number, else use it's name
+ try:
+ test_case = testMethod.test_case
+ except AttributeError:
+ test_case = self._testMethodName
+
+ class_name = str(testMethod.im_class).split("'")[1]
+
+ # create custom logging level for filtering.
+ custom_log_level = 100
+ logging.addLevelName(custom_log_level, 'RESULTS')
+
+ def results(self, message, *args, **kws):
+ if self.isEnabledFor(custom_log_level):
+ self.log(custom_log_level, message, *args, **kws)
+
+ logging.Logger.results = results
+
+ logging.basicConfig(filename=logfile,
+ filemode='w',
+ format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
+ datefmt='%H:%M:%S',
+ level=custom_log_level)
+ for handler in logging.root.handlers:
+ handler.addFilter(NoParsingFilter())
+ local_log = logging.getLogger(caller)
+
+ # check status of tests and record it
+ for (name, msg) in result.errors:
+ if (self._testMethodName == str(name).split(' ')[0]) and (class_name in str(name).split(' ')[1]):
+ local_log.results("Testcase " + str(test_case) + ": ERROR")
+ local_log.results("Testcase " + str(test_case) + ":\n" + msg)
+ passed = False
+ for (name, msg) in result.failures:
+ if (self._testMethodName == str(name).split(' ')[0]) and (class_name in str(name).split(' ')[1]):
+ local_log.results("Testcase " + str(test_case) + ": FAILED")
+ local_log.results("Testcase " + str(test_case) + ":\n" + msg)
+ passed = False
+ for (name, msg) in result.skipped:
+ if (self._testMethodName == str(name).split(' ')[0]) and (class_name in str(name).split(' ')[1]):
+ local_log.results("Testcase " + str(test_case) + ": SKIPPED")
+ passed = False
+ if passed:
+ local_log.results("Testcase " + str(test_case) + ": PASSED")
+
+ # Create symlink to the current log
+ if os.path.exists(linkfile):
+ os.remove(linkfile)
+ os.symlink(logfile, linkfile)
+
+ original_class.run = run
+ return original_class \ No newline at end of file
diff --git a/toasteruitest/__init__.py b/toasteruitest/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/toasteruitest/__init__.py
diff --git a/toasteruitest/run_toastertests.py b/toasteruitest/run_toastertests.py
new file mode 100644
index 00000000000..dffb3d995fa
--- /dev/null
+++ b/toasteruitest/run_toastertests.py
@@ -0,0 +1,114 @@
+#!/usr/bin/python
+#
+# DESCRIPTION
+# This is main script for running all selected toaster cases
+# on selected web browser manifested in toaster_test.cfg
+#
+
+import argparse
+import ConfigParser
+import os
+import platform
+import sys
+from toaster_automation_test import toaster_cases
+import unittest
+
+def get_args_parser():
+ description = "Script that runs toaster auto tests."
+ parser = argparse.ArgumentParser(description=description)
+ parser.add_argument('--run-all-tests', required=False, action="store_true", dest="run_all_tests", default=False,
+ help='Run all tests.')
+ parser.add_argument('--run-suite', required=False, dest='run_suite', default=False,
+ help='run suite (defined in cfg file)')
+ return parser
+
+def get_tests():
+ testslist = []
+ prefix = 'toaster_automation_test.toaster_cases'
+ for t in dir(toaster_cases):
+ if t.startswith('test_'):
+ testslist.append('.'.join((prefix, t)))
+ return testslist
+
+def get_tests_from_cfg(suite=None):
+
+ testslist = []
+ config = ConfigParser.SafeConfigParser()
+ config.read('toaster_test.cfg')
+
+ if suite is not None:
+ target_suite = suite.lower()
+ else:
+ target_suite = platform.system().lower()
+ try:
+ tests_from_cfg = eval(config.get('toaster_test_' + target_suite, 'test_cases'))
+ except:
+ print('Failed to get test cases from cfg file. Make sure the format is correct.')
+ return None
+
+ prefix = 'toaster_automation_test.toaster_cases.test_'
+ for t in tests_from_cfg:
+ testslist.append(prefix + str(t))
+ return testslist
+
+def buildResultClass(args):
+ """Build a Result Class to use in the testcase execution"""
+ class StampedResult(unittest.TextTestResult):
+ """
+ Custom TestResult that prints the time when a test starts. As toaster-auto
+ can take a long time (ie a few hours) to run, timestamps help us understand
+ what tests are taking a long time to execute.
+ """
+ def startTest(self, test):
+ import time
+ self.stream.write(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + " - ")
+ super(StampedResult, self).startTest(test)
+ return StampedResult
+
+def main():
+
+ os.chdir(os.path.abspath(sys.path[0]))
+ parser = get_args_parser()
+ args = parser.parse_args()
+
+ if args.run_all_tests:
+ testslist = get_tests()
+ elif args.run_suite:
+ testslist = get_tests_from_cfg(args.run_suite)
+ os.environ['TOASTER_SUITE'] = args.run_suite
+ else:
+ testslist = get_tests_from_cfg()
+
+ if not testslist:
+ print('Failed to get test cases.')
+ exit(1)
+
+ suite = unittest.TestSuite()
+ loader = unittest.TestLoader()
+ loader.sortTestMethodsUsing = None
+ runner = unittest.TextTestRunner(verbosity=2, resultclass=buildResultClass(args))
+ for test in testslist:
+ try:
+ suite.addTests(loader.loadTestsFromName(test))
+ except:
+ return 1
+
+ result = runner.run(suite)
+
+ if result.wasSuccessful():
+ return 0
+ else:
+ return 1
+
+if __name__ == "__main__":
+
+ try:
+ ret = main()
+ except:
+ ret = 1
+ import traceback
+ traceback.print_exc()
+ finally:
+ if os.getenv('TOASTER_SUITE'):
+ del os.environ['TOASTER_SUITE']
+ sys.exit(ret) \ No newline at end of file
diff --git a/toasteruitest/toaster_automation_test.py b/toasteruitest/toaster_automation_test.py
new file mode 100644
index 00000000000..e3e5d7f0671
--- /dev/null
+++ b/toasteruitest/toaster_automation_test.py
@@ -0,0 +1,1789 @@
+#!/usr/bin/python
+#
+# DESCRIPTION
+# This script has toaster_cases class which includes all test cases.
+#
+import Base_Utility
+#from selenium import webdriver
+from selenium.webdriver.common.by import By
+from selenium.webdriver.support.ui import Select
+from selenium.webdriver.common.action_chains import ActionChains
+import time
+import Utility
+
+class toaster_cases(Base_Utility.toaster_cases_base):
+
+ def test_901(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.driver.find_element_by_partial_link_text('builds').click()
+ option_ids = ['checkbox-started_on', 'checkbox-failed_tasks', \
+ 'checkbox-errors_no', 'checkbox-warnings_no', 'checkbox-time', 'checkbox-image_files', \
+ 'checkbox-project']
+ self.driver.find_element_by_id("edit-columns-button").click()
+ for item in option_ids:
+ if not self.driver.find_element_by_id(item).is_selected():
+ self.driver.find_element_by_id(item).click()
+ time.sleep(3)
+ self.driver.find_element_by_id("edit-columns-button").click()
+ sorted_column = {'outcome': 1, 'machine': 3, 'completed_on': 4, 'errors_no': 6, 'warnings_no': 8,'project':11}
+ for key in sorted_column:
+ self.driver.find_element_by_xpath("//a[@data-sort-field='" + key + "']").click()
+ time.sleep(3)
+ column_list = self.get_table_column_text_by_column_number('allbuildstable',int(sorted_column[key]))
+ time.sleep(3)
+ if (int(sorted_column[key])!=1):
+ self.assertTrue(Utility.is_list_inverted(column_list) or Utility.is_list_sequenced(column_list),
+ msg=("list not in sequence order or not inverted for %d columns" %int(sorted_column[key])))
+ self.driver.find_element_by_xpath("//a[@data-sort-field='" + key + "']").click()
+ time.sleep(3)
+ column_list = self.get_table_column_text_by_column_number('allbuildstable', int(sorted_column[key]))
+ if (int(sorted_column[key]) != 1):
+ self.assertTrue(Utility.is_list_inverted(column_list) or Utility.is_list_sequenced(column_list),
+ msg=("list not in sequence order or not inverted for %d columns" % int(sorted_column[key])))
+ time.sleep(2)
+ self.log.info("case passed")
+
+ def test_902(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)
+ patterns = ["minimal"]
+ self.driver.find_element_by_partial_link_text('builds').click()
+ for pattern in patterns:
+ self.driver.find_element_by_id("search-input-allbuildstable").clear()
+ self.driver.find_element_by_id("search-input-allbuildstable").send_keys(pattern)
+ self.driver.find_element_by_id("search-submit-allbuildstable").click()
+ time.sleep(3)
+ new_target_column_texts = self.get_table_column_text('class', 'target')
+ time.sleep(3)
+ if new_target_column_texts:
+ for text in new_target_column_texts:
+ self.assertTrue(text.find(pattern), msg=("%s item doesn't exist " % pattern))
+ self.driver.find_element_by_xpath("(//span[@class='remove-search-btn-allbuildstable glyphicon glyphicon-remove-circle'])[2]").click()
+ time.sleep(2)
+ self.assertTrue(self.driver.find_element_by_xpath("//h1[@class='top-air']").text == 'All builds',msg=("All builds not found after clear search" ))
+ self.log.info("case passed")
+ def test_903(self):
+ self.case_no = self.get_case_number()
+ image_type1 = "core-image-minimal"
+ image_type2 = "core-image-sato"
+ self.log.info(' CASE %s log: ' % str(self.case_no))
+ self.driver.maximize_window()
+ self.driver.get(self.base_url)
+ self.driver.find_element_by_partial_link_text('builds').click()
+ if (self.driver.find_element_by_xpath("//h1[@class='top-air']").text == 'All builds'):
+ self.driver.find_element_by_id("edit-columns-button").click()
+ self.driver.find_element_by_id("checkbox-started_on").click()
+ self.driver.find_element_by_id("edit-columns-button").click()
+ items = ["Outcome", "Completed on", "Started on", 'Failed tasks']
+ for item in items:
+ try:
+ temp_element = self.find_element_by_text_in_table('allbuildstable', item)
+ time.sleep(3)
+ self.assertTrue(temp_element.find_element_by_xpath(
+ "//a[@data-filter-on='outcome_filter']/i[@class='glyphicon glyphicon-filter filtered']"))
+ except Exception as e:
+ self.assertFalse(True, msg=(" %s cannot be found! %s" % (item, e)))
+ raise
+ filter_list = ['outcome_filter', 'started_on_filter', 'completed_on_filter','failed_tasks_filter']
+ for key in filter_list:
+ self.driver.find_element_by_xpath("//*[@id='" + key + "']/i").click()
+ time.sleep(2)
+ self.driver.find_element_by_xpath("(//label[contains(@for,'" + key + "')] // input[ @ type = 'radio'])[3]").click()
+ time.sleep(2)
+ self.driver.find_element_by_xpath("//button[@class='btn btn-primary']").click()
+ time.sleep(2)
+ self.driver.find_element_by_id("search-input-allbuildstable").clear()
+ self.driver.find_element_by_id("search-input-allbuildstable").send_keys(image_type1)
+ time.sleep(2)
+ self.driver.find_element_by_id("search-submit-allbuildstable").click()
+ self.driver.find_element_by_xpath("//*[@id='" + key + "']/i").click()
+ time.sleep(2)
+ avail_options = self.driver.find_elements_by_xpath("//label[@class='filter-title']")
+ radio_button = self.driver.find_element_by_xpath("//*[@id='" + key + ":all']")
+ self.driver.find_element_by_xpath(
+ "//*[@id='filter-modal-allbuildstable']/div/div/div[1]/button").click()
+ time.sleep(2)
+ if (radio_button.is_selected()):
+ pass
+ else:
+ self.assertFalse(True, msg=("Error: All option is not selected after search"))
+ self.log.info("case passed")
+ def test_904(self):
+ Expected_BreadCrumb_Number = 4
+ BreadCrumb_String = ["Builds", "core-image-minimal"]
+ 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)
+ Table_id = ['buildtaskstable', 'buildtimetable', 'buildcputimetable', 'buildiotable']
+ self.driver.find_element_by_partial_link_text("core-image-minimal").click()
+ Checkbox_Table = ["checkbox-order", "checkbox-recipe__name", "checkbox-task_name",
+ 'checkbox-recipe__version',
+ "checkbox-task_executed", "checkbox-outcome", "checkbox-sstate_result",
+ 'checkbox-elapsed_time',
+ 'checkbox-cpu_time_system', 'checkbox-cpu_time_user', 'checkbox-disk_io']
+ Shows_Rows_Id = ['table-chrome-collapse-buildtaskstable', 'table-chrome-collapse-buildtimetable',
+ 'table-chrome-collapse-buildcputimetable', 'table-chrome-collapse-buildiotable']
+ Ui_List = ["Tasks", "Time", "CPU usage", "Disk I/O"]
+ SeacrhTaskTable = ['search-input-buildtaskstable', 'search-input-buildtimetable',
+ 'search-input-buildcputimetable', 'search-input-buildiotable']
+ Expected_Edit_List = {'Tasks': ['Order', 'Recipe', 'Task', 'Executed', 'Outcome', 'Cache attempt'],
+ 'Time': ['Recipe', 'Task', 'Executed', 'Outcome', 'Time (secs)'],
+ "CPU usage": ['Recipe', 'Task', 'Executed', 'Outcome', 'System CPU time (secs)',
+ 'User CPU time (secs)'],
+ 'Disk I/O': ['Recipe', 'Task', 'Executed', 'Outcome', 'Disk I/O (ms)']}
+ count = 0
+ for item in Ui_List:
+ self.driver.find_element_by_link_text(item).click()
+ Total_BreadCrumb_Link = len(self.driver.find_elements_by_xpath("//*[@id='breadcrumb']/li"))
+ if (Total_BreadCrumb_Link == Expected_BreadCrumb_Number):
+ for i in range(1, Total_BreadCrumb_Link):
+ BreadCrumb_Name = self.driver.find_element_by_xpath("//*[@id='breadcrumb']/li[%d]/a" % i).text
+ self.driver.find_element_by_xpath("//*[@id='breadcrumb']/li[%d]/a" % i).click()
+ self.driver.back()
+ Active_BreadCrumb_Link = self.driver.find_element_by_xpath("(//*[@id='breadcrumb']/li)[4]").text
+ if (Active_BreadCrumb_Link == "Tasks"):
+ pass
+ else:
+ self.assertTrue(Active_BreadCrumb_Link, msg=("Active breadcrumb is not correct"))
+ else:
+ self.assertTrue(Total_BreadCrumb_Link, msg=("Total Breadcrumb link is not as expected"))
+ Total_Number_SideLink = len(self.driver.find_elements_by_xpath("//*[@id='nav']//li/a"))
+ for i in range(1, (Total_Number_SideLink - 2)):
+ time.sleep(5)
+ self.driver.find_element_by_xpath("(//*[@id='nav']//li/a)[%d]" % i).click()
+ time.sleep(2)
+ self.driver.back()
+ Active_Class_Name = self.driver.find_element_by_xpath("//*[@id='build-menu']/li[@class='active']/a").text
+ if (Active_Class_Name == item):
+ pass
+ else:
+ self.assertFalse(Active_Class_Name, msg=("Active class not correctly diaplyed"))
+ self.assertTrue(self.driver.find_element_by_xpath("//*[@id='" + SeacrhTaskTable[count] + "']"),
+ msg=("search tab not found on page"))
+ self.assertTrue(self.driver.find_element_by_xpath(
+ "//*[@id='" + SeacrhTaskTable[count] + "'][@placeholder='Search tasks']"),
+ msg=("search Placeholder is search tasks"))
+ self.driver.find_element_by_xpath("//*[@id='" + SeacrhTaskTable[count] + "']").click()
+ self.driver.find_element_by_xpath("//*[@id='" + SeacrhTaskTable[count] + "']").send_keys("busybox")
+ time.sleep(2)
+ self.driver.find_element_by_xpath("//button[@class='btn btn-default']").click()
+ time.sleep(2)
+ column_list_busybox = self.driver.find_elements_by_xpath("//a[text()='busybox']")
+ if (len(column_list_busybox) >= 1):
+ pass
+ else:
+ self.assertFalse(len(column_list_busybox),msg=("Error: Seacrh is not successful"))
+ self.driver.find_element_by_xpath("//*[@id='" + SeacrhTaskTable[count] + "']").click()
+ self.driver.find_element_by_xpath("(//span[contains(@class,'remove-search-btn')])[2]").click()
+ edit_Show_Rows = Select(
+ self.driver.find_element_by_xpath("//*[@id='" + Shows_Rows_Id[count] + "']/form[2]/div/select"))
+ selected_number_rows = "25"
+ edit_Show_Rows.select_by_value(selected_number_rows)
+ time.sleep(5)
+ Total_Row_Num = len(
+ self.driver.find_elements_by_xpath("//table[@class='table table-bordered table-hover']/tbody/tr"))
+ if selected_number_rows != Total_Row_Num:
+ self.assertTrue(Total_Row_Num, msg=("Total number of rows slected are not correct"))
+ else:
+ pass
+ self.assertTrue(self.driver.find_elements_by_xpath("//ul[@class='pagination']/li"),
+ msg=("Pagination Link not available"))
+ self.assertTrue(self.driver.find_element_by_xpath("(//form[@class='navbar-form navbar-right'])[2]"),
+ msg=("Shows Rows option not available at bottom of page"))
+ self.driver.find_element_by_id("edit-columns-button").click()
+ time.sleep(2)
+ Edit_Element = self.driver.find_elements_by_xpath("//*[@class='dropdown-menu editcol']//li//div")
+ Edit_Check_List = []
+ for element in Edit_Element:
+ Edit_Check_List.append(element.text)
+ self.driver.find_element_by_id("edit-columns-button").click()
+ time.sleep(2)
+ self.driver.find_element_by_id("edit-columns-button").click()
+ time.sleep(2)
+ Actual_Checked_List = []
+ for item1 in Checkbox_Table:
+ value = self.driver.find_element_by_id(item1).is_selected()
+ if value:
+ Actual_Checked_List.append(self.driver.find_element_by_id(item1).find_element_by_xpath('..').text)
+ result = all(elem in Actual_Checked_List for elem in Expected_Edit_List[item])
+ if result:
+ pass
+ else:
+ self.assertTrue(result, msg=("Error:Edit column list not found as expected"))
+ self.driver.find_element_by_id("edit-columns-button").click()
+ time.sleep(3)
+ self.driver.find_element_by_id("edit-columns-button").click()
+ time.sleep(2)
+ Edit_Element = self.driver.find_elements_by_xpath("//*[@class='dropdown-menu editcol']//li//div")
+ Edit_Check_List = []
+ edit_number = 1
+ for element in Edit_Element:
+ Edit_Check_List.append(element.text)
+ Displayed_coulmn_number = len(
+ self.driver.find_elements_by_xpath("//th[contains(@style,'display: none;')]"))
+ self.driver.find_element_by_xpath("(//input[@type='checkbox'])[%d]" % edit_number).click()
+ time.sleep(10)
+ Displayed_coulmn_number_after_click = len(
+ self.driver.find_elements_by_xpath("//th[contains(@style,'display: none;')]"))
+ if (Displayed_coulmn_number == Displayed_coulmn_number_after_click):
+ pass
+ else:
+ self.driver.find_element_by_xpath("(//input[@type='checkbox'])[%d]" % edit_number).click()
+ edit_number = edit_number + 1
+ self.driver.find_element_by_id("edit-columns-button").click()
+ time.sleep(2)
+ self.driver.find_element_by_id("edit-columns-button").click()
+ time.sleep(2)
+ for item1 in Checkbox_Table:
+ if not self.driver.find_element_by_id(item1).is_selected():
+ self.driver.find_element_by_id(item1).click()
+ time.sleep(2)
+ self.driver.find_element_by_id("edit-columns-button").click()
+ if (item == 'Tasks'):
+ if self.driver.find_element_by_xpath("//*[@id='buildtaskstable']/thead/tr/th[1]/a").text == 'Order':
+ pass
+ else:
+ self.assertFalse(True, msg=("Error: Order is not bold"))
+ self.assertTrue(self.driver.find_element_by_xpath("//*[@id='buildtaskstable']/thead/tr/th[1]/i[1]"),
+ msg=' down-arrow icon are not present ')
+ default_column_list = self.get_table_column_text_by_column_number('buildtaskstable', 1)
+ self.assertTrue(Utility.is_list_sequenced(default_column_list),
+ msg=("list not in sequence for corresponding column"))
+ Column_Head_Len = len(
+ self.driver.find_elements_by_xpath("//*[@id='" + Table_id[count] + "']/thead/tr/th"))
+ for i in range(2, Column_Head_Len):
+ if (i >= 4):
+ i = i + 1
+ self.driver.find_element_by_xpath("//*[@id='" + Table_id[count] + "']/thead/tr/th[%d]/a" % i).click()
+ time.sleep(10)
+ column_list = self.get_table_column_text_by_column_number(Table_id[count], i)
+ self.assertTrue(Utility.is_list_sequenced(column_list) or Utility.is_list_inverted(column_list),
+ msg=("list not in sequence not inverted for corresponding order"))
+
+ filter_list = ['execution_outcome', 'task_outcome', 'sstate_outcome']
+ filter_column_number = 5
+ for key in filter_list:
+ self.driver.find_element_by_xpath("//*[@id='" + key + "']/i").click()
+ time.sleep(2)
+ avail_options = self.driver.find_elements_by_xpath("//label[@class='filter-title']")
+ radio_button = self.driver.find_element_by_xpath("//*[@id='" + key + ":all']")
+ self.driver.find_element_by_xpath(
+ "/html/body/div[3]/div[3]/div[2]/div/div[2]/div/div/div[1]/button").click()
+ time.sleep(2)
+ if (radio_button.is_selected()):
+ pass
+ else:
+ self.assertFalse(True, msg=("Error: All option is not selected before channging"))
+ for number in range(2, (len(avail_options)) + 1):
+ self.driver.find_element_by_xpath("//*[@id='" + key + "']/i").click()
+ time.sleep(2)
+ if ((number == 4 or number == 5 or number == 6) and key == 'task_outcome'):
+ number = 7
+ if ((number == 4 or number == 5) and key == 'sstate_outcome'):
+ break
+ self.driver.find_element_by_xpath("(//input[@type='radio'])[%d]" % number).click()
+ time.sleep(2)
+ if (number == 7 and key == 'task_outcome'):
+ number = 4
+ match = self.driver.find_element_by_xpath("(//label[@class='filter-title'])[%d]" % number)
+ self.driver.find_element_by_xpath("//button[@class='btn btn-primary']").click()
+ time.sleep(2)
+ column_list = self.get_table_column_text_by_column_number(Table_id[count], filter_column_number)
+ column_list_set = set(column_list)
+ column_list_converted = list(column_list_set)
+ if (str(column_list_converted[0]) != ''):
+ if (str(match.text)).find(str(column_list_converted[0])):
+ pass
+ else:
+ self.assertFalse(True, msg=("Error: All option is not selected before channging"))
+ if (number == 4 and key == 'task_outcome'):
+ break
+ self.driver.find_element_by_xpath("//*[@id='" + key + "']/i").click()
+ time.sleep(2)
+ self.driver.find_element_by_xpath("(//input[@type='radio'])[1]").click()
+ time.sleep(2)
+ self.driver.find_element_by_xpath("//button[@class='btn btn-primary']").click()
+ time.sleep(2)
+ self.driver.find_element_by_xpath("//*[@id='" + key + "']/i").click()
+ time.sleep(2)
+ radio_button_selected = self.driver.find_element_by_xpath("//*[@id='" + key + ":all']")
+ if (radio_button_selected.is_selected()):
+ pass
+ else:
+ self.assertFalse(True, msg=("Error:All option is not selected after chnages"))
+ self.driver.find_element_by_xpath(
+ "/html/body/div[3]/div[3]/div[2]/div/div[2]/div/div/div[1]/button").click()
+ time.sleep(2)
+ filter_column_number = filter_column_number + 1
+ Row_Len = len(self.driver.find_elements_by_xpath("//*[@id='" + Table_id[count] + "']/tbody/tr"))
+ time.sleep(2)
+ for row_number in range(1, Row_Len + 1):
+ self.driver.find_element_by_xpath(
+ "//*[@id='" + Table_id[count] + "']/tbody/tr[%d]/td[2]/a" % row_number).click()
+ time.sleep(2)
+ self.driver.back()
+ time.sleep(2)
+ self.driver.find_element_by_xpath(
+ "//*[@id='" + Table_id[count] + "']/tbody/tr[%d]/td[3]/a" % row_number).click()
+ time.sleep(2)
+ self.driver.back()
+ time.sleep(2)
+ count = count + 1
+ self.log.info("case passed")
+
+ def test_906(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)
+ Expected_BreadCrumb_Number = 5
+ self.driver.find_element_by_link_text("core-image-minimal").click()
+ self.find_element_by_link_text_in_table('nav', 'Packages').click()
+ self.driver.find_element_by_xpath("//*[@id='builtpackagestable']/tbody/tr[1]/td[1]/a").click()
+ Total_BreadCrumb_Link = len(self.driver.find_elements_by_xpath("//*[@id='breadcrumb']/li"))
+ if (Total_BreadCrumb_Link == Expected_BreadCrumb_Number):
+ for i in range(1, Total_BreadCrumb_Link):
+ BreadCrumb_Name = self.driver.find_element_by_xpath("//*[@id='breadcrumb']/li[%d]/a" % i).text
+ self.assertTrue(BreadCrumb_Name != '', msg="Breaccrum name not available")
+ self.driver.find_element_by_xpath("//*[@id='breadcrumb']/li[%d]/a" % i).click()
+ self.driver.back()
+ time.sleep(2)
+ else:
+ self.assertFalse(True, msg=("Error:Total Breadcrumb link is not as expected"))
+ self.driver.find_element_by_xpath("(//ul[@class='breadcrumb']//li)[4]").click()
+ time.sleep(1)
+ self.driver.find_element_by_xpath("//*[@id='builtpackagestable']/tbody/tr[1]/td[1]/a").click()
+ time.sleep(1)
+ name_package=self.driver.find_element_by_xpath("//div[@class='tab-content']//div[@class='tab-pane active']//div").text
+ if 'Package included in' in name_package:
+ self.driver.find_element_by_xpath("//div[@class='well']")
+ self.driver.find_element_by_xpath("//div[@class='page-header build-data']")
+ else:
+ if ('Generated files' in self.driver.find_element_by_xpath("(//div[@class='col-md-8 tabbable']/ul/li/a)[1]").text):
+ pass
+ else:
+ self.assertFalse(True, msg=("Error correct active string not diaplyed"))
+ if ('Runtime dependencies' in self.driver.find_element_by_xpath("(//div[@class='col-md-8 tabbable']/ul/li/a)[2]").text):
+ pass
+ else:
+ self.assertFalse(True, msg=("Error correct string not diaplyed in 2nd tab"))
+ self.driver.find_element_by_partial_link_text("Generated files").click()
+ string_generated_file = self.driver.find_element_by_xpath("/html/body/div[3]/div[3]/div[1]/ul/li[1]/a").text
+ generate_files_row_number = len(self.driver.find_elements_by_xpath(
+ "//table[@class='table table-bordered table-hover tablesorter']/tbody/tr"))
+ expected_value_generated_files = (((string_generated_file.split()[2]).split('(')[1]).split(')'))[0]
+ if (int(expected_value_generated_files)>0):
+ if (generate_files_row_number == int(expected_value_generated_files) ):
+ head_list = self.get_table_head_text('otable')
+ for item in ['File', 'Size']:
+ self.assertTrue(item in head_list, msg=("%s not in head row" % item))
+ c_list = self.get_table_column_text('class', 'path')
+ self.assertTrue(Utility.is_list_sequenced(c_list), msg=("column not in order"))
+ else:
+ self.assertFalse(True, msg=("Error: row number is not correct for generated files"))
+ self.driver.find_element_by_partial_link_text("Runtime dependencies").click()
+ string_runtime_dependencies = self.driver.find_element_by_xpath(
+ "/html/body/div[3]/div[3]/div[1]/ul/li[2]/a").text
+ runtime_dependencies_row_number = len(
+ self.driver.find_elements_by_xpath("//table[@class='table table-bordered table-hover']/tbody/tr"))
+ expected_value_runtime_dependencies = (((string_runtime_dependencies.split()[2]).split('(')[1]).split(')'))[
+ 0]
+ if (int(expected_value_runtime_dependencies) > 0):
+ if (runtime_dependencies_row_number == int(expected_value_runtime_dependencies)):
+ head_list = self.get_table_head_text('dependencies')
+ for item in ['Package', 'Version', 'Size']:
+ self.assertTrue(item in head_list, msg=("%s not in head row" % item))
+ c_list = self.get_table_column_text_by_column_number('dependencies', 1)
+ self.assertTrue(Utility.is_list_sequenced(c_list), msg=("list not in order"))
+ else:
+ self.assertFalse(True, msg=("Error: row number is not correct for runtime dependencies"))
+ texts = ['Size', 'License', 'Recipe', 'Recipe version', 'Layer', 'Layer'' commit']
+ if (len(self.driver.find_elements_by_xpath(
+ "//dl//span[@class='glyphicon glyphicon-question-sign get-help']")) == 7):
+ pass
+ else:
+ self.assertFalse(True, msg=("Error: total number of help option is not correct"))
+ self.failUnless(self.is_text_present(texts))
+ time.sleep(3)
+ self.driver.find_element_by_xpath("//*[@id='breadcrumb']/li[4]/a").click()
+ time.sleep(3)
+ self.driver.find_element_by_id("search-input-builtpackagestable").click()
+ self.driver.find_element_by_id("search-input-builtpackagestable").send_keys("busybox")
+ self.driver.find_element_by_id("search-submit-builtpackagestable").click()
+ time.sleep(2)
+ self.driver.find_element_by_xpath("//*[@id='builtpackagestable']/tbody/tr[1]/td[1]/a").click()
+ if (self.driver.find_element_by_xpath("//div[@class='lead well']").text != ''):
+ self.driver.find_element_by_xpath("//div[@class='lead well']").click()
+ self.log.info("case passed")
+ def test_910(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)
+ image_type = "core-image-minimal"
+ test_package1 = "busybox"
+ test_package2 = "lib"
+ section_column_number = 6
+ self.driver.find_element_by_link_text(image_type).click()
+ self.driver.find_element_by_link_text("Recipes").click()
+ default_column_list = self.get_table_column_text_by_column_number('builtrecipestable', 1)
+ self.assertTrue(Utility.is_list_sequenced(default_column_list),
+ msg=("list not in sequence order deafault column Recipes"))
+ self.driver.find_element_by_id("edit-columns-button").click()
+ time.sleep(2)
+ self.driver.find_element_by_id("checkbox-section").click()
+ time.sleep(2)
+ self.driver.find_element_by_id("edit-columns-button").click()
+ time.sleep(2)
+ self.driver.find_element_by_xpath("//th[@class='section']/a").click()
+ time.sleep(2)
+ column_list_after_section = self.get_table_column_text_by_column_number('builtrecipestable',
+ section_column_number)
+ self.assertTrue(Utility.is_list_sequenced(column_list_after_section))
+ self.driver.find_element_by_id("search-input-builtrecipestable").click()
+ self.driver.find_element_by_id("search-input-builtrecipestable").send_keys(test_package1)
+ self.driver.find_element_by_xpath("//button[@class='btn btn-default']").click()
+ time.sleep(2)
+ self.driver.find_element_by_id("search-input-builtrecipestable").click()
+ time.sleep(2)
+ self.driver.find_element_by_xpath(
+ "//*[@id='table-chrome-collapse-builtrecipestable']/form[1]/div/div/span").click()
+ time.sleep(2)
+ column_list_Section_after_search = self.get_table_column_text_by_column_number('builtrecipestable',
+ section_column_number)
+ self.assertTrue(Utility.is_list_sequenced(column_list_Section_after_search))
+ option_ids = ['checkbox-name', 'checkbox-version', \
+ 'checkbox-dependencies', 'checkbox-revdeps', 'checkbox-file_path', 'checkbox-section', \
+ 'checkbox-license', 'checkbox-layer_version__layer__name', 'checkbox-layer_version__branch',
+ 'checkbox-commit']
+ self.driver.find_element_by_id("edit-columns-button").click()
+ time.sleep(2)
+ for item1 in option_ids:
+ if not self.driver.find_element_by_id(item1).is_selected():
+ self.driver.find_element_by_id(item1).click()
+ time.sleep(2)
+
+ self.driver.find_element_by_id("edit-columns-button").click()
+ column_head = ['Recipe', 'Section', 'License', 'Layer', 'Layer branch']
+ column_number = 1
+ for item in column_head:
+ time.sleep(2)
+ self.find_element_by_link_text_in_table('builtrecipestable', item).click()
+ time.sleep(2)
+ if column_number == 2:
+ column_number = section_column_number
+ column_list_packages = self.get_table_column_text_by_column_number('builtrecipestable', column_number)
+ self.assertTrue(Utility.is_list_sequenced(column_list_packages) or Utility.is_list_inverted(column_list_packages),
+ msg=("list not in sequence order or not inverted for %s columns" % item))
+ column_number = column_number + 1
+ self.find_element_by_link_text_in_table('builtrecipestable', 'Recipe').click()
+ time.sleep(2)
+ column_number = 1
+ for item in column_head:
+ self.find_element_by_link_text_in_table('builtrecipestable', item).click()
+ time.sleep(2)
+ if column_number == 2:
+ column_number = section_column_number
+ column_list_packages = self.get_table_column_text_by_column_number('builtrecipestable', column_number)
+ self.assertTrue(Utility.is_list_sequenced(column_list_packages) or Utility.is_list_inverted(column_list_packages),
+ msg=("list not in sequence order or not inverted for %s columns before serach" % item))
+ self.driver.find_element_by_id("search-input-builtrecipestable").click()
+ self.driver.find_element_by_id("search-input-builtrecipestable").send_keys(test_package2)
+ self.driver.find_element_by_xpath("//button[@class='btn btn-default']").click()
+ time.sleep(2)
+ column_list_packages_after_search = self.get_table_column_text_by_column_number('builtrecipestable',column_number)
+ self.assertTrue(
+ Utility.is_list_sequenced(column_list_packages_after_search) or Utility.is_list_inverted(column_list_packages),
+ msg=("list not in sequence order or not inverted for %s columns after serach" % item))
+ self.driver.find_element_by_id("search-input-builtrecipestable").click()
+ time.sleep(2)
+ self.driver.find_element_by_xpath(
+ "//*[@id='table-chrome-collapse-builtrecipestable']/form[1]/div/div/span").click()
+ column_number = column_number + 1
+ table_head_dict = {'Section': 'checkbox-section', 'License': 'checkbox-license',
+ 'Layer': 'checkbox-layer_version__layer__name',
+ 'Layer branch': 'checkbox-layer_version__branch'}
+ for key in table_head_dict:
+ self.find_element_by_link_text_in_table('builtrecipestable', key).click()
+ time.sleep(2)
+ self.driver.find_element_by_id("edit-columns-button").click()
+ self.driver.find_element_by_id(table_head_dict[key]).click()
+ self.driver.find_element_by_id("edit-columns-button").click()
+ default_column_list = self.get_table_column_text_by_column_number('builtrecipestable', 1)
+ self.assertTrue(Utility.is_list_sequenced(default_column_list),
+ msg=("list not in sequence order deafault column Recipes"))
+ time.sleep(2)
+ self.driver.find_element_by_id("edit-columns-button").click()
+ self.driver.find_element_by_id('checkbox-license').click()
+ time.sleep(2)
+ self.driver.find_element_by_id('checkbox-layer_version__layer__name').click()
+ time.sleep(2)
+ self.driver.find_element_by_id("edit-columns-button").click()
+ self.log.info("case passed")
+ def test_911(self):
+ self.case_no = self.get_case_number()
+ self.log.info(' CASE %s log: ' % str(self.case_no))
+ self.driver.maximize_window()
+ searched_recipies = 'hfidf'
+ self.driver.get(self.base_url)
+ self.driver.find_element_by_link_text("core-image-minimal").click()
+ self.find_element_by_link_text_in_table('nav', 'Recipes').click()
+ self.driver.find_element_by_xpath("//*[@placeholder='Search recipes built']")
+ self.driver.find_element_by_id("search-input-builtrecipestable")
+ time.sleep(5)
+ self.driver.find_element_by_id("search-input-builtrecipestable").clear()
+ self.driver.find_element_by_id("search-input-builtrecipestable").send_keys("lib")
+ time.sleep(5)
+ self.driver.find_element_by_id("search-submit-builtrecipestable").click()
+ time.sleep(3)
+ seacrhed_string = self.driver.find_element_by_xpath("//div[@class='page-header build-data']").text
+ seacrhed_string_value = int(((seacrhed_string.split()[2].split('(')[1].split(')'))[0]))
+ if (seacrhed_string_value == 0):
+ self.driver.find_element_by_id("new-search-input-builtrecipestable")
+ self.driver.find_element_by_xpath("//*[@id='no-results-builtrecipestable']/div/form/button[2]").click()
+ time.sleep(5)
+ elif (seacrhed_string_value > 0):
+ self.driver.find_element_by_id("search-submit-builtrecipestable").click()
+ time.sleep(5)
+ self.driver.find_element_by_xpath(
+ "//*[@id='table-chrome-collapse-builtrecipestable']/form[1]/div/div/span").click()
+ else:
+ self.assertFalse(True, msg=("Error: Searched text not found in expected output"))
+ head_list = self.get_table_head_text('builtrecipestable')
+ self.assertTrue(head_list == ['Recipe', 'Version', 'Dependencies', 'Reverse dependencies', 'License', 'Layer'], \
+ msg=("head row contents wrong"))
+ head_list_sort = self.get_table_head_text('builtrecipestable')
+ self.find_element_by_link_text_in_table('builtrecipestable', 'Recipe').click()
+ time.sleep(7)
+ sort_list = self.get_table_column_text_by_column_number('builtrecipestable', 1)
+ self.assertTrue(Utility.is_list_inverted(sort_list), msg=("list not inverted"))
+
+ self.driver.find_element_by_id("search-input-builtrecipestable").clear()
+ self.driver.find_element_by_id("search-input-builtrecipestable").send_keys("bash")
+ time.sleep(2)
+ self.driver.find_element_by_id("search-submit-builtrecipestable").click()
+ time.sleep(2)
+ head_list = self.get_table_head_text('builtrecipestable')
+ self.assertTrue(head_list == ['Recipe', 'Version', 'Dependencies', 'Reverse dependencies', 'License', 'Layer'], \
+ msg=("head row contents wrong"))
+ head_list = self.get_table_head_text('builtrecipestable')
+ self.assertTrue(head_list == ['Recipe', 'Version', 'Dependencies', 'Reverse dependencies', 'License', 'Layer'], \
+ msg=("head row contents wrong"))
+ sort_list = self.get_table_column_text_by_column_number('builtrecipestable', 1)
+ self.assertTrue(Utility.is_list_inverted(sort_list), msg=("list not in order"))
+ time.sleep(2)
+ self.driver.find_element_by_id("search-input-builtrecipestable").clear()
+ self.driver.find_element_by_xpath(
+ "//*[@id='table-chrome-collapse-builtrecipestable']/form[1]/div/div/span").click()
+ self.driver.find_element_by_id("search-input-builtrecipestable").clear()
+ self.driver.find_element_by_id("search-input-builtrecipestable").send_keys("no such input")
+ self.driver.find_element_by_id("search-submit-builtrecipestable").click()
+ time.sleep(3)
+ self.log.info("case passed")
+ def test_912(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.driver.find_element_by_link_text("core-image-minimal").click()
+ self.find_element_by_link_text_in_table('nav', 'Recipes').click()
+ head_list = self.get_table_head_text('builtrecipestable')
+ head = ['Recipe', 'Version', 'Dependencies', 'Reverse dependencies', 'License', 'Layer']
+ time.sleep(3)
+ for item in head:
+ self.assertTrue(item in head_list, msg=("item %s not in head row" % item))
+ time.sleep(3)
+ self.driver.find_element_by_id("edit-columns-button").click()
+ self.driver.find_element_by_xpath("//*[@id='checkbox-file_path']").click()
+ self.driver.find_element_by_xpath("//*[@id='checkbox-section']").click()
+
+ self.driver.find_element_by_xpath("//*[@id='checkbox-layer_version__branch']").click()
+ self.driver.find_element_by_xpath("//*[@id='checkbox-commit']").click()
+ self.driver.find_element_by_id("edit-columns-button").click()
+ time.sleep(3)
+ check_list = ['Dependencies', 'License', 'Recipe file', 'Section', 'Layer', 'Layer branch', 'Layer commit',
+ 'Reverse dependencies']
+ head_list = self.get_table_head_text('builtrecipestable')
+ time.sleep(2)
+ for item in check_list:
+ self.assertTrue(item in head_list, msg=("item %s not in head row" % item))
+ self.driver.find_element_by_id("edit-columns-button").click()
+ self.driver.find_element_by_xpath("//*[@id='checkbox-dependencies']").click()
+ self.driver.find_element_by_xpath("//*[@id='checkbox-revdeps']").click()
+ self.driver.find_element_by_xpath("//*[@id='checkbox-file_path']").click()
+ self.driver.find_element_by_xpath("//*[@id='checkbox-section']").click()
+ self.driver.find_element_by_xpath("//*[@id='checkbox-license']").click()
+ self.driver.find_element_by_xpath("//*[@id='checkbox-layer_version__layer__name']").click()
+ self.driver.find_element_by_xpath("//*[@id='checkbox-layer_version__branch']").click()
+ self.driver.find_element_by_xpath("//*[@id='checkbox-commit']").click()
+ self.driver.find_element_by_id("edit-columns-button").click()
+ head_list = self.get_table_head_text('builtrecipestable')
+ for item in check_list:
+ self.assertFalse(item in head_list, msg=("item %s should not be in head row" % item))
+ self.log.info("case passed")
+ def test_913(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.driver.find_element_by_link_text("core-image-minimal").click()
+ self.find_element_by_link_text_in_table('nav', 'Recipes').click()
+ head_list = self.get_table_head_text('builtrecipestable')
+ for item in ['Recipe', 'Version', 'Dependencies', 'Reverse dependencies', 'License', 'Layer']:
+ self.assertTrue(item in head_list, msg=("item %s not in head row" % item))
+ self.driver.find_element_by_id("edit-columns-button").click()
+ time.sleep(10)
+ if (len(self.driver.find_elements_by_xpath("//label[@class='text-muted']")) == 2):
+ pass
+ else:
+ self.assertFalse(True, msg=("Fail: Muted element is not correct"))
+ time.sleep(1)
+ self.driver.find_element_by_id("edit-columns-button").click()
+ self.log.info("case passed")
+ 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)
+ image_type = "core-image-minimal"
+ test_package2 = "gdbm"
+ No_dependecies_msg = "has no build dependencies."
+ No_dependecies_Pkg_msg = "does not build any packages."
+ No_Reverse_dependecies_msg = "has no reverse build dependencies."
+ Search_Build_List = ["gettext-native", "libtool-cross"]
+ self.driver.find_element_by_link_text(image_type).click()
+ self.driver.find_element_by_link_text("Recipes").click()
+ default_column_list = self.get_table_column_text_by_column_number('builtrecipestable', 1)
+ for row_number in range(1, len(default_column_list) + 1):
+ self.driver.find_element_by_xpath(
+ "// *[ @ id = 'builtrecipestable'] // tbody // tr[%d] // td // a[contains( @ href, 'recipe')]" % row_number).click()
+ time.sleep(2)
+ build_dependecies = self.driver.find_element_by_xpath("//a[@href='#dependencies']")
+ string_dependcies = str(build_dependecies.text)
+ build_dependecies_num = (int(((string_dependcies.split('('))[1].split(')'))[0]))
+ build_dependecies.click()
+ time.sleep(2)
+ if (build_dependecies_num > 0):
+ dependencies_length = len(self.driver.find_elements_by_xpath(
+ "(//table[@class='table table-bordered table-hover'])[2]//tbody//tr"))
+ if (dependencies_length == build_dependecies_num):
+ pass
+ else:
+ self.assertFalse(True, msg=("Error: Total number of dependencies are correct"))
+ else:
+ output_string1 = (self.driver.find_element_by_xpath("//div[@class='alert alert-info']").text)
+ if (No_dependecies_msg in output_string1):
+ pass
+ else:
+ self.assertFalse(True, msg=("Error: Not correct output string"))
+ time.sleep(2)
+ Reverse_build_dependecies = self.driver.find_element_by_xpath("//a[@href='#brought-in-by']")
+ Reverse_string_dependcies = str(Reverse_build_dependecies.text)
+ Reverse_build_dependecies_num = (int(((Reverse_string_dependcies.split('('))[1].split(')'))[0]))
+ Reverse_build_dependecies.click()
+ time.sleep(2)
+ if (Reverse_build_dependecies_num > 0):
+ Reverse_dependencies_length = len(
+ self.driver.find_elements_by_xpath("//*[@id='brought-in-by']/table/tbody/tr"))
+ if (Reverse_dependencies_length == Reverse_build_dependecies_num):
+ Column_number = len(
+ self.driver.find_elements_by_xpath("// *[@id ='brought-in-by']/table/thead/tr/th"))
+ for i in range(1, Reverse_dependencies_length + 1):
+ for j in range(1, Column_number + 1):
+ Reverse_Recipie_name = self.driver.find_element_by_xpath(
+ "//*[@id='brought-in-by']/table/tbody/tr[%d]/td[%d]" % (i, j))
+ if (Reverse_Recipie_name.text != ''):
+ if (j == 1):
+ Reverse_Recipie_name_link = self.driver.find_element_by_xpath(
+ "//*[@id='brought-in-by']/table/tbody/tr[%d]/td[%d]/a" % (i, j))
+ action = ActionChains(self.driver)
+ action.move_to_element(Reverse_Recipie_name_link).perform()
+ url = Reverse_Recipie_name_link.get_attribute("href")
+ self.assertTrue(url,
+ msg=("url not found for corresponding reverse dependencies"))
+ else:
+ self.assertFalse(True, msg=("Error! Corresponding name and size are not avaialbale for reverse build dependencies"))
+ else:
+ self.assertFalse(True, msg=("Error:Total number of Reverse dependencies are not correct"))
+ else:
+ output_string1 = (self.driver.find_element_by_xpath("//div[@class='alert alert-info']").text)
+ if (No_Reverse_dependecies_msg in output_string1):
+ pass
+ else:
+ self.assertFalse(True, msg=("Error: Correct output string has not been displayed"))
+ time.sleep(2)
+ if (row_number != (len(default_column_list))):
+ self.driver.back()
+ time.sleep(2)
+ self.driver.find_element_by_xpath("//*[@id='breadcrumb']/li[4]/a").click()
+ time.sleep(4)
+ self.driver.find_element_by_id("search-input-builtrecipestable").click()
+ self.driver.find_element_by_id("search-input-builtrecipestable").send_keys(test_package2)
+ self.driver.find_element_by_xpath("//button[@class='btn btn-default']").click()
+ time.sleep(2)
+ self.driver.find_element_by_xpath("//*[@id='builtrecipestable']/tbody/tr/td[1]/a").click()
+ Package_dependencies = self.driver.find_element_by_xpath("//a[contains(@href,'recipe_packages')]")
+ string_Package_dependencies = str(Package_dependencies.text)
+ Package_dependecies_num = (int(((string_Package_dependencies.split('('))[1].split(')'))[0]))
+ Package_dependencies.click()
+ time.sleep(2)
+ if (Package_dependecies_num > 0):
+ Package_edit_Show_Rows = Select(
+ self.driver.find_element_by_xpath("//*[@id='packages-built']/form[2]/div/select"))
+ selected_number_rows = "150"
+ Package_edit_Show_Rows.select_by_value(selected_number_rows)
+ time.sleep(5)
+ Package_dependendencies_length = len(self.driver.find_elements_by_xpath(
+ "//table[@class='table table-bordered table-hover tablesorter']/tbody/tr"))
+ if (Package_dependendencies_length == Package_dependecies_num):
+ pass
+ else:
+ self.assertFalse(True, msg=("Error: Total number of packages in searched recipie are not correct"))
+ else:
+ Package_output_string = (self.driver.find_element_by_xpath("//div[@class='alert alert-info']").text)
+ if (No_dependecies_Pkg_msg in Package_output_string):
+ pass
+ else:
+ self.assertFalse(True, msg=("Error : Correct output string not diaplyed for searched recipie"))
+ time.sleep(2)
+ Search_build_dependencies = self.driver.find_element_by_xpath("//a[contains(@href,'active_tab/3')]")
+ string_Search_dependencies = str(Search_build_dependencies.text)
+ Search_build_dependencies_num = (int(((string_Search_dependencies.split('('))[1].split(')'))[0]))
+ Search_build_dependencies.click()
+ time.sleep(5)
+ if (Search_build_dependencies_num > 0):
+ Searc_dependencies_length = len(self.driver.find_elements_by_xpath(
+ "(//table[@class='table table-bordered table-hover'])[2]//tbody//tr"))
+ if (Searc_dependencies_length == Search_build_dependencies_num):
+ pass
+ Search_Column_number_Dependencies = len(
+ self.driver.find_elements_by_xpath("// *[@id ='dependencies']/table/thead/tr/th"))
+ Search_Build_Recipies_List = []
+ for i in range(1, Searc_dependencies_length + 1):
+ for j in range(1, Search_Column_number_Dependencies + 1):
+ Search_Recipie_name = self.driver.find_element_by_xpath(
+ "//*[@id='dependencies']/table/tbody/tr[%d]/td[%d]" % (i, j))
+ if (Search_Recipie_name.text != ''):
+ if (j == 1):
+ Search_Recipie_name_link = self.driver.find_element_by_xpath(
+ "//*[@id='dependencies']/table/tbody/tr[%d]/td[%d]/a" % (i, j))
+ Search_Build_Recipies_List.append(Search_Recipie_name_link.text)
+ action = ActionChains(self.driver)
+ action.move_to_element(Search_Recipie_name_link).perform()
+ time.sleep(2)
+ url = Search_Recipie_name_link.get_attribute("href")
+ self.assertTrue(url, msg=("url not found for search build dependencies"))
+ else:
+ self.assertFalse(True, msg=("Error! Corresponding name and size are not avaialbale for searched recipie build dependencies"))
+ result = all(elem in Search_Build_Recipies_List for elem in Search_Build_List)
+ if result:
+ pass
+ else:
+ self.assertFalse(True, msg=("Error:Serached list not found"))
+ else:
+ self.assertFalse(True, msg=("Error: Total number of dependencies in searched recipie are correct"))
+ time.sleep(2)
+
+ Search_Reverse_build_dependencies = self.driver.find_element_by_xpath("//a[@href='#brought-in-by']")
+ Search_Reverse_string_dependencies = str(Search_Reverse_build_dependencies.text)
+ Search_Reverse_build_dependencies_num = (
+ int(((Search_Reverse_string_dependencies.split('('))[1].split(')'))[0]))
+ Search_Reverse_build_dependencies.click()
+ time.sleep(2)
+ if (Search_Reverse_build_dependencies_num > 0):
+ Search_Reverse_dependencies_length = len(
+ self.driver.find_elements_by_xpath("//*[@id='brought-in-by']/table/tbody/tr"))
+ if (Search_Reverse_dependencies_length == Search_Reverse_build_dependencies_num):
+ Search_Reverse_Column_number = len(
+ self.driver.find_elements_by_xpath("// *[@id ='brought-in-by']/table/thead/tr/th"))
+ for i in range(1, Search_Reverse_dependencies_length + 1):
+ for j in range(1, Search_Reverse_Column_number + 1):
+ Search_Reverse_build_Recipie_name = self.driver.find_element_by_xpath(
+ "//*[@id='brought-in-by']/table/tbody/tr[%d]/td[%d]" % (i, j))
+ if (j == 1):
+ Search_Reverse_Recipie_name_link = self.driver.find_element_by_xpath(
+ "//*[@id='brought-in-by']/table/tbody/tr[%d]/td[%d]/a" % (i, j))
+ action = ActionChains(self.driver)
+ action.move_to_element(Search_Reverse_Recipie_name_link).perform()
+ time.sleep(2)
+ url = Search_Reverse_Recipie_name_link.get_attribute("href")
+ self.assertTrue(url, msg=("url not found for search reverse build dependencies"))
+ else:
+ self.assertFalse(True, msg=("Error: Total number of Reverse dependencies are not correct in serached recipies"))
+ if (Search_Reverse_build_dependencies_num == 0):
+ output_string1 = (self.driver.find_element_by_xpath("//div[@class='alert alert-info']").text)
+ if (No_Reverse_dependecies_msg in output_string1):
+ pass
+ else:
+ self.assertFalse(True, msg=("Error:Correct output string has been displayed for serached string"))
+ self.driver.find_element_by_xpath("//*[@id='breadcrumb']/li[3]/a").click()
+ self.driver.find_element_by_link_text("Packages").click()
+ time.sleep(2)
+ packages_num = self.driver.find_element_by_class_name("table-count-builtpackagestable").text
+ edit_Show_Rows = Select(
+ self.driver.find_element_by_xpath("(//select[@class='form-control pagesize-builtpackagestable'])[1]"))
+ selected_number_rows = "150"
+ edit_Show_Rows.select_by_value(selected_number_rows)
+ time.sleep(2)
+ Total_page_number=int(packages_num)/ int(selected_number_rows)
+ #Total_page_number = 4
+ packages_row_count = 0
+ page_navigation_link = 1
+ for i in range(1, (Total_page_number + 1)):
+ if (page_navigation_link > 4):
+ page_navigation_link = 4
+ time.sleep(2)
+ self.driver.find_element_by_xpath("(//*[@id='pagination-builtpackagestable']/ul//li//a[contains(@href,page)])[%d]" % page_navigation_link).click()
+ time.sleep(2)
+ packages_row_count = packages_row_count + len(
+ self.driver.find_elements_by_xpath("//*[@id='builtpackagestable']/tbody/tr"))
+ page_navigation_link = page_navigation_link + 1
+ if int(packages_num) >= int(packages_row_count):
+ pass
+ else:
+ self.assertFalse(True, msg=("Error! The packages number is not correct"))
+ edit_Show_Rows = Select(
+ self.driver.find_element_by_xpath("(//select[@class='form-control pagesize-builtpackagestable'])[1]"))
+ selected_number_rows = "25"
+ edit_Show_Rows.select_by_value(selected_number_rows)
+ time.sleep(5)
+ row_count = len(self.driver.find_elements_by_xpath("//*[@id='builtpackagestable']/tbody/tr"))
+ for count in range(1, row_count + 1):
+ if ((self.driver.find_element_by_xpath(
+ "//*[@id='builtpackagestable']//tbody//tr[%d]//td[2]" % count).text) == ''):
+ self.assertFalse(True, msg=("Error! Version is not present for corresponding package"))
+ else:
+ pass
+
+ if ((self.driver.find_element_by_xpath(
+ "//*[@id='builtpackagestable']//tbody//tr[%d]//td[3]" % count).text) == ''):
+ self.assertFalse(True, msg=("Error! Size is not present for corresponding package"))
+ else:
+ pass
+
+ package_link = self.driver.find_element_by_xpath(
+ "//*[@id='builtpackagestable']/tbody/tr[%d]/td[1]/a" % count)
+ action = ActionChains(self.driver)
+ action.move_to_element(package_link).perform()
+ url = package_link.get_attribute("href")
+ self.assertTrue(url, msg=("url not found for corresponding packages"))
+
+ def test_915(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)
+ searched_key = 'hfidf'
+ self.driver.find_element_by_link_text("core-image-minimal").click()
+ self.find_element_by_link_text_in_table('nav', 'Configuration').click()
+ self.driver.find_element_by_link_text("BitBake variables").click()
+ self.driver.find_element_by_xpath("//*[@placeholder='Search BitBake variables']")
+ self.driver.find_element_by_id("search").clear()
+ self.driver.find_element_by_id("search").send_keys(searched_key)
+ self.driver.find_element_by_id("search-button").click()
+ if (
+ self.driver.find_element_by_xpath("//div[@class='page-header build-data']").text.find(" No variables found")):
+ self.driver.find_element_by_xpath("//*[@value='" + searched_key + "']")
+ self.driver.find_element_by_xpath("//*[@id='searchform']/button[2]").click()
+ time.sleep(5)
+ elif (self.driver.find_element_by_xpath("//div[@class='page-header build-data']").text.find("variables found")):
+ self.driver.find_element_by_id("search").click()
+ self.driver.find_element_by_xpath("//*[@id='searchform']/div/div/a/span").click()
+ else:
+ self.assertFalse(True, msg=("Error:Searched text not found in ex[ected output"))
+ head_list = self.get_table_head_text('otable')
+ self.assertTrue(head_list == ['Variable', 'Value', 'Set in file', 'Description'], \
+ msg=("head row contents wrong"))
+ head_list_sort = self.get_table_head_text('otable')
+ self.find_element_by_link_text_in_table('otable', 'Variable').click()
+ sort_list = self.get_table_column_text_by_column_number('otable', 1)
+ self.assertTrue(Utility.is_list_inverted(sort_list), msg=("list not inverted"))
+
+ self.driver.find_element_by_id("search").clear()
+ self.driver.find_element_by_id("search").send_keys("poky")
+ self.driver.find_element_by_id("search-button").click()
+ head_list = self.get_table_head_text('otable')
+ self.assertTrue(head_list == ['Variable', 'Value', 'Set in file', 'Description'], \
+ msg=("head row contents wrong"))
+ head_list = self.get_table_head_text('otable')
+ self.assertTrue(head_list == ['Variable', 'Value', 'Set in file', 'Description'], \
+ msg=("head row contents wrong"))
+ sort_list = self.get_table_column_text_by_column_number('otable', 1)
+ self.assertTrue(Utility.is_list_inverted(sort_list), msg=("list not in order"))
+ time.sleep(2)
+ self.driver.find_element_by_id("search").clear()
+ self.driver.find_element_by_xpath("//*[@id='searchform']/div/div/a/span").click()
+ self.driver.find_element_by_xpath("(//span[@class='glyphicon glyphicon-filter filtered'])[1]").click()
+ time.sleep(10)
+ self.driver.find_element_by_xpath("(//input[@type='radio'])[2]").click()
+ self.driver.find_element_by_xpath("(//button[@type='submit'])[2]").click()
+ self.driver.find_element_by_id("search").clear()
+ self.driver.find_element_by_id("search").send_keys("poky")
+ self.driver.find_element_by_id("search-button").click()
+ self.driver.find_element_by_xpath("(//span[@class='glyphicon glyphicon-filter filtered'])[1]").click()
+ radio_button = self.driver.find_element_by_xpath(
+ "//*[@id='filter_vhistory__file_name']/div/div/form/div[2]/div[1]/label/input")
+ time.sleep(3)
+ if (radio_button.is_selected()):
+ pass
+ else:
+ self.assertFalse(True, msg=("Error: Filter not got cleared after search"))
+
+ def test_916(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.driver.find_element_by_link_text("core-image-minimal").click()
+ self.driver.find_element_by_link_text('Configuration').click()
+ self.driver.find_element_by_link_text("BitBake variables").click()
+ variable_list = self.get_table_column_text('class', 'variable_name')
+ self.assertTrue(Utility.is_list_sequenced(variable_list), msg=("list not in order"))
+ self.find_element_by_link_text_in_table('otable', 'Variable').click()
+ variable_list = self.get_table_column_text('class', 'variable_name')
+ self.assertTrue(Utility.is_list_inverted(variable_list), msg=("list not inverted"))
+ self.find_element_by_link_text_in_table('otable', 'Variable').click()
+ self.driver.find_element_by_id("search").clear()
+ self.driver.find_element_by_id("search").send_keys("lib")
+ self.driver.find_element_by_id("search-button").click()
+ variable_list = self.get_table_column_text('class', 'variable_name')
+ self.assertTrue(Utility.is_list_sequenced(variable_list), msg=("list not in order"))
+
+ def test_923(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.driver.find_element_by_xpath("//*[@id='global-nav']/ul/li[1]/a").click()
+ page_header = self.driver.find_elements_by_xpath("//div[@class='page-header']")
+ if (len(page_header) == 2):
+ if (self.driver.find_element_by_xpath("(//div[@class='page-header'])[1]").text == 'Latest builds'):
+ print("Latest builds string is present ")
+ elif (self.driver.find_element_by_xpath("(//div[@class='page-header'])[2]").text == 'All builds'):
+ print("All builds string is present")
+ else:
+ if (self.driver.find_element_by_xpath("(//div[@class='page-header'])[1]").text == 'All builds'):
+ print("All builds string is only present")
+ time.sleep(3)
+ c_list = self.get_table_column_text('class', 'completed_on')
+ self.assertTrue(Utility.is_list_inverted(c_list), msg=("list not inverted"))
+ self.driver.find_element_by_id("edit-columns-button").click()
+ time.sleep(3)
+ self.driver.find_element_by_id("checkbox-started_on").click()
+ time.sleep(3)
+ self.driver.find_element_by_id("checkbox-time").click()
+ self.driver.find_element_by_id("edit-columns-button").click()
+ time.sleep(3)
+ self.log.info(
+ "Checking column headings : outcome, recipe, machine, started on, completed on, failed tasks, errors, warnings, time, image files, project from Table")
+ head_list = self.get_table_head_text('table-container-allbuildstable')
+ 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.')
+ self.log.info("All column heading are there")
+
+ def test_924(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(
+ "http://localhost:8000/toastergui/builds/?limit=25&page=1&orderby=-completed_on&default_orderby=-completed_on&")
+ c_list = self.get_table_column_text('class', 'completed_on')
+ self.assertTrue(Utility.is_list_inverted(c_list), msg=("list not inverted"))
+ self.driver.find_element_by_id("edit-columns-button").click()
+ self.driver.find_element_by_id("checkbox-errors_no").click()
+ head_list1 = self.get_table_head_text('allbuildstable')
+ self.driver.find_element_by_id("edit-columns-button").click()
+ time.sleep(1)
+ self.driver.find_element_by_id("edit-columns-button").click()
+ self.driver.find_element_by_id("checkbox-errors_no").click()
+ head_list2 = self.get_table_head_text('allbuildstable')
+ self.driver.find_element_by_id("edit-columns-button").click()
+ self.assertTrue(len(head_list2) != len(head_list1), msg=("Error: head order is not correct"))
+
+ def test_940(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.driver.find_element_by_link_text("core-image-minimal").click()
+ self.find_element_by_link_text_in_table('nav', 'Packages').click()
+ check_head_list = [u'Package', u'Package Version', u'Approx Size', ]
+ head_list = self.get_table_head_text('builtpackagestable')
+ self.assertTrue(head_list == check_head_list, msg=("head row not as expected"))
+ time.sleep(3)
+ option_ids = ['checkbox-recipe__layer_version__layer__name', 'checkbox-recipe__layer_version__branch', \
+ 'checkbox-vcs_ref', 'checkbox-license', 'checkbox-recipe__name', 'checkbox-recipe__version']
+ self.driver.find_element_by_id("edit-columns-button").click()
+ time.sleep(3)
+ for item in option_ids:
+ if not self.driver.find_element_by_id(item).is_selected():
+ self.driver.find_element_by_id(item).click()
+ time.sleep(3)
+ self.driver.find_element_by_id("edit-columns-button").click()
+ time.sleep(2)
+ Minimum_Table_len = len(self.driver.find_elements_by_xpath("//label[@class='text-muted']"))
+ elements = self.driver.find_elements_by_xpath("//label[@class='text-muted']")
+ Minimum_Table_len = len(elements)
+ if (int(Minimum_Table_len) == 2):
+ for item in elements:
+ self.driver.find_element_by_id("edit-columns-button").click()
+ if (item.text == 'Package' or item.text == 'Package Version'):
+ pass
+ else:
+ self.assertTrue(item.text, msg=("Fail :Incorrect muted column"))
+
+ self.driver.find_element_by_id("edit-columns-button").click()
+
+ def test_941(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.driver.find_element_by_link_text("core-image-minimal").click()
+ self.find_element_by_link_text_in_table('nav', 'Packages').click()
+ column_list = self.get_table_column_text_by_column_number('builtpackagestable', 1)
+ self.assertTrue(Utility.is_list_sequenced(column_list), msg=("list not in order"))
+ self.find_element_by_link_text_in_table('builtpackagestable', 'Approx Size').click()
+ time.sleep(3)
+ self.driver.find_element_by_xpath('//*[@id="builtpackagestable"]/tbody/tr[1]/td[1]/a').click()
+ time.sleep(3)
+ self.driver.back()
+ time.sleep(3)
+ self.assertTrue(Utility.is_list_sequenced(column_list), msg=("list not in order"))
+
+ option_ids = ['checkbox-recipe__layer_version__layer__name', 'checkbox-recipe__layer_version__branch', \
+ 'checkbox-vcs_ref', 'checkbox-license', 'checkbox-recipe__name', 'checkbox-recipe__version']
+ self.driver.find_element_by_id("edit-columns-button").click()
+ time.sleep(3)
+ for item in option_ids:
+ if not self.driver.find_element_by_id(item).is_selected():
+ self.driver.find_element_by_id(item).click()
+ time.sleep(3)
+ self.driver.find_element_by_id("edit-columns-button").click()
+ column_head = ['Package', 'Approx Size', 'License', 'Recipe', 'Layer', 'Layer branch']
+ column_number = 1
+ for item in column_head:
+ self.find_element_by_link_text_in_table('builtpackagestable', item).click()
+ time.sleep(3)
+ self.find_elements_by_link_text_in_table('builtpackagestable', item)
+ if (column_number == 2 or column_number == 6):
+ column_number = column_number + 1
+ column_list_packages = self.get_table_column_text_by_column_number('builtpackagestable', column_number)
+ self.assertTrue(Utility.is_list_sequenced(column_list_packages) or Utility.is_list_inverted(column_list_packages),
+ msg=("list not in order"))
+ column_number = column_number + 1
+
+ self.driver.find_element_by_id("edit-columns-button").click()
+ for item in option_ids:
+ if self.driver.find_element_by_id(item).is_selected():
+ self.driver.find_element_by_id(item).click()
+ time.sleep(3)
+ self.driver.find_element_by_id("edit-columns-button").click()
+ time.sleep(3)
+ column_list = self.get_table_column_text_by_column_number('builtpackagestable', 1)
+ self.assertTrue(Utility.is_list_sequenced(column_list) or Utility.is_list_inverted(column_list), msg=("list not in order"))
+
+ self.find_element_by_link_text_in_table('builtpackagestable', 'Approx Size').click()
+ self.driver.find_element_by_id("search-input-builtpackagestable").clear()
+ time.sleep(3)
+ self.driver.find_element_by_id("search-input-builtpackagestable").send_keys('lib')
+ time.sleep(3)
+ self.driver.find_element_by_id("search-submit-builtpackagestable").click()
+ time.sleep(3)
+ column_list = self.get_table_column_text_by_column_number('builtpackagestable', 3)
+ self.assertTrue(Utility.is_list_sequenced(column_list), msg=("list not in order"))
+ self.driver.find_element_by_id("search-input-builtpackagestable").clear()
+ time.sleep(3)
+ self.find_element_by_link_text_in_table('nav', 'core-image-minimal').click()
+ column_list = self.get_table_column_text_by_column_number('installedpackagestable', 1)
+ self.assertTrue(Utility.is_list_sequenced(column_list), msg=("list not in order"))
+ self.find_element_by_link_text_in_table('installedpackagestable', 'Approx Size').click()
+ time.sleep(3)
+ self.driver.find_element_by_xpath("//*[@id='installedpackagestable']/tbody/tr[1]/td[1]/a").click()
+ time.sleep(3)
+ self.driver.back()
+ column_list = self.get_table_column_text_by_column_number('installedpackagestable', 3)
+ self.assertTrue(Utility.is_list_sequenced(column_list), msg=("list not in order"))
+
+ option_ids1 = ['checkbox-size', 'checkbox-license', 'checkbox-dependencies', 'checkbox-reverse_dependencies',
+ 'checkbox-recipe__name', \
+ 'checkbox-recipe__version', 'checkbox-recipe__layer_version__layer__name',
+ 'checkbox-recipe__layer_version__branch', 'checkbox-vcs_ref', 'checkbox-installed_size']
+ self.driver.find_element_by_id("edit-columns-button").click()
+ time.sleep(3)
+ for item in option_ids1:
+ if not self.driver.find_element_by_id(item).is_selected():
+ self.driver.find_element_by_id(item).click()
+ time.sleep(3)
+ self.driver.find_element_by_id("edit-columns-button").click()
+ column_head = ['Package', 'Approx Size', 'License', 'Recipe', 'Layer', 'Layer branch', 'Installed size']
+ column_number = 1
+ for item in column_head:
+ if (
+ column_number == 2 or column_number == 5 or column_number == 6 or column_number == 8 or column_number == 11):
+ column_number = column_number + 1
+ self.find_element_by_link_text_in_table('installedpackagestable', item).click()
+ time.sleep(3)
+ self.find_elements_by_link_text_in_table('installedpackagestable', item)
+ if (
+ column_number == 2 or column_number == 5 or column_number == 6 or column_number == 8 or column_number == 11):
+ column_list_packages = self.get_table_column_text_by_column_number('installedpackagestable',
+ column_number)
+ self.assertTrue(Utility.is_list_sequenced(column_list_packages) or Utility.is_list_inverted(column_list_packages),
+ msg=("list not in order"))
+ column_number = column_number + 1
+
+ self.driver.find_element_by_id("edit-columns-button").click()
+ for item in option_ids1:
+ if self.driver.find_element_by_id(item).is_selected():
+ self.driver.find_element_by_id(item).click()
+ time.sleep(3)
+ self.driver.find_element_by_id("edit-columns-button").click()
+ time.sleep(3)
+ column_list = self.get_table_column_text_by_column_number('installedpackagestable', 1)
+ self.assertTrue(Utility.is_list_sequenced(column_list) or Utility.is_list_inverted(column_list), msg=("list not in order"))
+
+ self.find_element_by_link_text_in_table('installedpackagestable', 'Package').click()
+ self.driver.find_element_by_id("search-input-installedpackagestable").clear()
+ time.sleep(3)
+ self.driver.find_element_by_id("search-input-installedpackagestable").send_keys('lib')
+ time.sleep(3)
+ self.driver.find_element_by_id("search-submit-installedpackagestable").click()
+ time.sleep(3)
+ column_list = self.get_table_column_text_by_column_number('installedpackagestable', 1)
+ self.assertTrue(Utility.is_list_sequenced(column_list) or Utility.is_list_inverted(column_list), msg=("list not in order"))
+ self.driver.find_element_by_id("search-input-installedpackagestable").clear()
+ time.sleep(3)
+
+ def test_942(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.driver.find_element_by_link_text("core-image-minimal").click()
+ self.driver.find_element_by_link_text("Packages").click()
+ default_column_list = self.get_table_column_text_by_column_number('builtpackagestable', 1)
+ self.assertTrue(Utility.is_list_sequenced(default_column_list), msg=("list not in sequence for default pacakge column"))
+ head_list = self.get_table_head_text('builtpackagestable')
+ self.driver.find_element_by_id("edit-columns-button").click()
+ self.driver.find_element_by_id("checkbox-recipe__name").click()
+ self.driver.find_element_by_id("edit-columns-button").click()
+ new_head = self.get_table_head_text('builtpackagestable')
+ self.assertTrue(new_head > head_list)
+ self.driver.find_element_by_id("edit-columns-button").click()
+ self.driver.find_element_by_id("checkbox-recipe__name").click()
+ self.driver.find_element_by_id("edit-columns-button").click()
+ new_head1 = self.get_table_head_text('builtpackagestable')
+ self.assertTrue(new_head1 < new_head)
+
+ def test_943(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)
+ times = 2
+ for i in range(0, times):
+ self.driver.find_element_by_link_text("core-image-minimal").click()
+ self.find_element_by_link_text_in_table('nav', 'Packages').click()
+ column_list = self.get_table_column_text_by_column_number('builtpackagestable', 1)
+ self.assertTrue(Utility.is_list_sequenced(column_list), msg=("list not in order"))
+ head_list_before_seearch = self.get_table_head_text('builtpackagestable')
+ self.assertTrue(self.driver.find_element_by_xpath(
+ "//input[@id='search-input-builtpackagestable' and @placeholder='Search packages built']"),
+ msg=("plceholder string not present"))
+ self.driver.find_element_by_id("search-input-builtpackagestable").clear()
+ self.driver.find_element_by_id("search-input-builtpackagestable").click()
+ self.driver.find_element_by_id("search-input-builtpackagestable").send_keys("bash")
+ self.driver.find_element_by_id("search-submit-builtpackagestable").click()
+ if (int(self.driver.find_element_by_xpath(
+ "//div[@class='page-header build-data']/h1/span[@class='table-count-builtpackagestable']").text )== 0):
+ print("Pass:No packages found")
+ time.sleep(5)
+ self.driver.find_element_by_xpath("(//span[contains(@class,'remove-search-btn')])[1]").click()
+ time.sleep(2)
+ else:
+ print("Pass:packages found")
+ self.assertTrue(self.is_text_present("packages found"), msg=("no packages found text"))
+ column_list = self.get_table_column_text_by_column_number('builtpackagestable', 1)
+ self.assertTrue(Utility.is_list_sequenced(column_list), msg=("list not in order"))
+ new_head_after_search = self.get_table_head_text('builtpackagestable')
+ self.assertTrue(new_head_after_search == head_list_before_seearch)
+ self.driver.find_element_by_id("search-input-builtpackagestable").click()
+ self.driver.find_element_by_xpath("(//span[contains(@class,'remove-search-btn')])[2]").click()
+ time.sleep(5)
+ self.driver.find_element_by_id("edit-columns-button").click()
+ time.sleep(2)
+ self.driver.find_element_by_id("checkbox-size").click()
+ self.driver.find_element_by_id("edit-columns-button").click()
+ self.driver.find_element_by_id("search-input-builtpackagestable").clear()
+ self.driver.find_element_by_id("search-input-builtpackagestable").send_keys("GPL")
+ self.driver.find_element_by_id("search-submit-builtpackagestable").click()
+ self.assertTrue(self.is_text_present("packages found"), msg=("no packages found text"))
+
+ self.find_element_by_link_text_in_table('nav', 'core-image-minimal').click()
+ column_list = self.get_table_column_text_by_column_number('installedpackagestable', 1)
+ self.assertTrue(Utility.is_list_sequenced(column_list), msg=("list not in order"))
+ self.assertTrue(self.driver.find_element_by_xpath(
+ "//input[@id='search-input-installedpackagestable' and @placeholder='Search packages included']"),
+ msg=("plceholder string not present"))
+ self.driver.find_element_by_id("search-input-installedpackagestable").clear()
+ self.driver.find_element_by_id("search-input-installedpackagestable").send_keys("lib")
+ self.driver.find_element_by_id("search-submit-installedpackagestable").click()
+ self.assertTrue(self.is_text_present("packages found"), msg=("no packages found text"))
+ self.driver.find_element_by_id("search-input-installedpackagestable").clear()
+ self.driver.find_element_by_id("search-input-installedpackagestable").send_keys("GPL")
+ self.driver.find_element_by_id("search-submit-installedpackagestable").click()
+ self.assertTrue(self.is_text_present("packages found"), msg=("no packages found text"))
+
+ def test_944(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.driver.find_element_by_link_text("core-image-minimal").click()
+ self.find_element_by_link_text_in_table('nav', 'Recipes').click()
+ time.sleep(3)
+ self.driver.find_element_by_id("edit-columns-button").click()
+ time.sleep(3)
+ self.driver.find_element_by_id("checkbox-layer_version__branch").click()
+ self.driver.find_element_by_id("checkbox-commit").click()
+ time.sleep(3)
+ self.driver.find_element_by_id("edit-columns-button").click()
+ otable_head_text = self.get_table_head_text('builtrecipestable')
+ for item in ["Layer", "Layer branch", "Layer commit"]:
+ self.failIf(item not in otable_head_text, msg=item + ' not in table head.')
+ self.get_table_element("builtrecipestable", 1, 1).click()
+ self.assertTrue(self.is_text_present(["Layer", "Layer branch", "Layer commit", "Recipe file"]), \
+ msg=("text not in web page"))
+ if(self.get_table_column_text_by_column_number('builtrecipestable',9) == ''):
+ print("Pass:Layer branch can be empty in recipie")
+ self.driver.back()
+ time.sleep(1)
+ self.find_element_by_link_text_in_table('nav', 'Packages').click()
+ time.sleep(3)
+ self.driver.find_element_by_id("edit-columns-button").click()
+ self.driver.find_element_by_id("checkbox-recipe__layer_version__layer__name").click()
+ self.driver.find_element_by_id("checkbox-recipe__layer_version__branch").click()
+ self.driver.find_element_by_id("checkbox-vcs_ref").click()
+ time.sleep(3)
+ self.driver.find_element_by_id("edit-columns-button").click()
+ otable_head_text = self.get_table_head_text("builtpackagestable")
+ 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.get_table_element("builtpackagestable", 1, 1).click()
+ self.assertTrue(self.is_text_present(["Layer", "Layer branch", "Layer commit"]), \
+ msg=("text not in web page"))
+ if (self.get_table_column_text_by_column_number('builtpackagestable', 8) == ''):
+ print("Pass:Layer branch can be empty in recipie")
+ self.driver.back()
+ time.sleep(3)
+ self.find_element_by_link_text_in_table('nav', 'core-image-minimal').click()
+ time.sleep(2)
+ self.driver.find_element_by_id("edit-columns-button").click()
+ time.sleep(2)
+ self.driver.find_element_by_id("checkbox-recipe__layer_version__layer__name").click()
+ self.driver.find_element_by_id("checkbox-recipe__layer_version__branch").click()
+ self.driver.find_element_by_id("checkbox-vcs_ref").click()
+ self.driver.find_element_by_id("edit-columns-button").click()
+ otable_head_text = self.get_table_head_text("installedpackagestable")
+ 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))
+ time.sleep(3)
+ self.get_table_element("installedpackagestable", 1, 1).click()
+ time.sleep(3)
+ self.assertTrue(self.is_text_present(["Layer", "Layer branch", "Layer commit"]), \
+ msg=("text not in web page"))
+ self.driver.back()
+ self.driver.find_element_by_link_text("Configuration").click()
+ otable_head_text = self.get_table_head_text()
+ self.assertTrue(self.is_text_present(["Layer", "Layer branch", "Layer commit"]), \
+ msg=("text not in web page"))
+ time.sleep(3)
+ self.driver.back()
+ time.sleep(3)
+ self.assertTrue(self.is_text_present("Layers"), msg=("text not in web page"))
+
+ def test_945(self):
+ self.case_no = self.get_case_number()
+ self.log.info(' CASE %s log: ' % str(self.case_no))
+ self.driver.maximize_window()
+ time.sleep(3)
+ for item in ["Packages", "Recipes", "Tasks"]:
+ self.driver.get(self.base_url)
+ self.driver.find_element_by_link_text("core-image-minimal").click()
+ self.driver.find_element_by_link_text(item).click()
+ if (item == "Packages"):
+ item_id = 'builtpackagestable'
+ self.driver.find_element_by_xpath("//*[@id='" + item_id + "']/tbody/tr[1]/td[1]/a").click()
+ elif (item == "Recipes"):
+ item_id = 'builtrecipestable'
+ self.driver.find_element_by_xpath("//*[@id='" + item_id + "']/tbody/tr[1]/td[1]/a").click()
+ elif (item == "Tasks"):
+ item_id = 'buildtaskstable'
+ self.driver.find_element_by_xpath("//*[@id='" + item_id + "']/tbody/tr[1]/td[2]/a").click()
+ time.sleep(3)
+ self.driver.find_element_by_xpath("//*[@id='breadcrumb']/li[4]/a").click()
+ time.sleep(3)
+ edit_Show_Rows = Select(self.driver.find_element_by_xpath(
+ "//*[@id='table-chrome-collapse-" + item_id + "']/form[2]/div/select "))
+ selected_number_rows = ['10', '25', '50', '100', '150']
+ for item in selected_number_rows:
+ edit_Show_Rows.select_by_value(item)
+ self.assertTrue(edit_Show_Rows, msg="rows displayed is not as per selection")
+ time.sleep(3)
+
+ maxium_page_number = len(self.driver.find_elements_by_xpath("//*[@class='pagination']/li"))
+ if (maxium_page_number < 5 or maxium_page_number == 5):
+ pass
+ else:
+ print("Error: Maximum number of pages navigation button is not correct")
+ for i in range(2, maxium_page_number + 1):
+ self.driver.find_element_by_xpath("(//*[@class='pagination']/li/a[@href='#'])[%d]" % i).click()
+ self.driver.find_element_by_xpath("(//*[@class='pagination']/li/a[@href='#'])[%d]" % (i - 1)).click()
+ time.sleep(5)
+
+ def test_946(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.driver.find_element_by_link_text("core-image-minimal").click()
+ self.driver.find_element_by_link_text("Configuration").click()
+ check_list = ["Summary", "BitBake variables"]
+ for item in check_list:
+ if not self.is_element_present(how=By.LINK_TEXT, what=item):
+ self.log.error("%s not found" % item)
+ if not self.is_text_present(['Layers', 'Layer', 'Layer branch', 'Layer commit']):
+ self.log.error("text not found")
+ self.driver.find_element_by_link_text("BitBake variables").click()
+ if not self.is_text_present(['Variable', 'Value', 'Set in file', 'Description']):
+ self.log.error("text not found")
+ temp_element = self.find_element_by_text_in_table('otable', "Set in file")
+ temp_element.find_element_by_xpath(
+ r"//div[@class='btn-group pull-right']/a[@class='btn btn-xs ']/span[@class='glyphicon glyphicon-filter filtered']").click()
+ time.sleep(1)
+ self.driver.find_element_by_xpath("(//input[@name='filter'])[2]").click()
+ btns = self.driver.find_elements_by_css_selector("button.btn.btn-primary")
+ for btn in btns:
+ try:
+ btn.click()
+ break
+ except:
+ pass
+ time.sleep(1)
+ self.save_screenshot(screenshot_type='selenium', append_name='step6')
+ self.driver.find_element_by_id("edit-columns-button").click()
+ time.sleep(1)
+ self.save_screenshot(screenshot_type='selenium', append_name='step7')
+ self.driver.find_element_by_id("edit-columns-button").click()
+ elements = self.driver.find_elements_by_xpath("//*[@id='editcol']/li/div/label[@class='muted']")
+ if (len(elements) == 2):
+ pass
+ else:
+ print("Error ! Total default muted column is not correct")
+ self.driver.find_element_by_xpath("//*[@id='otable']/tbody/tr[1]/td[1]/a").click()
+ time.sleep(1)
+ element = self.driver.switch_to.active_element
+ check_list = ['Order', 'Configuration file', 'Operation']
+ for item in check_list:
+ if item not in element.text:
+ self.log.error("%s not found" % item)
+ element.find_element_by_class_name("close").click()
+ time.sleep(3)
+ self.driver.find_element_by_xpath("//a[contains(@href,'yoctoproject.org')]").click()
+ time.sleep(3)
+ self.save_screenshot(screenshot_type='native', append_name='step10')
+
+ def test_947(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.driver.find_element_by_link_text("core-image-minimal").click()
+ self.find_element_by_link_text_in_table('nav', 'Configuration').click()
+ self.driver.find_element_by_link_text("BitBake variables").click()
+
+ def xpath_option(column_name):
+ return self.shortest_xpath('id', 'navTab') + self.shortest_xpath('id', 'editcol') \
+ + self.shortest_xpath('id', column_name)
+
+ self.driver.find_element_by_id('edit-columns-button').click()
+ self.driver.find_element_by_xpath(xpath_option('description')).click()
+ self.driver.find_element_by_xpath(xpath_option('file')).click()
+ self.driver.find_element_by_id('edit-columns-button').click()
+ check_list = ['Description', 'Set in file']
+ head_list = self.get_table_head_text('otable')
+ for item in check_list:
+ self.assertFalse(item in head_list, msg=("item %s should not be in head row" % item))
+ self.driver.find_element_by_id('edit-columns-button').click()
+ self.driver.find_element_by_xpath(xpath_option('description')).click()
+ self.driver.find_element_by_xpath(xpath_option('file')).click()
+ self.driver.find_element_by_id('edit-columns-button').click()
+ head_list = self.get_table_head_text('otable')
+ for item in check_list:
+ self.assertTrue(item in head_list, msg=("item %s not in head row" % item))
+
+ def test_948(self):
+ Comparable_string = "You can only apply one filter to the table. This filter will override the current filter."
+ 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.driver.find_element_by_link_text("core-image-minimal").click()
+ self.find_element_by_link_text_in_table('nav', 'Configuration').click()
+ self.driver.find_element_by_link_text("BitBake variables").click()
+ self.driver.find_element_by_xpath(
+ "//th[@class='span4 description']//span[@class='glyphicon glyphicon-filter filtered']")
+ self.driver.find_element_by_xpath("//th[@class=' file']//span[@class='glyphicon glyphicon-filter filtered']")
+ self.driver.find_element_by_xpath(
+ "//th[@class=' file']//span[@class='glyphicon glyphicon-filter filtered']").click()
+ time.sleep(5)
+ self.driver.find_element_by_xpath(
+ "//*[@id='filter_vhistory__file_name']/div/div/form/div[2]/div[3]/label/input").click()
+ time.sleep(3)
+ self.driver.find_element_by_xpath(
+ "//*[@id='filter_vhistory__file_name']/div/div/form/div[3]/div/div[1]/button").click()
+ time.sleep(5)
+ self.driver.find_element_by_xpath(
+ "//th[@class='span4 description']//span[@class='glyphicon glyphicon-filter filtered']").click()
+ time.sleep(3)
+ if (Comparable_string == self.driver.find_element_by_xpath(
+ "//*[@id='filter_description']/div/div/form/div[3]/div/div[2]/p").text):
+ pass
+ else:
+ print("Error: string not found")
+ self.driver.find_element_by_xpath("//*[@id='filter_description']/div/div/form/div[1]/button").click()
+ time.sleep(5)
+
+ self.driver.find_element_by_xpath(
+ "//th[@class=' file']//span[@class='glyphicon glyphicon-filter filtered']").click()
+ time.sleep(5)
+ self.driver.find_element_by_xpath(
+ "//*[@id='filter_vhistory__file_name']/div/div/form/div[2]/div[3]/label/input").click()
+ time.sleep(3)
+ self.driver.find_element_by_xpath(
+ "//*[@id='filter_vhistory__file_name']/div/div/form/div[3]/div/div[1]/button").click()
+ time.sleep(5)
+ self.driver.find_element_by_id("search").clear()
+ time.sleep(5)
+ self.driver.find_element_by_id("search").send_keys("BB")
+ time.sleep(5)
+ self.driver.find_element_by_id("search-button").click()
+ time.sleep(5)
+ self.driver.find_element_by_xpath(
+ "//th[@class=' file']//span[@class='glyphicon glyphicon-filter filtered']").click()
+ time.sleep(5)
+ radio_button_selected = self.driver.find_element_by_xpath(
+ "//*[@id='filter_vhistory__file_name']/div/div/form/div[2]/div[1]/label/input")
+ if (radio_button_selected.is_selected()):
+ pass
+ else:
+ print("Fail:Filter not cleared after search")
+ self.driver.find_element_by_xpath("//*[@id='filter_vhistory__file_name']/div/div/form/div[1]/button").click()
+ time.sleep(5)
+ self.driver.find_element_by_xpath("//*[@id='searchform']/div/div/a/span").click()
+ time.sleep(5)
+ self.driver.find_element_by_id("search").clear()
+ time.sleep(20)
+ self.driver.find_element_by_id("search").send_keys("busybox")
+ time.sleep(20)
+ self.driver.find_element_by_id("search-button").click()
+ time.sleep(30)
+ self.driver.find_element_by_xpath(
+ "//th[@class=' file']//span[@class='glyphicon glyphicon-filter filtered']").click()
+ time.sleep(5)
+ self.driver.find_element_by_xpath(
+ "//*[@id='filter_vhistory__file_name']/div/div/form/div[2]/div[5]/label/input").click()
+ time.sleep(3)
+ self.driver.find_element_by_xpath(
+ "//*[@id='filter_vhistory__file_name']/div/div/form/div[3]/div/div[1]/button").click()
+ time.sleep(10)
+ self.driver.find_element_by_xpath(
+ "//th[@class=' file']//span[@class='glyphicon glyphicon-filter filtered']").click()
+ time.sleep(5)
+ radio_button_selected = self.driver.find_element_by_xpath(
+ "//*[@id='filter_vhistory__file_name']/div/div/form/div[2]/div[5]/label/input")
+ if (radio_button_selected.is_selected()):
+ pass
+ else:
+ print("Fail:Filter not cleared")
+ self.driver.find_element_by_xpath("//*[@id='filter_vhistory__file_name']/div/div/form/div[1]/button")
+
+ def test_949(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.driver.find_element_by_link_text("core-image-minimal").click()
+ self.find_element_by_link_text_in_table('nav', 'core-image-minimal').click()
+ try:
+ self.driver.find_element_by_partial_link_text("Packages included")
+ self.driver.find_element_by_partial_link_text("Directory structure")
+ except Exception as e:
+ self.log.error(e)
+ self.assertFalse(True)
+
+ package_included = (self.driver.find_element_by_xpath("//*[@id='navTab']/ul/li[1]/a").text)
+ self.assertTrue(self.is_text_present(package_included),
+ msg=("total number of packages and total size not found in Package included"))
+ head_list = self.get_table_head_text('installedpackagestable')
+ for item in ['Package', 'Package Version']:
+ self.assertTrue(item in head_list, msg=("item %s not in head row" % item))
+ self.driver.find_element_by_id("edit-columns-button").click()
+ default_list = self.driver.find_elements_by_xpath("// *[@checked ='checked']")
+ if (len(default_list) == 4):
+ pass
+ else:
+ print("Fail: Deafault column numbernot correct")
+ self.driver.find_element_by_id("edit-columns-button").click()
+ self.driver.find_element_by_partial_link_text("Packages included").click()
+ option_ids = ['checkbox-size', 'checkbox-license', 'checkbox-dependencies', 'checkbox-reverse_dependencies',
+ 'checkbox-recipe__name', 'checkbox-recipe__version', \
+ 'checkbox-recipe__layer_version__layer__name', 'checkbox-recipe__layer_version__branch',
+ 'checkbox-vcs_ref', 'checkbox-vcs_ref']
+ self.driver.find_element_by_id("edit-columns-button").click()
+ time.sleep(3)
+ for item in option_ids:
+ if not self.driver.find_element_by_id(item).is_selected():
+ self.driver.find_element_by_id(item).click()
+ time.sleep(3)
+ self.driver.find_element_by_id("edit-columns-button").click()
+
+ self.driver.find_element_by_partial_link_text("Directory structure").click()
+ head_list = self.get_table_head_text('dirtable')
+ for item in ['Directory / File', 'Symbolic link to', 'Source package', 'Size', 'Permissions', 'Owner', 'Group']:
+ self.assertTrue(item in head_list, msg=("%s not found in Directory structure table head" % item))
+ self.get_table_element("dirtable", 1, 1).click()
+ self.assertTrue(self.is_text_present(
+ ["Directory / File", "Symbolic link to", "Source package", "Size", "Permissions", "Owner", "Group"]), \
+ msg=("text not in web page"))
+
+ def test_950(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)
+ check_list = ['Configuration', 'Tasks', 'Recipes', 'Packages', 'Time', 'CPU usage', 'Disk I/O']
+ has_successful_build = 1
+ has_failed_build = 1
+ try:
+ pass_icon = self.driver.find_element_by_xpath("//*[@class='icon-ok-sign success']")
+ except Exception:
+ self.log.info("checking for successful build")
+ has_successful_build = 0
+ pass
+ if has_successful_build:
+ pass_icon.click()
+ time.sleep(1)
+ self.save_screenshot(screenshot_type='selenium', append_name='step3_1')
+ for item in check_list:
+ try:
+ self.find_element_by_link_text_in_table('nav', item)
+ except Exception:
+ self.assertFalse(True, msg=("link %s cannot be found in the page" % item))
+ check_list_2 = ['Packages included', 'Total package size', \
+ 'License manifest', 'Image files']
+ self.assertTrue(self.is_text_present(check_list_2), msg=("text not in web page"))
+ self.driver.back()
+ try:
+ fail_icon = self.driver.find_element_by_xpath("//*[@class='icon-minus-sign error']")
+ except Exception:
+ has_failed_build = 0
+ self.log.info("checking if build exists")
+ pass
+ if has_failed_build:
+ fail_icon.click()
+ time.sleep(1)
+ self.save_screenshot(screenshot_type='selenium', append_name='step3_2')
+ for item in check_list:
+ try:
+ self.find_element_by_link_text_in_table('nav', item)
+ except Exception:
+ self.assertFalse(True, msg=("link %s cannot be found in the page" % item))
+ check_list_3 = ['Machine', 'Distro', 'Layers', 'Total number of tasks', 'Tasks executed', \
+ 'Tasks not executed', 'Reuse', 'Recipes built', 'Packages built']
+ self.assertTrue(self.is_text_present(check_list_3), msg=("text not in web page"))
+ self.driver.back()
+
+ def test_951(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)
+ element_latest = self.driver.find_element_by_xpath("//*[@id='latest-builds']/div/div[2]/div[2]/div[3]/a")
+ str_warning_latest = element_latest.text
+ if (str_warning_latest.find("warnings") and str_warning_latest.split()[1] != ''):
+ pass
+ else:
+ print("Error :warnings are not present in latest build")
+ element_latest.click()
+ self.driver.back()
+ element_all_build = self.driver.find_element_by_xpath("//*[@id='allbuildstable']/tbody/tr/td[8]/a")
+ str_warning_all = element_all_build.text
+ if (str_warning_all.find("warnings") and str_warning_all.split()[1] != ''):
+ pass
+ else:
+ print("Error :warnings are not present in All build")
+ element_all_build.click()
+ self.driver.back()
+ has_successful_build = 1
+ has_failed_build = 1
+ try:
+ fail_icon = self.driver.find_element_by_xpath("//*[@class='icon-minus-sign error']")
+ except Exception:
+ has_failed_build = 0
+ self.log.info("no failed build exists")
+ pass
+ if has_failed_build:
+ self.driver.find_element_by_partial_link_text("error").click()
+ self.driver.back()
+ time.sleep(1)
+ self.save_screenshot(screenshot_type='selenium', append_name='step4')
+
+ def test_955(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.driver.find_element_by_link_text("core-image-minimal").click()
+ self.driver.find_elements_by_xpath("//*[@id='breadcrumb']/li")
+ self.driver.find_elements_by_xpath("//*[@id='build-menu']/li")
+ self.assertFalse(self.driver.find_element_by_xpath(
+ "//div[@class='page-header build-data']").text != 'core-image-minimal qemux86',
+ msg="Build Image is not present")
+
+ self.driver.find_element_by_xpath("//h2[@data-heading='build-artifacts']")
+ self.driver.find_element_by_xpath("//h2[@data-role='build-summary-heading']")
+ self.assertFalse(self.driver.find_element_by_xpath("(//span/strong)[3]").text != 'Completed',
+ msg="Completed is not present")
+ packages_link = self.driver.find_element_by_xpath(
+ "//div[@class='well well-transparent dashboard-section']/h3/a")
+ self.assertFalse(packages_link.get_attribute("href") == '', msg="Link not assocaited with pacakge")
+ self.assertFalse(
+ self.driver.find_element_by_xpath("((//dl[@class='dl-horizontal'])/dt)[1]").text != 'Packages included')
+ package_included_link = self.driver.find_element_by_xpath("((//dl[@class='dl-horizontal'])/dd)[1]/a")
+ self.assertFalse(package_included_link.get_attribute("href") == '', msg="Link not assocaited with pacakge")
+ self.assertFalse(
+ int(self.driver.find_element_by_xpath("((//dl[@class='dl-horizontal'])/dd)[1]/a/span").text) == 0,
+ msg='Packages included number is zero')
+ self.assertFalse(
+ self.driver.find_element_by_xpath("((//dl[@class='dl-horizontal'])/dt)[2]").text != 'Total package size',
+ msg='Total package size string not present')
+ self.assertFalse((self.driver.find_element_by_xpath("((//dl[@class='dl-horizontal'])/dd)[2]").text) == '',
+ msg='Total package size is zero')
+ self.assertFalse(self.driver.find_element_by_xpath("(//dl[@class='dl-horizontal'])[2]/dt").text != 'Manifests',
+ msg='Manifests string not present')
+ license_manifest_link = self.driver.find_element_by_xpath("((//dl[@class='dl-horizontal'])[2]//dd)[1]/a")
+ self.assertFalse(license_manifest_link.get_attribute("href") == '',
+ msg="Link not assocaited with license_manifest")
+ package_manifest_link = self.driver.find_element_by_xpath("((//dl[@class='dl-horizontal'])[2]//dd)[2]/a")
+ self.assertFalse(package_manifest_link.get_attribute("href") == '',
+ msg="Link not assocaited with package_manifest")
+ self.assertFalse(
+ self.driver.find_element_by_xpath("((//dl[@class='dl-horizontal'])[3]/dt)[1]").text != 'Image files',
+ msg='Image file text not present')
+ length = len(self.driver.find_elements_by_xpath("((//dl[@class='dl-horizontal'])[3]/dd)[1]//ul/li"))
+ for i in range(1, length + 1):
+ self.assertFalse(self.driver.find_element_by_xpath(
+ "(((//dl[@class='dl-horizontal'])[3]/dd)[1]//ul/li)[%d]" % i).text == '')
+
+ Configuration_link = self.driver.find_element_by_xpath("(//div[@class='well well-transparent']/h3)[1]/a")
+ self.assertFalse(Configuration_link.text != 'Configuration', msg='Configuration text not present')
+ self.assertFalse(Configuration_link.get_attribute("href") == '', msg='Link not assocaites with configuration')
+
+ self.driver.find_element_by_xpath(
+ "//div[@class='col-md-4 dashboard-section']/div[@class='well well-transparent']/dl/dt")
+
+ self.assertFalse(self.driver.find_element_by_xpath(
+ "(//div[@class='col-md-4 dashboard-section']/div[@class='well well-transparent']/dl/dt)[1]").text != 'Machine',
+ msg='machine text not found')
+ self.assertFalse(self.driver.find_element_by_xpath(
+ "(//div[@class='col-md-4 dashboard-section']/div[@class='well well-transparent']/dl/dt)[2]").text != 'Distro',
+ msg='distro text not found')
+ self.assertFalse(self.driver.find_element_by_xpath(
+ "(//div[@class='col-md-4 dashboard-section']/div[@class='well well-transparent']/dl/dt)[3]").text != 'Layers',
+ msg='Layers text not found')
+ self.assertFalse(self.driver.find_element_by_xpath(
+ "(//div[@class='col-md-4 dashboard-section']/div[@class='well well-transparent']/dl/dd)[1]").text != 'qemux86',
+ msg='qemux86 text not found')
+ self.assertFalse(self.driver.find_element_by_xpath(
+ "(//div[@class='col-md-4 dashboard-section']/div[@class='well well-transparent']/dl/dd)[2]").text != 'poky',
+ msg='poky text not found')
+ self.assertFalse(self.driver.find_element_by_xpath(
+ "((//div[@class='col-md-4 dashboard-section']/div[@class='well well-transparent']/dl/dd)[3]/ul/li)[1]").text != 'meta-poky',
+ msg='meta-poky text not found')
+ self.assertFalse(self.driver.find_element_by_xpath(
+ "((//div[@class='col-md-4 dashboard-section']/div[@class='well well-transparent']/dl/dd)[3]/ul/li)[2]").text != 'meta-yocto-bsp',
+ msg='meta-yocto-bsp string not found')
+ self.assertFalse(self.driver.find_element_by_xpath(
+ "((//div[@class='col-md-4 dashboard-section']/div[@class='well well-transparent']/dl/dd)[3]/ul/li)[3]").text != 'openembedded-core',
+ msg='openembedded-core string not found')
+
+ tasks_link = self.driver.find_element_by_xpath("(//div[@class='well well-transparent']/h3)[2]/a")
+ self.assertFalse(tasks_link.text != 'Tasks', msg="Task text not found")
+ self.assertFalse(tasks_link.get_attribute("href") == '', msg='Link not assocaites with tasks')
+ self.assertFalse(self.driver.find_element_by_xpath(
+ "((//div[@class='well well-transparent'])[2]/dl/dt)[1]").text != 'Total number of tasks',
+ msg='Text not available for tasks')
+
+ No_tasks_link = self.driver.find_element_by_xpath("((//div[@class='well well-transparent'])[2]/dl/dd)[1]/a")
+ self.assertFalse(int(No_tasks_link.text) == 0, msg='No of toatl task is 0')
+ self.assertFalse(No_tasks_link.get_attribute("href") == '',
+ msg='Link not assocaited with total number of tasks')
+
+ self.assertFalse(self.driver.find_element_by_xpath(
+ "((//div[@class='well well-transparent'])[2]/dl/dt)[2]").text != 'Tasks executed',
+ msg='Tasks executed text not found')
+
+ Executed_tasks_link = self.driver.find_element_by_xpath(
+ "((//div[@class='well well-transparent'])[2]/dl/dd)[2]/a")
+ self.assertFalse(int(Executed_tasks_link.text) == 0, msg='Total number of Tasks executed is zero')
+ self.assertFalse(Executed_tasks_link.get_attribute("href") == '', msg='Link not assocaited with Executed tasks')
+ self.assertFalse(self.driver.find_element_by_xpath(
+ "((//div[@class='well well-transparent'])[2]/dl/dt)[3]").text != 'Tasks not executed')
+
+ Not_Executed_tasks_link = self.driver.find_element_by_xpath(
+ "((//div[@class='well well-transparent'])[2]/dl/dd)[3]/a")
+ self.assertFalse(int(Not_Executed_tasks_link.text) == 0, msg='Total number of not executed tasks is zero')
+ self.assertFalse(Not_Executed_tasks_link.get_attribute("href") == '',
+ msg='Link not assocaited with not Executed tasks')
+ self.assertFalse(
+ self.driver.find_element_by_xpath("((//div[@class='well well-transparent'])[2]/dl/dt)[4]").text != 'Reuse',
+ msg='Reuse ttext not present')
+
+ Reuse_tasks_link = self.driver.find_element_by_xpath("((//div[@class='well well-transparent'])[2]/dl/dd)[3]/a")
+ self.assertFalse(int(Reuse_tasks_link.text) == 0, msg='Resue tasks are showing zero')
+
+ self.assertFalse(
+ (int(No_tasks_link.text) != (int(Executed_tasks_link.text) + int(Not_Executed_tasks_link.text))),
+ msg='Total Task calucaltion not correct')
+ Recipies_link = self.driver.find_element_by_xpath("((//div[@class='well well-transparent']/h3)[3]/a)[1]")
+ self.assertFalse(Recipies_link.text != 'Recipes', msg='Recipes text not found')
+ self.assertFalse(Recipies_link.get_attribute("href") == '', msg='Link not associated with Recipes section')
+ Packages_link = self.driver.find_element_by_xpath("((//div[@class='well well-transparent']/h3)[3]/a)[2]")
+ self.assertFalse(Packages_link.text != 'Packages', msg='Packages text not found')
+ self.assertFalse(Packages_link.get_attribute("href") == '', msg='Link not associated with packages section')
+ self.assertFalse(self.driver.find_element_by_xpath(
+ "((//div[@class='well well-transparent']/dl)[3]/dt)[1]").text != 'Recipes built',
+ msg='Recipie built text not found')
+ Recipie_built_link = self.driver.find_element_by_xpath(
+ "((//div[@class='well well-transparent']/dl)[3]/dd)[1]/a")
+ self.assertFalse(int(Recipie_built_link.text) == 0, msg="Total packages number is showing zero")
+ self.assertFalse(Recipie_built_link.get_attribute("href") == '',
+ msg='Link not associated with built recipie section')
+ url_Recipie_built_link = Recipie_built_link.get_attribute("href")
+ self.assertFalse(self.driver.find_element_by_xpath(
+ "((//div[@class='well well-transparent']/dl)[3]/dt)[2]").text != 'Packages built',
+ msg='Packages built text not found')
+ Package_built_link = self.driver.find_element_by_xpath(
+ "((//div[@class='well well-transparent']/dl)[3]/dd)[2]/a")
+ self.assertFalse(int(Package_built_link.text) == 0, msg="Total packages number is showing zero")
+ self.assertFalse(Package_built_link.get_attribute("href") == '',
+ msg='Link not associated with built packages section')
diff --git a/toasteruitest/toaster_test.cfg b/toasteruitest/toaster_test.cfg
new file mode 100644
index 00000000000..3792737e8c6
--- /dev/null
+++ b/toasteruitest/toaster_test.cfg
@@ -0,0 +1,10 @@
+# Configuration file for toaster_test
+# Sorted by different host type
+# test browser should be: chrome; firefox and IE(still under development)
+# logging_level could be: CRITICAL; ERROR; WARNING; INFO; DEBUG; NOTSET
+
+[toaster_test_linux]
+toaster_url = 'http://127.0.0.1:8000'
+test_browser = 'chrome'
+test_cases = [901,946,947,948,949,950,904,914,902,903,906,910,911,912,913,915,916,923,924,940,941,942,943,944,945,904]
+logging_level = 'INFO'