//action 动作 //functionDic 方法字典 //dataDic 数据字典 private String getPyCode(Action action, Dictionary <String, String> functionDic, Dictionary <String, String> dataDic, int indent) { String code = ""; int index = action.index; bool isRun = action.isRun; String note = this.getIndentSpace(TextProcessor.indent) + " #步骤" + index + "生成的代码\r\n"; //+this.getIndentSpace(TextProcessor.indent) + " print('步骤" + index + "')"; if (isRun) { //创建驱动 if (action.GetType().FullName.EndsWith("CreateDriverAction")) { String browserName = ((CreateDriverAction)action).browserName; String driverName = ((CreateDriverAction)action).driverName; code = this.getIndentSpace(TextProcessor.indent) + " if self.getPar('LASTSTEP'):"; code += "\r\n"; code += this.getIndentSpace(TextProcessor.indent) + " self.driver = DriverInit(self.logger).getWebDriver('" + browserName + "')"; code += "\r\n"; code += this.getIndentSpace(TextProcessor.indent) + " pP=PageOfPublic(self.pars,self.driver,self.logger)"; } /* * * //创建Appium驱动 * else if (action.GetType().FullName.EndsWith("CreateAppiumDriverAction")) * { * String deviceName = ((CreateAppiumDriverAction)action).deviceName; * String appPackageAndAppActivity = ((CreateAppiumDriverAction)action).appPackageAndAppActivity; * String[] tmp = appPackageAndAppActivity.Split( new String[] {","},StringSplitOptions.None ); * String appPackage = tmp[0]; * String appActivity = tmp[1]; * code = " this.appiumDriver = new Init().getAppiumDriver(\"" + deviceName + "\", \"" + appPackage + "\", \"" + appActivity + "\");" + "\r\n this.appPackage=\"" + appPackage + "\";"; * } * * //创建IOS驱动 * else if (action.GetType().FullName.EndsWith("CreateIOSDriverAction")) * { * String macIP = ((CreateIOSDriverAction)action).macIP; * String appPath = ((CreateIOSDriverAction)action).appPath; * code = " this.appiumDriver = new Init().getIOSDriver(\""+ macIP +"\",\""+ appPath +"\");"; * * } * */ // 打开网址 else if (action.GetType().FullName.EndsWith("GoAction")) { String driverName = ((GoAction)action).driverName; String url = ((GoAction)action).url; code = this.getIndentSpace(TextProcessor.indent) + " if self.getPar('LASTSTEP'):"; code += "\r\n"; code += this.getIndentSpace(TextProcessor.indent) + " self.openURL('" + url + "')"; } //设置参数 else if (action.GetType().FullName.EndsWith("SetParameterAction")) { String parName = ((SetParameterAction)action).parName; String parValue = ((SetParameterAction)action).parValue; code = this.getIndentSpace(TextProcessor.indent) + " self.setPar(\"" + parName + "\", \"" + parValue + "\")"; } //执行方法 else if (action.GetType().FullName.EndsWith("ExecuteFunctionAction")) { String driverName = ((ExecuteFunctionAction)action).driverName; String functionName = ((ExecuteFunctionAction)action).functionName; if (functionDic.Keys.Contains(functionName)) { String classAndFunction = functionDic[functionName]; code = this.getIndentSpace(TextProcessor.indent) + " " + classAndFunction.Replace(".", "(self.pars, self.driver, self.logger).") + "()"; } else { code = this.getIndentSpace(TextProcessor.indent) + " print('没有找到配置的方法')"; } } //读取外部配置 else if (action.GetType().FullName.EndsWith("ReadExternalConfAction")) { String excelPath = ((ReadExternalConfAction)action).excelPath; if (":" != excelPath.Substring(1, 1)) { String absPath = new TextProcessor().getAbsPath(); excelPath = absPath + "\\files\\" + excelPath; } ExcelProcessor excelProcessor = new ExcelProcessor(); List <List <String> > lists = excelProcessor.readfirststr(excelPath); Dictionary <String, String> dic = excelProcessor.strList2Dic(lists); //code = this.getIndentSpace(TextProcessor.indent) + " print('步骤" + index + "')"; foreach (KeyValuePair <String, String> kv in dic) { String k = kv.Key; String v = kv.Value; code += this.getIndentSpace(TextProcessor.indent) + " self.setPar(\"" + k + "\", \"" + v + "\")"; code += "\r\n"; } } //单步方法 else if (action.GetType().FullName.EndsWith("OneStepAction")) { String oneStepAction = ((OneStepAction)action).oneStepName; String oneStepPars = ((OneStepAction)action).oneStepPars; code = this.getIndentSpace(TextProcessor.indent) + " pP.oneStep('" + oneStepAction + "','''" + oneStepPars + "''')"; } //暂停 else if (action.GetType().FullName.EndsWith("SleepAction")) { int timeLong = ((SleepAction)action).timeLong; code = this.getIndentSpace(TextProcessor.indent) + " time.sleep(" + timeLong + ")"; } //调用其他用例 else if (action.GetType().FullName.EndsWith("ExeOtherCaseAction")) { String casePath = ((ExeOtherCaseAction)action).casePath; String caseFullPath = new TextProcessor().getAbsPath() + "\\" + casePath; //////Console.WriteLine(casePath); List <Action> list = new ExcelProcessor().readActionListFromExcelFile(caseFullPath); code = this.getIndentSpace(TextProcessor.indent) + " ################################################################"; code += "\r\n\r\n"; code += this.getIndentSpace(TextProcessor.indent) + " #执行用例[" + casePath + "]"; code += "\r\n\r\n"; code += this.getIndentSpace(TextProcessor.indent) + " ################################################################"; code += "\r\n"; code += this.getIndentSpace(TextProcessor.indent) + " self.logger.appendContent('\\r\\n################################################################\\r\\n执行用例[" + casePath + "]\\r\\n################################################################')"; code += "\r\n"; code += this.getPyCodes(list, functionDic, dataDic, TextProcessor.indent); } //退出 else if (action.GetType().FullName.EndsWith("QuitAction")) { String driverName = ((QuitAction)action).driverName; code = this.getIndentSpace(TextProcessor.indent) + " if None!=self.driver:"; code += "\r\n"; code += this.getIndentSpace(TextProcessor.indent) + " self.driver.quit()"; code += "\r\n"; code += this.getIndentSpace(TextProcessor.indent) + " self.logger.appendContent(\"退出\")"; } //注释 else if (action.GetType().FullName.EndsWith("QuitAction")) { String annotationText = ((AnnotationAction)action).annotationText; code = this.getIndentSpace(TextProcessor.indent) + " #" + annotationText; } //Python代码 else if (action.GetType().FullName.EndsWith("PythonCodeAction")) { String pcode = ((PythonCodeAction)action).pcode; code = this.getIndentSpace(TextProcessor.indent) + " " + pcode; } //{ else if (action.GetType().FullName.EndsWith("AddIndentAction")) { TextProcessor.indent++; code = this.getIndentSpace(TextProcessor.indent) + " #开始缩进"; } //{ else if (action.GetType().FullName.EndsWith("RecoverIndentAction")) { code += this.getIndentSpace(TextProcessor.indent) + " #恢复缩进"; TextProcessor.indent--; } return(note + "\r\n" + replaceVars(code, dataDic) + "\r\n"); } else { return(""); } /* * * String fun = executeObject.fun; * String code = ""; * * if ("设置参数" == fun) * { * String par1 = executeObject.par1; * String par2 = executeObject.par2; * code = " pars.put(\"" + par1 + "\", \"" + par2 + "\");"; * } * else if ("打开网址" == fun || "转到网址" == fun) * { * String par1 = executeObject.par1; * * code = " openURL(\"" + par1 + "\");"; * * } * else if ("暂停" == fun) * { * String par1 = executeObject.par1; * code = " sleep("+par1+");"; * * } * * else * { * if (functionDic.Keys.Contains(fun)) * { * String classAndFunction = functionDic[fun]; * code = " " + classAndFunction; * * } * else * { * code = ""; * } * * * } * return replaceVars(code, dataDic); */ }