def isElementExist(self, func): try: func logger.info("判断元素是否存在: 找到%s元素:%s" % func) return True except: logger.info("判断元素是否存在: 元素未找到:%s" % func) return False
def trywait(self, func, count=3): num = 0 while num != count: try: return func except: logger.info("显式等待: %s:元素未找到,当前第%s次寻找" % (func, num)) num += 1 time.sleep(0.5)
def trywait_assert_xpath(self, func, count=3): num = 0 while num != count: try: self.driver.find_element_by_xpath(func) return True except: logger.info("等待断言: %s:元素未找到,当前第%s次寻找" % (func, num + 1)) num += 1 time.sleep(0.5) return False
def trywait_assert(self, func, count=3): num = 0 while num != count: logger.error('%s' % str(num)) logger.error('jinlailo ') try: func return True except: logger.info("等待断言: %s:元素未找到,当前第%s次寻找" % (func, num)) num += 1 time.sleep(0.5) return False
def cp_trywait(self, css1, css2): state = self.driver.find_element_by_css_selector(css1).text seconds = self.driver.find_element_by_css_selector(css2).text logger.info(state, seconds) if state[-2:] == u"截止" and int(seconds) >= 20: logger.info("当前状态 {} 时间 {}".format(state, seconds)) else: time.sleep(int(seconds) + 2) logger.info("封盘中! 等待 {} s".format(seconds))
def is_element_exist(self, func): s = func if len(s) == 0: # print("元素未找到:%s" % value) logger.info("判断元素是否存在: 元素未找到:%s" % func) return False elif len(s) == 1: # print("元素:%s 已找到" % value) logger.info("判断元素是否存在: 元素:%s 已找到" % func) return True else: # print("找到%s个元素:%s" % value) logger.info("判断元素是否存在: 找到%s个元素:%s" % func) return False
def get_verificationCode(self, func): self.driver.save_screenshot('img\\verificationCode.png') element = func logger.info("获取图片元素坐标 {}".format(element.location)) logger.info("获取图片元素大小 {}".format(element.size)) left = element.location['x'] top = element.location['y'] right = element.location['x'] + element.size['width'] bottom = element.location['y'] + element.size['height'] im = Image.open('img\\verificationCode.png') im = im.crop((left, top, right, bottom)) im.save('img\\verificationCode.png') value = code_demo('', '', 'img\\verificationCode.png', '7100') # 请输入若快账户密码 logger.info("若快识别结果为 {}".format(value)) return value
def xpath(self, value): # print("Xpath 元素定位:%s" % value) logger.info("Xpath 元素定位:%s" % value) return self.driver.find_element_by_xpath(value)
def css_size(self, css): num = self.driver.find_element_by_id(css).size logger.info("获取css元素大小 %s 大小:%s" % (css, num)) return num
def rm_cooke(self, cooke): logger.info("删除浏览器 %s Cookie" % cooke) self.driver.delete_cookie(cooke)
def forward(self): # print("浏览器前进") logger.info("浏览器前进") self.driver.forward()
def windowMax(self): # print("浏览器最大化") logger.info("浏览器最大化") self.driver.maximize_window()
def get_css_text(self, css): num = self.driver.find_element_by_css_selector(css).text logger.info("获取css元素值:%s 值为 %s" % (css, num)) return num
def get_xpath_text(self, xpath): num = self.driver.find_element_by_xpath(xpath).text logger.info("获取xpath元素值:%s 值为 %s" % (xpath, num)) return num
def get_name_text(self, name): num = self.driver.find_element_by_id(name).text logger.info("获取name元素值:%s 值为 %s" % (name, num)) return num
def get_id_text(self, id): num = self.driver.find_element_by_id(id).text logger.info("获取id元素值:%s 值为 %s" % (id, num)) return num
def xpath_size(self, xpath): num = self.driver.find_element_by_id(xpath).size logger.info("获取xpath元素大小 %s 大小:%s" % (xpath, num)) return num
def openurl(self, url): logger.info("打开网页:%s" % url) # print("打开网页:%s" % url) self.driver.get(url)
def quit(self): # print("关闭浏览器") logger.info("关闭浏览器") self.driver.quit()
def id_size(self, id): num = self.driver.find_element_by_id(id).size logger.info("获取id元素大小 %s 大小:%s" % (id, num)) return num
def customWindow(self, wide, hige): # print("设置浏览器宽高:%s, %s" % (wide,hige)) logger.info("设置浏览器宽高:%s, %s" % (wide, hige)) self.driver.set_window_size(wide, hige)
def className(self, value): # print("className 元素定位:%s" % value) logger.info("className 元素定位:%s" % value) return self.driver.find_element_by_class_name(value)
def back(self): # print("浏览器后退") logger.info("浏览器后退") self.driver.back()
def url(self,send_url): url = send_url logger.info("测试地址:" + url) return url
def rm_all_cooke(self): logger.info("删除浏览器所有Cookie") self.driver.delete_cookie()
def name_size(self, name): num = self.driver.find_element_by_id(name).size logger.info("获取name元素大小 %s 大小:%s" % (name, num)) return num
timeStr = time.strftime('%Y-%m-%d-%H', time.localtime(time.time())) path = 'Report\\' + timeStr[:10] + '\\' + timeStr[11:] try: os.makedirs(path) print('\033[1;31m' + u'文件目录不存在,正在创建...' + '\033[0m') except: print('\033[1;31m' + u'文件目录已存在,不需重新创建。' + '\033[0m') return os.path.join(cur_path, path) # 报告存放路径 if __name__ == "__main__": report_path = mkfile() discover = unittest.defaultTestLoader.discover( case_path, "*.py") # 自动测试该文件夹下所有用例,如要单独执行则如:test001.py run = HTMLTestRunner.HTMLTestRunner( title="CP项目自动化测试报告", description="测试环境:{}、python {}、Selenium2、{}:{}".format( platform.platform(), pythonVersions, el.capabilities['browserName'], el.capabilities['version']), tester="最棒QA", stream=open(report_path + "\\ TestReport.html", "wb"), verbosity=1.1) el.quit() # 关闭多余浏览器 run.run(discover) time.sleep(5) mail("[email protected],[email protected],[email protected]") logger.info( '向"[email protected],[email protected],[email protected]" 发送测试报告邮件') logger.info("测试结束")
def citlyWait(self, ti): logger.info("隐式等待 %s 秒" % ti) self.driver.implicitly_wait(ti)
def dump(self,data): dump = json.dumps(data) logger.info(data) print(data) return dump
def text(self, value): # print("Text 元素定位:%s" % value) logger.info("Text 元素定位:%s" % value) return self.driver.find_element_by_link_text(value)