def get_col_info(self, key): df = self.df try: log.info('【%s】列信息显示如下:\n%s' % (key, df[key])) except KeyError: log.error('【%s】不是列名,请重新查看' % key) return df[key]
def get_text(self, selector): if self.find_element (selector).text: text = self.find_element (selector).text else: text = self.find_element (selector).get_attribute ('value') log.info ("get the element and iteself text:%s" % text) return text
def delete(self, key): '''通过关键字进行删除''' n = self.get_rows_by_key(key) self.click("xpath=>//*[@id='rowcount" + str(n) + "']/td[9]/a[3]") self.switch_alert_accept() log.info(u' name 为[%s]的设备信息已被删除!>>>' % key) self.switch_current_frame()
def click(self, selector): s =self.presence_of_element_located(selector) try: s.click () log.info ("The element was clicked." ) except NameError as e: log.error ("Failed to click the element with %s" % e)
def test_add(self): '''添加卡口设备''' self.s.selecting_road() #默认第三个道路信息 num0 = int(self.s.get_counts()) self.s.adding() self.s.adds_org() self.s.adds_type('闯红灯') self.s.type_name('测试设备名称') self.s.type_brand('大华') self.s.adds_dev_func(['卡口检测', '单点超速']) self.s.type_pattern(sj()) self.s.go_env_setting() self.s.type_ip(sjip()) self.s.type_timeout(60) # self.s.select_server() time.sleep(1) self.s.go_direction() self.s.car_direction() self.s.car_road('2') time.sleep(1) self.s.go_build_info() self.s.select_factory('西安翔迅') self.s.saving() num1 = int(self.s.get_counts()) assert num0 + 1 == num1 self.assertEqual(num0 + 1, num1) log.info('successfully added!设备添加成功!')
def save(self, df): book = load_workbook(self.path) writer = pd.ExcelWriter(self.path, engine='openpyxl') writer.book = book writer.sheets = dict((ws.title, ws) for ws in book.worksheets) df.to_excel(writer, self.sheetname, index=False) writer.save() log.info('保存成功!')
def clear_text(self, selector): el = self.presence_of_element_located(selector) try: el.clear () log.info ("Clear text in input box before typing.") except NameError as e: log.error ("Failed to clear in input box with %s" % e) self.get_windows_img ()
def test_search(self): '''查询卡口设备''' key = '测试设备名称' self.s.stype_device_name(key) self.s.searching() list = self.s.namelist() self.assertNotEqual(len([s for s in list if key in s]), 0) log.info('查询设备【%s】,确已存在!' % key)
def test_xdelete(self): '''删除卡口设备''' key = '修改后的' self.s.stype_device_name(key) self.s.searching() self.s.delete(key) if self.s.get_counts_key(key) == 0: log.info('设备名称为【%s】,现在已正确删除!' % key)
def get_selector(self, key): df = self.df row_info = self.get_row_info(key) by = row_info['by'] bystyle = row_info['by_style'] xpath = by + '=>' + bystyle log.info('【%s】元素的selector信息显示如下:\n%s' % (key, xpath)) return xpath[0]
def enter_key(self, selector): e1 = self.find_element (selector) try: e1.send_keys (Keys.ENTER) log.info ("Had touch the Enter keys .") except Exception as e: log.error ("Failed to touch any keys") self.get_windows_img ()
def stype_device_type(self, text): '''查询输入''' self.switch_frame('content-frame') if text in self.type_dic: self.select(self.dev_type, text) log.info('Enter device type :%s for searching.' % text) else: log.info('device type has no such items:%s .' % text) self.switch_current_frame()
def adds_type(self, text): if text in self.type_dic: self.click(self.add_dev_type) num = self.type_dic.index(text) + 1 type = 'xpath=>.//*[@id="dropdown-ul"]/li[%s]' % num self.click(type) log.info('Enter device type :%s for searching.' % text) else: log.info('device type has no such items:%s .' % text)
def test_check(self): '''查看卡口设备''' key = '测试设备名称' self.s.stype_device_name(key) self.s.searching() num = self.s.get_counts() self.s.view(key) name = self.s.get_view_name() self.assertEqual(name, key) log.info('name 为【%s】的卡口设备信息查看successfullly!<<<' % key)
def switch_window(self, to_handle): now_handle = self.get_current_window_handle old_handle = to_handle handles = self.driver.window_handles log.info ("current handles number is:%s" % len (handles)) for handle in handles: if handle != now_handle: log.info ('now to switch another window:%s' % handle) self.driver.close () # 关闭当前焦点所在的窗口 self.driver.switch_to.window (to_handle) # 切换到第二个窗口
def get_sheet(self): try: if not isinstance(self.sheet_str, str): log.error('s_name为字符串,不能为其他信息') self.sheetname = [ s for s in self.workbook.sheet_names() if self.sheet_str in s ][0] log.info('现在读取的是%s中的%s【sheet】' % (self.path, self.sheetname)) except Exception as e: log.error('s_name[%s]错误或者不存在!!!%s' % (self.sheet_str, e)) return self.sheetname
def page_messages(self): self.get_text(self.delete_dev) current_page_num = self.get_text(self.current_page) allpages = self.get_text(self.pages) numbers = self.get_text(self.numbers) page_number = self.get_text( self.page_number).split('条')[0].split('页')[-1] log.info( 'current_page_num, allpages, numbers, page_number' + current_page_num, allpages, numbers, page_number) return current_page_num, allpages, numbers, page_number
def set_value(self, element, col_value, value): df = self.df row = self.get_row_index(element) print(row) col = int(self.get_col_index(col_value)) log.info('【%s】的[%s]属性从【%s】改为[%s]' % (element, col_value, df.iloc[row, col], value)) df.iloc[row:row + 1, col:col + 1] = value print(df.iloc[row:row + 1, col:col + 1]) # df.iloc[row]['by_style'] = 'username' self.save(df)
def adds_dev_func(self, list1): time.sleep(1) dic = [v for k, v in self.func_dict.items()] num = [dic.index(m) + 2 for m in dic for n in list1 if n == m] # print (dic, num[0]) self.click(self.deviceTypeNames) time.sleep(1) for i in range(len(num)): path = 'xpath=>//*[@id="dtTreeSpace_%s_span"]' % num[i] self.click(path) log.info('dev_function %s has been selected.' % list1[i])
def get_element_row_num(self, key): df = self.df key_pattern = r'^%s$' % key row = [] try: column = [i for i in df.columns if '页面元素' in i][0] row = [ k for k, v in df[column].items() if re.findall(key_pattern, v) ][0] log.info('第【%s】行' % row) except IndexError: log.error('错误,该行不存在,%s' % df.columns) return row
def get_windows_img(self): """ 在这里我们把file_path这个参数写死,直接保存到我们项目根目录的一个文件夹.\Screenshots下 """ file_path = os.path.dirname (os.path.dirname (__file__)) + '/screenshots/' rq = time.strftime ('%Y%m%d%H%M', time.localtime (time.time ())) screen_name = file_path + rq + '.png' try: self.driver.get_screenshot_as_file (screen_name) log.info ("Had take screenshot and save to folder : /screenshots") except NameError as e: log.error ("Failed to take screenshot! %s" % e) self.get_windows_img ()
def test_update(self): '''修改卡口设备''' key = '测试设备名称' key2 = '修改后的' self.s.stype_device_name(key) self.s.searching() self.s.update(key) self.s.type_update_name(key2) self.s.saving() # 测试是否修改 # if self.s.compareUpdate(key,key2): # log.info ('修改设备【%s】,现在已正确修改!' % key) if self.s.get_counts_key(key2) == 1: log.info('设备名称【%s】修改为【%s】,现在已正确修改!' % (key, key2))
def creatsuitel(): testunit = unittest.TestSuite() #discover 方法定义 discover = unittest.defaultTestLoader.discover(path, pattern='*.py', top_level_dir=path) #discover 方法筛选出来的用例,循环添加到测试套件中 for test_suite in discover: for test_case in test_suite: testunit.addTests(test_case) log.info('discover:======> %s' % discover._tests) log.info('testunit:======> %s' % testunit) return testunit
def type(self, selector, text): e1 = self.presence_of_element_located(selector) e1.clear () if e1.text: text1 = e1.text else: text1 = e1.get_attribute ('value') try: e1.send_keys (text) log.info ("Had type [ %s ] in inputBox" % text) except NameError as e: log.error ("Failed to type in input box with %s" % text1) log.error ("Failed %s" % e) self.get_windows_img ()
def find_elements(self, selector): global elements if '=>' not in selector: return self.driver.find_elements_by_id(selector) selector_by = selector.split('=>')[0] selector_value = selector.split('=>')[1] if selector_by == "i" or selector_by == 'id': try: elements = self.driver.find_elements_by_id(selector_value) s = element.tag_name log.info("Had find the elements %s successful " "by %s via value: %s " % (s, selector_by, selector_value)) except NoSuchElementException as e: log.error("NoSuchElementException: %s" % e) self.get_windows_img() elif selector_by == "n" or selector_by == 'name': elements = self.driver.find_elements_by_name(selector_value) elif selector_by == "c" or selector_by == 'class_name': elements = self.driver.find_elements_by_class_name(selector_value) elif selector_by == "l" or selector_by == 'link_text': elements = self.driver.find_elements_by_link_text(selector_value) elif selector_by == "p" or selector_by == 'partial_link_text': elements = self.driver.find_elements_by_partial_link_text( selector_value) elif selector_by == "t" or selector_by == 'tag_name': elements = self.driver.find_elements_by_tag_name(selector_value) elif selector_by == "x" or selector_by == 'xpath': try: elements = self.driver.find_elements_by_xpath(selector_value) s = [ kname.text for kname in self.driver.find_elements_by_xpath( selector_value) ] log.info("Had find the elements [ %s ] successful " "by %s via value: %s " % (s, selector_by, selector_value)) except NoSuchElementException as e1: log.error("NoSuchElementException: %s" % e1) self.get_windows_img() elif selector_by == "c" or selector_by == 'css': elements = self.driver.find_elements_by_css_selector( selector_value) else: raise NameError("Please enter a valid type of targeting elements.") return elements
def close(self): try: self.driver.close () log.info ("Closing and quit the browser.") except NameError as e: log.error ("Failed to quit the browser with %s" % e)
def wait(self, seconds): self.driver.implicitly_wait (seconds) log.info ("wait for %d seconds." % seconds)
def back(self): self.driver.back () log.info ("Click back on current page.")
def forward(self): self.driver.forward () log.info ("Click forward on current page.")
def sleep(seconds): time.sleep (seconds) log.info ("Sleep for %d seconds" % seconds)