def check(step): data = step['data'] if not data: data = step['expected'] element = step['element'] element_location = locating_element(element) if '#' in element: e_name = element.split('#')[0] + '#' else: e_name = element by = e.elements[e_name]['by'] output = step['output'] var = {} if by in ('title', 'current_url'): var[by] = getattr(Common, by)(data, output) else: for key in data: # 预期结果 expected = data[key] # 切片操作处理 s = re.findall(r'\[.*?\]', key) if s: s = s[0] key = key.replace(s, '') if key == 'text': real = element_location.text else: real = element_location.get_attribute(key) if s: real = eval('real' + s) logger.info('DATA:%s' % repr(expected)) logger.info('REAL:%s' % repr(real)) try: compare(expected, real) except: raise Exception( f'Check Failure, DATA:{repr(expected)}, REAL:{repr(real)}') # 获取元素其他属性 for key in output: if output[key] == 'text': var[key] = g.var[key] = element_location.text elif output[key] in ('text…', 'text...'): if element_location.text.endswith('...'): var[key] = g.var[key] = element_location.text[:-3] else: var[key] = g.var[key] = element_location.text else: var[key] = g.var[key] = element_location.get_attribute( output[key]) if var: step['_output'] += '\n||output=' + str(var) return element_location
def sql(step): result = {} element = step['element'] _sql = e.get(element)[1] logger.info('SQL: %s' % repr(_sql)) # 获取连接参数 value = e.get(step['page'] + '-' + 'config')[1] arg = data_format(value) if step['page'] not in g.db.keys(): g.db[step['page']] = DB(arg) if _sql.lower().startswith('select'): row = g.db[step['page']].fetchone(_sql) logger.info('SQL result: %s' % repr(row)) if not row: raise Exception('*** Fetch None ***') elif _sql.lower().startswith('db.'): _sql_ = _sql.split('.', 2) collection = _sql_[1] sql = _sql_[2] row = g.db[step['page']].mongo(collection, sql) if sql.startswith('find'): result = row logger.info('keys result: %s' % repr(result)) else: g.db[step['page']].execute(_sql) if _sql.lower().startswith('select'): text = _sql[6:].split('FROM')[0].split('from')[0].strip() keys = dedup(text).split(',') for i, k in enumerate(keys): keys[i] = k.split(' ')[-1] result = dict(zip(keys, row)) logger.info('keys result: %s' % repr(result)) data = step['data'] if not data: data = step['expected'] if data: for key in data: sv, pv = data[key], result[key] logger.info('key: %s, expect: %s, real: %s' % (repr(key), repr(sv), repr(pv))) compare(sv, pv) output = step['output'] if output: _output = {} for key in output: _output[key] = result[output[key]] g.var[key] = result[output[key]] logger.info('output: %s' % repr(_output))
def check(dialog, step): element = step['element'] data = step['data'] if not data: data = step['expected'] output = step['output'] for key in data: # 预期结果 expected = data[key] # 切片操作处理 s = re.findall(r'\[.*?\]', key) if s: s = s[0] key = key.replace(s, '') if key == 'text': if dialog.backend.name == 'win32': real = dialog.window(best_match=element).texts()[0].replace('\r\n', '\n') elif dialog.backend.name == 'uia': real = dialog.child_window(best_match=element).texts()[0].replace('\r\n', '\n') elif key == 'value': if dialog.backend.name == 'win32': real = dialog.window(best_match=element).text_block().replace('\r\n', '\n') elif dialog.backend.name == 'uia': real = dialog.child_window(best_match=element).get_value().replace('\r\n', '\n') if s: real = eval('real' + s) if key == 'selected': if dialog.backend.name == 'win32': real = dialog.window(best_match=element).is_selected() elif dialog.backend.name == 'uia': real = dialog.child_window(best_match=element).is_selected() elif key == 'checked': if dialog.backend.name == 'win32': real = dialog.window(best_match=element).is_checked() elif dialog.backend.name == 'uia': real = dialog.child_window(best_match=element).is_checked() elif key == 'enabled': if dialog.backend.name == 'win32': real = dialog.window(best_match=element).is_enabled() elif dialog.backend.name == 'uia': real = dialog.child_window(best_match=element).is_enabled() elif key == 'visible': if dialog.backend.name == 'win32': real = dialog.window(best_match=element).is_visible() elif dialog.backend.name == 'uia': real = dialog.child_window(best_match=element).is_visible() elif key == 'focused': if dialog.backend.name == 'win32': real = dialog.window(best_match=element).is_focused() elif dialog.backend.name == 'uia': real = dialog.child_window(best_match=element).is_focused() logger.info('DATA:%s' % repr(expected)) logger.info('REAL:%s' % repr(real)) compare(expected, real) # 获取元素其他属性 for key in output: k = output[key] if dialog.window(best_match=element).class_name() == 'Edit' and k == 'text': k = 'value' if k == 'text': if dialog.backend.name == 'win32': g.var[key] = dialog.window(best_match=element).texts()[0].replace('\r\n', '\n') elif dialog.backend.name == 'uia': g.var[key] = dialog.child_window(best_match=element).texts()[0].replace('\r\n', '\n') if k == 'value': if dialog.backend.name == 'win32': g.var[key] = dialog.window(best_match=element).text_block().replace('\r\n', '\n') elif dialog.backend.name == 'uia': g.var[key] = dialog.child_window(best_match=element).get_value().replace('\r\n', '\n')
def sql(step): response = {} element = step['element'] _sql = e.get(element)[1] logger.info('SQL: %s' % repr(_sql)) # 获取连接参数 value = e.get(step['page'] + '-' + 'config')[1] arg = data_format(value) if step['page'] not in g.db.keys(): g.db[step['page']] = DB(arg) if _sql.lower().startswith('select'): row = g.db[step['page']].fetchone(_sql) logger.info('SQL response: %s' % repr(row)) if not row: raise Exception('*** Fetch None ***') elif _sql.lower().startswith('db.'): _sql_ = _sql.split('.', 2) collection = _sql_[1] sql = _sql_[2] response = g.db[step['page']].mongo(collection, sql) if response: logger.info('find result: %s' % repr(response)) else: g.db[step['page']].execute(_sql) if _sql.lower().startswith('select'): text = _sql[6:].split('FROM')[0].split('from')[0].strip() keys = dedup(text).split(',') for i, k in enumerate(keys): keys[i] = k.split(' ')[-1] response = dict(zip(keys, row)) logger.info('select result: %s' % repr(response)) expected = step['data'] if not expected: expected = step['expected'] if 'json' in expected: expected['json'] = json2dict(expected.get('json', '{}')) result = check(expected.pop('json'), response['json']) logger.info('json check result: %s' % result) if result['code'] != 0: raise Exception(f'json | EXPECTED:{repr(expected["json"])}, REAL:{repr(response["json"])}, RESULT: {result}') elif result['var']: var = dict(var, **result['var']) g.var = dict(g.var, **result['var']) logger.info('json var: %s' % (repr(result['var']))) if expected: for key in expected: sv, pv = expected[key], response[key] logger.info('key: %s, expect: %s, real: %s' % (repr(key), repr(sv), repr(pv))) compare(sv, pv) output = step['output'] if output: _output = {} for k, v in output.items(): if k == 'json': sub = json2dict(output.get('json', '{}')) result = check(sub, response['json']) # logger.info('Compare json result: %s' % result) var = dict(var, **result['var']) g.var = dict(g.var, **result['var']) logger.info('json var: %s' % (repr(result['var']))) else: _output[k] = response[v] g.var[k] = response[v] logger.info('output: %s' % repr(_output))
def sql(step): element = step['element'] el, _sql = e.get(element) logger.info('SQL: %s' % repr(_sql)) # 获取连接参数 el, value = e.get(step['page'] + '-' + 'config') arg = data_format(value) if step['page'] not in g.db.keys(): g.db[step['page']] = DB(arg) if _sql.lower().startswith('select'): row = g.db[step['page']].fetchone(_sql) logger.info('SQL result: %s' % repr(row)) if not row: raise Exception('*** Fetch None ***') else: g.db[step['page']].execute(_sql) result = {} if _sql.lower().startswith('select'): keys = _sql[6:].split('FROM')[0].split('from')[0].strip().split(',') for i, k in enumerate(keys): keys[i] = k.split(' ')[-1] result = dict(zip(keys, row)) logger.info('keys result: %s' % repr(result)) data = step['data'] if not data: data = step['expected'] if data: for key in data: sv, pv = data[key], result[key] logger.info('key: %s, expect: %s, real: %s' % (repr(key), repr(sv), repr(pv))) compare(sv, pv) # if isinstance(sv, str): # # if sv.startswith('#'): # assert sv[1:] != str(pv) # # assert isinstance(pv, str) # # if sv.startswith('*'): # assert sv[1:] in pv # # elif sv.startswith('^'): # assert pv.startswith(sv[1:]) # # elif sv.startswith('$'): # assert pv.endswith(sv[1:]) # # elif sv.startswith('\\'): # sv = sv[1:] # # assert sv == pv # # elif isinstance(sv, int): # assert isinstance(pv, int) # assert sv == pv # # elif isinstance(sv, float): # assert absisinstance(pv, float) # assert sv == pv # # else: # assert sv == pv output = step['output'] if output: logger.info('output: %s' % repr(output)) for key in output: g.var[key] = result[output[key]]