def setUp(self): self.logger = Logger() self.logger.info( '######### 发起进攻( ´-ω ・)▄︻┻┳══━一 ###############################') browse = BrowserEngine(self) self.driver = browse.open_browser(self) BasePage.login(self)
def acclick(self, selector): el = self.find_element(selector) try: ActionChains(BrowserEngine(self.driver).driver).click(el).perform() Logger().info("The element was acclick.") except NameError as e: Logger().error("Failed to acclick the element with %s" % e)
def click_twice(self, selector): el = self.find_element(selector) try: ActionChains(BrowserEngine( self.driver).driver).double_click(el).perform() Logger().info("The element \' %s \' was double_clicked." % el.text) except NameError as e: Logger().error("Failed to click the element with %s" % e)
def clear(self, selector): el = self.find_element(selector) try: el.clear() Logger().info("Clear text in input box before typing.") except NameError as e: Logger().error("Failed to clear in input box with %s" % e) self.get_warning_img()
def chehui(self, selector): el = self.find_element(selector) try: ActionChains( BrowserEngine(self.driver).driver).move_to_element_with_offset( el, 242, 83).click().perform() Logger().info("The element \' %s \' was moved." % el.text) except NameError as e: Logger().error("Failed to move to the element with %s" % e)
def type(self, selector, text): el = self.find_element(selector) el.clear() try: el.send_keys(text) Logger().info("Had type \' %s \' in inputBox" % text) except NameError as e: Logger().error("Failed to type in input box with %s" % e) self.get_warning_img()
def get_windows_img(self): file_path = os.path.dirname(os.path.abspath('.')) + '/screenpicture/' rq = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time())) screen_name = file_path + rq + '.png' try: self.driver.get_screenshot_as_file(screen_name) Logger().info( "Had take screenshot and save to folder : /screenpicture") print(screen_name) except NameError as e: Logger().error("Failed to take screenpicture! {}".format(e)) self.get_windows_img()
def get_windows_img3(self): time.sleep(1) file_path = os.path.dirname(os.path.abspath('.')) + '/screenshort3/' rq = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time())) screen_name = file_path + rq + '.png' try: self.driver.get_screenshot_as_file(screen_name) Logger().info( "Had take screenshot and save to folder : /screenshort3") except NameError as e: Logger().error("Failed to take screenshot! %s" % e) self.get_windows_img3()
def ji_preview(self, selector): el = self.find_element(selector) try: ActionChains( BrowserEngine(self.driver).driver).move_to_element_with_offset( el, 0, 68).click().perform() time.sleep(1) ActionChains( BrowserEngine(self.driver).driver).move_to_element_with_offset( el, -90, 164).context_click().perform() Logger().info("The element \' %s \' was moved." % el.text) except NameError as e: Logger().error("Failed to move to the element with %s" % e)
def open_browser(self, driver): config = configparser.ConfigParser() file_path = os.path.dirname( os.path.abspath('.')) + '/config/config.ini' config.read(file_path) browser = config.get("browserType", "browserName") Logger().info("You had select %s browser." % browser) url = config.get("testServer", "URL") Logger().info("The test server url is: %s" % url) if browser == "Firefox": driver = webdriver.Firefox() Logger().info("Starting firefox browser.") elif browser == "Chrome": driver = webdriver.Chrome(self.chrome_driver_path) Logger().info("Starting Chrome browser.") elif browser == "IE": driver = webdriver.Ie() Logger().info("Starting IE browser.") driver.maximize_window() # 窗口最大化 Logger().info("Maximize the current window.") driver.get(url) Logger().info("Open url: %s" % url) driver.implicitly_wait(10) Logger().info("Set implicitly wait 10 seconds.") return driver
class TestCase_嵌套公共业务模块的演示(unittest.TestCase): #path = os.getcwd() #gen_path = os.path.abspath(os.path.dirname(path)) #data_path = gen_path + '\excelCase\demo测试用例\\功能模块\\PR管理\\PR查询' data_path = 'E:/fukun测试项目/YfkSelenium/excelCase/demo测试用例/功能模块/PR管理/PR查询/' mylogger = Logger(logger='testCase_嵌套公共业务模块的演示.py').getlog() def setUp(self): self.driver = InitDriver().openBrowser() def tearDown(self): pass def test_嵌套公共业务模块的演示(self): caseName = '嵌套公共业务模块的演示.xlsx' file_name = os.path.join(self.data_path,caseName ) try: ReadExcel().readExcel(file_name,caseName,self.driver) except Exception as e: #执行异常抛异常,用于反映在测试报告 self.mylogger.info('用例 "{}"执行失败'.format(caseName)) PageElement(self.driver).screen() raise
def login_production(self): """selenium+chromeheadless获取Token""" logger = Logger.get_logger() config = ReadConfig() # 获取配置 vcc = config.get_userinfo("vcc").split(",") username = config.get_userinfo("username").split(",") password = config.get_userinfo("password") production_url = config.get_url("production_url") day = time.strftime("%d") chrome_options = Options() chrome_options.add_argument('--headless') driver = webdriver.Chrome(options=chrome_options) driver.implicitly_wait(10) driver.get(production_url) driver.find_element_by_id("vcc").send_keys(vcc[0]) # 登录 driver.find_element_by_id("username").send_keys(username[0]) driver.find_element_by_id("password").send_keys(password) driver.find_element_by_id('btn').click() manage_cookie = driver.get_cookie('manage_access_token') driver.quit() manage_cookies = json.dumps(manage_cookie) config.update_token("day", day) # 写入日期和token config.update_token("manage_access_token", manage_cookies) logger.info("获取线上manage_access_token到配置文件")
def click(self, selector): el = self.find_element(selector) try: el.click() #Logger().info("The element \' %s \' was clicked." % el.text) except NameError as e: Logger().error("Failed to enter the element with %s" % e)
class Test_LoginModule(unittest.TestCase): logger = Logger("info").getLog() def setUp(self): print("开始测试") @ddt.file_data(r"C:\Users\loudDD\GitProject\svoc\svoc\public\accout.yaml") @ddt.unpack def test_login(self, **data): try: username = data.get("username") pwd = data.get("pwd") result = data.get("result") self.case = LoginPage() self.case.login(username, pwd) self.assertTrue(result == self.case.driver.current_url) self.logger.info("pass") except Exception as e: self.filename = os.path.join("{0}screenshot.png".format( time.strftime("%Y-%m-%d-%H-%M-%S"))) self.imgpath = os.path.join(os.path.abspath("../"), "screenshot") self.path = os.path.join(self.imgpath, self.filename) self.case.screen(self.path) self.logger.critical( (e, "已截图", self.filename)) #需要括号括起来,以达到传入一个元素(多个信息) def tearDown(self): self.case.driver.quit() print('测试结束')
def find_element(self, selector): element = '' if '=>' not in selector: return self.driver.find_element_by_id(selector) selector_by = selector.split('=>')[0] selector_value = selector.split('=>')[1] if selector_by == "i" or selector_by == 'id': try: element = self.driver.find_element_by_id(selector_value) Logger().info("Had find the element \' %s \' successful " "by %s via value: %s " % (element.text, selector_by, selector_value)) except NoSuchElementException as e: Logger().error("NoSuchElementException: %s" % e) self.get_warning_img() elif selector_by == "n" or selector_by == 'name': element = self.driver.find_element_by_name(selector_value) elif selector_by == "cl" or selector_by == 'class_name': element = self.driver.find_element_by_class_name(selector_value) elif selector_by == "l" or selector_by == 'link_text': element = self.driver.find_element_by_link_text(selector_value) elif selector_by == "p" or selector_by == 'partial_link_text': element = self.driver.find_element_by_partial_link_text( selector_value) elif selector_by == "t" or selector_by == 'tag_name': element = self.driver.find_element_by_tag_name(selector_value) elif selector_by == "c" or selector_by == "css_selector": element = self.driver.find_element_by_css_selector(selector_value) elif selector_by == "x" or selector_by == 'xpath': try: element = self.driver.find_element_by_xpath(selector_value) Logger().info("Had find the element \' %s \' successful " "by %s via value: %s " % (element.text, selector_by, selector_value)) except NoSuchElementException as e: Logger().error("NoSuchElementException: %s" % e) self.get_warning_img() elif selector_by == "s" or selector_by == 'selector_selector': element = self.driver.find_element_by_css_selector(selector_value) else: raise NameError("Please enter a valid type of targeting elements.") return element
def no_warning_text(self): from selenium.common.exceptions import NoSuchElementException dr = BrowserEngine(self.driver).driver #wait = ui.WebDriverWait(dr, 120) #wait.until(lambda dr: dr.find_element_by_xpath('/html/body/div[19]/div/h2').is_displayed()) time.sleep(2) try: error_mes = dr.find_element_by_xpath( '//*[@id="#modals-container"]/div/div/div[2]/div/h2') except Exception as e: Logger().info("!!!!!!!!!!!Test pass.提示框未出现!!!!!!!!!!!!") else: BasePage.get_warning_img(self) Logger().info(error_mes.text) raise ValueError( '!!!!!!!!!!!!!!!!!!!!!test false!!!!!!!!!!!!!!!!!!!!!!.出现错误提示框' )
def warning_text(self): from selenium.common.exceptions import NoSuchElementException dr = BrowserEngine(self.driver).driver wait = ui.WebDriverWait(dr, 30) wait.until(lambda dr: dr.find_element_by_xpath( '//*[@id="#modals-container"]/div/div/div[2]/div/h2').is_displayed( )) #error_mes = dr.find_element_by_xpath('/html/body/div[19]/div/h2') try: error_mes = dr.find_element_by_xpath( '//*[@id="#modals-container"]/div/div/div[2]/div/h2') Logger().info('!!!!!!!!!Test pass.提示框出现!!!!!!!!!') except Exception as e: BasePage.get_warning_img(self) raise ValueError( "!!!!!!!!!!!!!!!!!!!!!!Test fail!!!!!!!!!!!!!!!!!!!!!!!!!!!.提示框未出现", format(e)) else: Logger().info(error_mes.text) print('test pass') return True
def init_app(app): try: # 设置utf-8环境 reload(sys) sys.setdefaultencoding('utf-8') # 初始化本地日志模块 cur_path = os.path.dirname(os.path.abspath(__file__)) log_path = os.path.join(cur_path, 'log') if not Logger.init(log_path, log_level=config.APP_LOG_LEVEL, log_name='compare.log'): sys.exit(1) # 初始化阿里日志服务 if not AliLog.init(to_ali_log=config.APP_LOG_TO_ALIYUN, log_level=config.APP_LOG_LEVEL, log_project=config.APP_LOG_PROJECT, log_store=config.APP_LOG_STORE, topic=config.APP_LOG_TOPIC, endpoint=config.END_POINT, access_key_id=config.ACCESS_KEY_ID, access_key=config.ACCESS_KEY): sys.exit(1) # 初始化Tools Tools.set_logger(AliLog) # 设置gunicorn日志级别 app.logger.setLevel(config.APP_LOG_LEVEL) app.logger.addHandler(Logger.logger) # 设置requests日志级别 logging.getLogger("requests").setLevel(logging.WARNING) # 初始化mysql # cur_dir = os.path.dirname(os.path.abspath(__file__)) # ini_dir = os.path.join(cur_dir, 'public') if not pymysql_init(logger=AliLog, hosts=config.mysql_ip_list): AliLog.error(msg="mysql_init failed") return False # 启动比价处理模块 handler = CompareServer(AliLog, redis_handler) gevent.spawn(handler.run) return True except: # 启动失败退出进程 msg = traceback.format_exc() print(msg) Logger.logger.error(msg) sys.exit(1)
def login(self): config = configparser.ConfigParser() file_path = os.path.dirname( os.path.abspath('.')) + '/config/config.ini' config.read(file_path) username = config.get("userInfo", "username") Logger().info("username is %s." % username) password = config.get("userInfo", "password") Logger().info("The password is: %s" % password) self.driver.find_element_by_xpath( '/html/body/div/div[1]/div[2]/div[2]/form/input[1]').send_keys( username) Logger().info('输入账户AlphaGo') self.driver.find_element_by_xpath( '/html/body/div/div[1]/div[2]/div[2]/form/input[2]').send_keys( password) Logger().info('输入密码123456') self.driver.find_element_by_xpath( '/html/body/div/div[1]/div[2]/div[2]/button').click() Logger().info("点击登录") time.sleep(1)
def findtext(self, selector, name): try: el = self.find_element(selector) dr = BrowserEngine(self.driver).driver # wait = ui.WebDriverWait(dr, 3) #等待搜索结果显示3秒 # wait.until(lambda dr: dr.find_element_by_xpath('//*[@id="ioper_03_1_b"]/div/div[1]/div[2]/label[1]/span[2]').is_displayed()) text = el.text if text == name: Logger().info('搜索字段为' + text) else: raise ValueError('搜索字段不匹配!!!!!!!!!!!!!!!!!!') except Exception: raise ValueError('无搜索结果')
def click_close_result(self): #calculate_text = 'x=>/html/body/div[3]/p[1]' #result_text = 'x=>/html/body/div[12]/div[2]/div/div[1]/p/span' dr = BrowserEngine(self.driver).driver wait = ui.WebDriverWait(dr, 120) wait.until(lambda dr: dr.find_element_by_xpath( '//*[@id="#modals-container"]/div/div/div[2]/div').is_displayed()) try: dr.find_element_by_xpath( '//*[@id="#modals-container"]/div/div/div[2]/div/div[1]/span' ).is_displayed() #计算结果框: link = dr.find_element_by_xpath( '//*[@id="#modals-container"]/div/div/div[2]/div/div[1]/span' ) #关闭 BasePage.get_windows_img(self) calculate_text = dr.find_element_by_xpath( '//*[@id="#modals-container"]/div/div/div[2]/div/div[2]/table/thead/tr[1]/th' ) #计算时间 result_text = dr.find_element_by_xpath( '//*[@id="app"]/div[2]/div[2]/p') #结果条数 link.click() #dr.execute_script('$(arguments[0]).click()', link) Logger().info('%s' % calculate_text.text) Logger().info('%s' % result_text.text) Logger().info('关闭计算结果') except Exception as e: if dr.find_element_by_xpath( '//*[@id="#modals-container"]/div/div/div[2]/div/div/span' ).is_displayed(): reason_text = dr.find_element_by_xpath( '//*[@id="#modals-container"]/div/div/div[2]/div/div/p') Logger().info('%s' % reason_text.text) dr.find_element_by_xpath( '//*[@id="#modals-container"]/div/div/div[2]/div/div/span' ).click() raise ValueError('计算结果为0!!!!!!!!!!!!!!!!!!') else: raise ValueError('time out!!!!!!!!!!!!!!!!!!')
def setUpClass(cls): cls.config = ReadConfig() # 读取配置 cls.logger = Logger.get_logger() vcc = cls.config.get_userinfo("vcc").split(",") username = cls.config.get_userinfo("username").split(",") password = cls.config.get_userinfo("password") d = Driver("Chrome") cls.driver = d.selenium_driver() t = LoginTestPage(cls.driver) t.open() t.login_test(vcc[1], username[1], password) # 登录,切换token cls.work_config_page = WorkConfigPage(cls.driver) # 进入职场配置页面 cls.work_config_page.enter_work_config_page()
def zero_text(self): from selenium.common.exceptions import NoSuchElementException dr = BrowserEngine(self.driver).driver wait = ui.WebDriverWait(dr, 120) wait.until(lambda dr: dr.find_element_by_xpath( '//*[@id="#modals-container"]/div/div/div[2]/div/div/span'). is_displayed()) #error_mes = dr.find_element_by_xpath('/html/body/div[19]/div/h2') try: error_mes = dr.find_element_by_xpath( '//*[@id="#modals-container"]/div/div/div[2]/div/div/p') Logger().info('!!!!!!!!!Test pass.计算结果为0!!!!!!!!!') link = dr.find_element_by_xpath( '//*[@id="#modals-container"]/div/div/div[2]/div/div/span' ) #关闭 link.click() except Exception as e: BasePage.get_warning_img(self) raise ValueError( "!!!!!!!!!!!!!!!!!!!!!!Test fail!!!!!!!!!!!!!!!!!!!!!!!!!!!", format(e))
def click_run(self): self.click(self.run) Logger().info('点击运行')
def __init__(self, selenium_driver): self.config = ReadConfig() self.logger = Logger.get_logger() self.driver = selenium_driver self.base_url = self.config.get_url("test_url")
def double_model5(self): time.sleep(1) self.click_twice(self.common_model5) Logger().info('进入碰撞求同模型5(连接其它组件)')
def double_model4(self): time.sleep(1) self.click_twice(self.common_model4) Logger().info('进入碰撞求同模型4(连接碰撞求同组件)')
def double_model3(self): time.sleep(1) self.click_twice(self.common_model3) Logger().info('进入碰撞求同模型3(多数据源)')
def double_model1(self): time.sleep(1) self.click_twice(self.common_model1) Logger().info('进入碰撞求同模型1(单数据源)')
def click_close_warning(self): self.click(self.close_warning) time.sleep(1) Logger().info('关闭提示框')