Advertisement
Guest User

Software-testing Forum_1

a guest
Jun 17th, 2016
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.25 KB | None | 0 0
  1. import argparse
  2. import unittest
  3. import tkinter
  4. from tkinter.filedialog import askopenfilename
  5. from tkinter.messagebox import askyesno
  6. import time
  7. import os
  8. import sys
  9.  
  10. from openpyxl.comments.comments import Comment
  11. from openpyxl.styles import Style
  12. from openpyxl.styles.colors import Color
  13.  
  14. from openpyxl.styles.fills import PatternFill
  15. import openpyxl
  16. from selenium.common.exceptions import TimeoutException
  17. from selenium.common.exceptions import NoSuchElementException
  18. from selenium.webdriver.common.by import By
  19.  
  20. from webfeatures import click
  21. from webfeatures import send_keys
  22. from webfeatures import wait_for_loading
  23. from webfeatures import set_up
  24. from webfeatures import login
  25. from webfeatures import design_creation
  26. from webfeatures import select_by_part_number
  27. from webfeatures import selecting_by_visible_text
  28. from webfeatures import wait_for_staleness
  29. from webfeatures import resistor_changing
  30. from webfeatures import field_param_setting
  31. from webfeatures import unlock_with_change
  32. from webfeatures_locator_generators import field_by_p_name_locator_generator, design_dialog_locator, table_cell_locator
  33. from webfeatures_locator_generators import component_field_locator_generator
  34. from webfeatures_locator_generators import simple_component_field_locator_generator
  35.  
  36.  
  37. # Possible CL arguments for parser
  38.  
  39. default_config = r'D:\Python\PIXlsScript\PIXlsDialogs_Config_TinySwitch4.xlsx'
  40.  
  41.  
  42. default_log = '{cur_dir}{path_to_log}'.format(
  43. cur_dir=os.path.dirname(os.path.realpath(__file__)),
  44. path_to_log='\\error_log\\')
  45.  
  46. dateTimeStamp = time.strftime('%Y.%m.%d %H.%M.%S')
  47.  
  48. parser = argparse.ArgumentParser(add_help=True,
  49. description='Arguments for script',
  50. formatter_class=argparse.ArgumentDefaultsHelpFormatter)
  51. parser.add_argument('-i', '--input-config',
  52. default=default_config,
  53. type=str,
  54. help='Input config file')
  55. parser.add_argument('-o', '--output-report',
  56. type=str,
  57. help='Output report file')
  58. parser.add_argument('--output-log',
  59. type=str,
  60. default=default_log,
  61. help='Output log file')
  62. parser.add_argument('--user-dialog',
  63. action='store_true',
  64. help='Offer the user dialog to choose ')
  65. args = parser.parse_args()
  66.  
  67. test_count = passed_count = failed_count = errors_count = 0
  68.  
  69. if args.user_dialog:
  70. root = tkinter.Tk()
  71. root.geometry('0x0+0+7300')
  72. root.update_idletasks()
  73. answer = askyesno('Config file choose',
  74. 'Do you want to use default config? '
  75. 'Default config is: {config}'
  76. .format(config=default_config), parent=root)
  77. if answer:
  78. config_path = args.input_config
  79. else:
  80. config_path = askopenfilename()
  81. root.destroy()
  82. else:
  83. config_path = args.input_config
  84.  
  85. input_config = openpyxl.load_workbook(config_path, data_only=True)
  86.  
  87. report = input_config.get_sheet_by_name('Dialogs')
  88.  
  89. link_test = report.cell('B2').value
  90. path_report = args.output_report if args.output_report else report.cell('B3').value
  91. path_report += '\\'
  92. if not os.path.exists(path_report):
  93. os.makedirs(path_report)
  94. if not os.path.exists(args.output_log):
  95. os.makedirs(args.output_log)
  96. log_file = open(args.output_log + '{name}_{time}.txt'.format(name=os.path.basename(config_path), time=dateTimeStamp),
  97. 'w')
  98. username = report.cell('B4').value
  99. password = '@' + report.cell('B5').value
  100. family = report.cell('B6').value
  101.  
  102.  
  103. max_rows = report.get_highest_row() + 1
  104. test_config = []
  105.  
  106.  
  107. def set_test(name, i):
  108. test_config.append([name, {'parameter to change': report.cell(row=i, column=3).value,
  109. 'changed value': report.cell(row=i, column=4).value,
  110. 'parameter to check': report.cell(row=i, column=5).value,
  111. 'reference value': report.cell(row=i, column=6).value,
  112. 'row': i, 'col': 8}, True if report.cell(row=i, column=7).value == 'Yes' else False])
  113.  
  114.  
  115. dialog_family = ''
  116. for i in range(15, max_rows):
  117. dialog_family = report.cell('A' + str(i)).value if report.cell('A' + str(i)).value else dialog_family
  118. cell = report.cell('B' + str(i))
  119.  
  120. possible_values = ['Input', 'Outputs', 'Key Parameters', 'Selection', 'UV/OV',
  121. 'UV/OV/Feedback', 'Programmable pin (PD)', 'Rectifier, Fuse, Surge', 'Capacitors',
  122. 'EMI Filter', 'ILIM/PLIM', 'Output OVP', 'Core Selection',
  123. 'Primary and Bias', 'Secondaries', 'Pin Allocation', 'Diodes',
  124. 'Heatsinks', 'Heatsink', 'Bias Snubber', 'Snubbers',
  125. 'Post Filters', 'Bias', 'Components', 'Dimming Components',
  126. 'Peak Detector']
  127. if cell.value in possible_values:
  128. set_test((dialog_family, cell.value), i)
  129.  
  130.  
  131. class PIXlsDialogs(unittest.TestCase):
  132. global report
  133. currentResult = None
  134.  
  135. def error_appear_check(self, message):
  136. """
  137. Answer if error with specified message is appeared and close it
  138.  
  139. :param message: str
  140. :return: boolean
  141. """
  142.  
  143. try:
  144. driver.find_element(By.XPATH, '//span[contains(text(), "{message}")]'.format(message=message))
  145. click(driver, (By.XPATH, '//button[@id="dlgCancelPIEEE"]'))
  146. return 'Error'
  147. except (TimeoutException, NoSuchElementException) as e:
  148. return False
  149.  
  150. def compare_value(self, fst_value, scnd_value, param=None):
  151. """
  152. Compares two values and add result to report
  153.  
  154. :arg fst_value: value from web page
  155. :arg scnd_value: value from configuration file
  156. """
  157.  
  158. global passed_count, failed_count
  159. try:
  160. real_value = float(fst_value)
  161. value = float(scnd_value)
  162. except ValueError:
  163. real_value = str(fst_value)
  164. value = str(scnd_value)
  165.  
  166. report.cell(row=param.get('row'), column=param.get('col')).value = fst_value
  167. if real_value == value:
  168. passed_count += 1
  169. report.cell(row=param.get('row'), column=(param.get('col') + 1)).value = 'PASS'
  170. report.cell(row=param.get('row'), column=(param.get('col') + 1)).style = Style(
  171. fill=PatternFill(patternType='solid', fgColor=Color('ff60ff60')))
  172. else:
  173. self.fail('Values are not eq')
  174.  
  175. def dialog_init(self, param):
  176. """
  177. Main initialization of every dialog
  178.  
  179. :param param:
  180. :return: tuple, changed_value -- should be set up to changed_param;
  181. changed_param -- field, that should be changed ([0] -- component, [1] -- field);
  182. refer_value -- expected result of check_param;
  183. check_param -- parameter for compliance test.
  184. """
  185. changed_value = param[1].get('changed value')
  186. refer_value = param[1].get('reference value')
  187.  
  188.  
  189. # Open Dialog
  190. click(driver, design_dialog_locator(param[0][0], param[0][1]))
  191.  
  192. # Parsing block and parameter to change
  193. changed_param = param[1].get('parameter to change').split(': ')
  194. check_param = param[1].get('parameter to check').split(': ')
  195.  
  196. return changed_value, refer_value, changed_param, check_param
  197.  
  198. def designTabs(self, param):
  199. changed_value, refer_value, changed_param, check_param = self.dialog_init(param)
  200.  
  201. legend = changed_param[0]
  202. field = changed_param[1]
  203.  
  204. designTabs = self.driver.find_element(By.XPATH, "//div[@id='designTabs']")
  205. field_to_check = driver.find_element(*field_by_p_name_locator_generator(field))
  206. # Send new value to it
  207. field_param_setting(driver, changed_param[0], changed_value)
  208.  
  209.  
  210. @classmethod
  211. def setUpClass(cls):
  212. global report, driver
  213. super(PIXlsDialogs, cls).setUpClass()
  214.  
  215. driver = set_up()
  216. login(driver, link_test, username, password)
  217.  
  218. # dimming check for PH and PL
  219. dimming = 'PH' in family or 'PL' in family
  220. design_creation(driver, family, 'pixls')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement