diff options
| author | dongxiaoyan <[email protected]> | 2020-04-01 12:42:05 +0800 |
|---|---|---|
| committer | dongxiaoyan <[email protected]> | 2020-04-01 12:42:05 +0800 |
| commit | acc676857bd85512f344a8d06aa1ae8846e7c0db (patch) | |
| tree | f2a7e19139d7f763e699ae10a997184c168fed76 /02-Keyword | |
Diffstat (limited to '02-Keyword')
26 files changed, 3029 insertions, 0 deletions
diff --git a/02-Keyword/tsg_adc/FileOperation.robot b/02-Keyword/tsg_adc/FileOperation.robot new file mode 100644 index 0000000..bbf23cb --- /dev/null +++ b/02-Keyword/tsg_adc/FileOperation.robot @@ -0,0 +1,25 @@ +*** Settings *** +Library String +Library json +Library OperatingSystem +Library RequestsLibrary +Library Selenium2Library +Library Collections +Library FileLibrary +Resource ../../02-Keyword/tsg_bfapi/Common.robot +Resource ../../03-Variable/BifangApiVariable.txt + + +*** Keywords *** +insert_policyId_to_file + [Arguments] ${key} ${policyId} ${objectids} + ${dict} Create Dictionary policyId=${policyId} objectId=${objectids} + ${json} json.Dumps ${dict} + Alter Dict ${path}/03-Variable/AllFlowCaseVariable.txt ${key} ${json} + +insert_time_to_file + [Arguments] ${key} ${starttime} ${endtime} + ${value} json.Loads ${${key}} + ${dict} Create Dictionary policyId=${value}[policyId] objectId=${value}[objectId] starttime=${starttime} endtime=${endtime} + ${json} json.Dumps ${dict} + Alter Dict ${path}/03-Variable/AllFlowCaseVariable.txt ${key} ${json} diff --git a/02-Keyword/tsg_adc/SystemCommand.robot b/02-Keyword/tsg_adc/SystemCommand.robot new file mode 100644 index 0000000..78a4744 --- /dev/null +++ b/02-Keyword/tsg_adc/SystemCommand.robot @@ -0,0 +1,35 @@ +*** Settings *** +Library OperatingSystem +Library Selenium2Library +Library RequestsLibrary +Library Collections + +*** Keywords *** +SystemCommands + [Arguments] ${commandstr} ${stringlist} + log toSystemCommand_SystemCommandTest + ${commandreturn} OperatingSystem.Run ${commandstr} + ${listlenth}= Get Length ${stringlist} + FOR ${var} IN RANGE ${listlenth} + #log ${var} + Should Contain ${commandreturn} ${stringlist}[${var}] + END + ${rescode} Set Variable 200 + log ${rescode} + [Return] ${rescode} + +SystemCommand + [Arguments] ${commandstr} @{stringlist} + log dxytest${commandstr} + ${commandreturn} OperatingSystem.Run ${commandstr} + #nslookup -d www.jd.com + log ${commandreturn} + FOR ${var} IN @{stringlist} + log dxytest + log ${var} + Should Contain ${commandreturn} ${var} + END + #Should Contain ${commandreturn} ${qatype} + ${rescode} Set Variable 200 + log ${rescode} + [Return] ${rescode} diff --git a/02-Keyword/tsg_bfapi/ApiRequest.robot b/02-Keyword/tsg_bfapi/ApiRequest.robot new file mode 100644 index 0000000..6226ba8 --- /dev/null +++ b/02-Keyword/tsg_bfapi/ApiRequest.robot @@ -0,0 +1,50 @@ +*** Settings *** +Library Collections +Library RequestsLibrary +Resource ../../03-Variable/BifangApiVariable.txt + +*** Keywords *** +Post-Request + [Arguments] ${url} ${data} + ${header} Create Dictionary Content-Type=application/json Authorization=${token} + Create Session api http://${host}:${port}/${version} headers=${header} + ${remoteResponse} Post Request api ${url} data=${data} headers=${header} + ${response} to json ${remoteResponse.content} + Should Be Equal As Strings ${remoteResponse.status_code} 200 + [Return] ${response} + +Get-Request + [Arguments] ${url} + ${header} Create Dictionary Content-Type=application/json Authorization=${token} + Create Session api http://${host}:${port}/${version} headers=${header} + ${remoteResponse} Get Request api ${url} headers=${header} + ${response} to json ${remoteResponse.content} + Should Be Equal As Strings ${remoteResponse.status_code} 200 + [Return] ${response} + +Delete-Request + [Arguments] ${url} ${data} + ${header} Create Dictionary Content-Type=application/json Authorization=${token} + Create Session api http://${host}:${port}/${version} headers=${header} + ${remoteResponse} Delete Request api ${url} data=${data} headers=${header} + ${response} to json ${remoteResponse.content} + Should Be Equal As Strings ${remoteResponse.status_code} 200 + [Return] ${response} + +UpFilePostRequest + [Arguments] ${url} ${data} ${files} ${fileDesc} + ${header} Set To Dictionary ${fileDesc} Authorization=${token} + Create Session api http://${host}:${port}/${version} headers=${header} + ${remoteResponse} Post Request api ${url} data=${data} files=${files} headers=${header} + ${response} to json ${remoteResponse.content} + Should Be Equal As Strings ${remoteResponse.status_code} 200 + [Return] ${response} + +UpFilePutRequest + [Arguments] ${url} ${data} ${files} ${fileDesc} + ${header} Set To Dictionary ${fileDesc} Authorization=${token} + Create Session api http://${host}:${port}/${version} headers=${header} + ${remoteResponse} Put Request api ${url} params=${data} files=${files} headers=${header} + ${response} to json ${remoteResponse.content} + Should Be Equal As Strings ${remoteResponse.status_code} 200 + [Return] ${response} diff --git a/02-Keyword/tsg_bfapi/Common.robot b/02-Keyword/tsg_bfapi/Common.robot new file mode 100644 index 0000000..cf68670 --- /dev/null +++ b/02-Keyword/tsg_bfapi/Common.robot @@ -0,0 +1,36 @@ +*** Settings *** +Resource ../../03-Variable/BifangApiVariable.txt +Library REST http://${host}:${port} +Library Collections +Library RequestsLibrary + +*** Keywords *** +BasePostRequest + [Arguments] ${apistr} ${body} + Set Headers {"Authorization":"${token}","Content-Type":"application/json"} + &{httpResponse} Post ${apistr} ${body} + Output response body + Object response body + #Integer $.code 200 + #Array $.data.policyList + ${response} Set Variable ${httpResponse.body} + [Return] ${response} +BaseDeleteRequest + [Arguments] ${requestUri} ${data} + ${headers} set variable {"Authorization":"${token}","Content-Type":"application/json"} + create session api http://${host}:${port} ${headers} + ${response}= Delete Request api ${requestUri} data=${data} + log return data =${response} + Should Be Equal As Strings ${response.status_code} 200 + ${response} to json ${response.content} + [Return] ${response} + +BaseEditRequest + [Arguments] ${requestUri} ${data} + ${headers} set variable {"Authorization":"${token}","Content-Type":"application/json"} + create session api http://${host}:${port} ${headers} + ${response}= Put Request api ${requestUri} data=${data} + log return data =${response} + Should Be Equal As Strings ${response.status_code} 200 + ${response} to json ${response.content} + [Return] ${response} diff --git a/02-Keyword/tsg_bfapi/LogSchema.robot b/02-Keyword/tsg_bfapi/LogSchema.robot new file mode 100644 index 0000000..3abac5e --- /dev/null +++ b/02-Keyword/tsg_bfapi/LogSchema.robot @@ -0,0 +1,33 @@ +*** Settings *** +Resource ../../03-Variable/BifangApiVariable.txt +Library RequestsLibrary +Library OperatingSystem +Library Collections +Library string +Library REST http://${host}:${port} + +*** Keywords *** +GetLogCondition + [Arguments] ${logname} ${startTime} ${endTime} ${client_ip} ${policy_id} + Set Headers {"Content-Type":"application/x-www-form-urlencoded","Authorization":"${token}"} + &{LogSchemaResponse}= GET /v1/log/schema?logType=${logname} + log ${logname} + Output Schema response body + Object response body + #Integer $.code 200 + log ${LogSchemaResponse.body['data']} + ${field} Evaluate json.dumps(eval(str(${LogSchemaResponse.body['data']['fields']}))) json + log ${field} + ${pageSize} Set Variable 30 + ${pageNo} Set Variable 1 + ${condition} Set Variable [{"value":["${startTime}","${endTime}"],"symbol":"between","field":"common_recv_time","type":"timestamp"}] + ${logCondition} Set Variable {"pageNo":${pageNo},"pageSize":${pageSize},"logType":"${logname}","fields":${field},"start_common_recv_time":"${startTime}","end_common_recv_time":"${endTime}","conditions":${condition} ,"common_client_ips":"${client_ip}","common_policy_ids":"${policy_id}"} + log this time query condition:${logCondition} + [Return] ${logCondition} + +PostRemoteData + [Arguments] ${url} ${data} + ${header} Create Dictionary Content-Type=application/json Authorization=${token} + Create Session api http://${host}:${port}/${version} headers=${header} + ${remoteResponse} Post Request api ${url} data=${data} headers=${header} + [Return] ${remoteResponse} diff --git a/02-Keyword/tsg_bfapi/LogVariable.robot b/02-Keyword/tsg_bfapi/LogVariable.robot new file mode 100644 index 0000000..62bbc83 --- /dev/null +++ b/02-Keyword/tsg_bfapi/LogVariable.robot @@ -0,0 +1,32 @@ +*** Settings *** +Resource ../../03-Variable/BifangApiVariable.txt +Resource LogSchema.robot +Library REST http://${host}:${port}/${version} +Library RequestsLibrary +Library OperatingSystem +Library Collections +Library string + +*** Keywords *** +GetLogList + [Arguments] ${logType} ${startTime} ${endTime} ${client_ip} ${policy_id} ${parmkey} ${parmvalue} + ${logCondition} GetLogCondition ${logType} ${startTime} ${endTime} ${client_ip} ${policy_id} + log ${logCondition} + ${LogListResponse} PostRemoteData /log/list ${logCondition} + Should Be Equal As Strings ${LogListResponse.status_code} 200 + ${returnData} To Json ${LogListResponse.content} + ${responseCode} Get From Dictionary ${returnData} code + Log ${responseCode} + Should Be Equal ${responseCode} ${200} security_event_log \ \ test query list failed + log this time request security_event_log \ table logRecord \ : ${LogListResponse.content} + ${a} Set Variable this time request security_event_log \ table logRecord \ : ${LogListResponse.content} + log ${a} + ${log} Set Variable ${LogListResponse.json()}[data][list] + FOR ${logs} IN ${log} + log ${logs} + END + log %%%%%%%%%%%%%%%%%%%%%%%%${logs} + Should Contain ${logs}"" ${client_ip} + Should Contain ${logs}"" ${policy_id} + Should Contain ${logs}"" ${parmkey} + Should Contain ${logs}"${parmkey}" ${parmvalue}
\ No newline at end of file diff --git a/02-Keyword/tsg_bfapi/LoginLogout.robot b/02-Keyword/tsg_bfapi/LoginLogout.robot new file mode 100644 index 0000000..e1ec2a0 --- /dev/null +++ b/02-Keyword/tsg_bfapi/LoginLogout.robot @@ -0,0 +1,84 @@ +*** Settings *** +Resource ../../03-Variable/BifangApiVariable.txt +Library REST http://${host}:${port} +Library Collections +Library SSHLibrary +Resource PolicyObject.robot +Resource ../tsg_ui/Logout/Logout.robot +Resource ../tsg_ui/Login/Login.robot +Resource Tag.robot + +*** Keywords *** +Login + #[Arguments] ${username} ${password} ${authmode} ${authCode} ${ldapId} + # 毕方接口用户名密码 + GET /v1/user/encryptpwd?password=${password} + Object response body + #OUTPUT response body + #${rescode} Integer $.code + Integer $.code 200 + #log ${rescode} + ${pwd} String $.data.encryptpwd + #log ${pwd} + ${pwdstr} Get From List ${pwd} 0 + #log aaaaaaa + log ${pwdstr} + #log bbb + SET GLOBAL VARIABLE ${encodePassword} ${pwdstr} + #log aaaaaaa + log ${encodePassword} + #log aaaaaaa + #log ${host}:${port} + #getToken################################################################################## + #log ${username} + #log ${pwdstr} + POST /v1/user/login?username=${username}&password=${encodePassword}&authMode=${authmode} + Object response body + #OUTPUT response body + Integer $.code 200 + #${rescodelist} Integer $.code + #${rescode} Get From List ${rescodelist} 0 + ${rescode} Integer $.code + log ${rescode} + ${tokenGlobal} String $.data.token + ${tokenStr} Get From List ${tokenGlobal} 0 + log ${tokenStr} + SET GLOBAL VARIABLE ${token} ${tokenStr} + log ${token} + SET GLOBAL VARIABLE ${headers} {"Contest-Type":"application/json","Authorization":"${token}"} + #Return ${rescode} + +Logout + POST /v1/user/logout headers=${headers} + Object response body + Integer $.code 200 + ${rescode} Integer $.code + #[Return] ${rescode} + +ApiLoginAndAddLocalIP + [Arguments] ${tempparm} + log ApiLoginAndAddLocalIP${tempparm} + loginlogout.Login + #log ********** + Run Keyword If ${addTestClentIPFlag}==1 AddLocalIPObject + log ApiLoginAndAddLocalIP + #ApiAddAutoTagsCase + #[Return] ${rescode} + +ApiLogoutAndDelLocalIP + [Arguments] ${tempparm} + log ApiLogoutAndDelLocalIP${tempparm} + log to_LogoutAndDelLocalIP_LogoutAndDelLocalIP + Run Keyword If ${addTestClentIPFlag}==1 DelLocalIPObject + #ApiDeleteAutoTagsCase + loginlogout.Logout + #[Return] ${rescode} + +CliLogin + Open Connection ${cliHost} + SSHLibrary.Login ${cliUsername} ${cliPassword} + +CliLogout + Close Connection + Log Close connection + #exit
\ No newline at end of file diff --git a/02-Keyword/tsg_bfapi/PolicyObject.robot b/02-Keyword/tsg_bfapi/PolicyObject.robot new file mode 100644 index 0000000..ee87858 --- /dev/null +++ b/02-Keyword/tsg_bfapi/PolicyObject.robot @@ -0,0 +1,111 @@ +*** Settings *** +Resource ../../03-Variable/BifangApiVariable.txt +Library REST http://${host}:${port} +Library Collections +Library RequestsLibrary +Resource Common.robot + +*** Keywords *** +AddLocalIPObject + #创建对象IP + log to_AddLocalIPObject + ${localIP} set variable {"opAction":"add","returnData":1,"objectList":{"objectType":"ip","objectSubType":"endpoint","isValid":1,"isInitialize":0,"isExclusion":0,"objectName":"autotestLocalIPObject_${testClentIP}","objectDesc":"LocalIPObject_${testClentIP}自动化测试机IP","subObjectIds":[],"addItemList":[{"addrType":4,"protocol":0,"direction":0,"isSession":"endpoint","clientIp1":"${testClentIP}","clientIp2":"${testClentIP}","clientIpFormat":"range","clientPortFormat":"range","clientPort1":0,"clientPort2":0,"serverIpFormat":"range","serverIp1":"","serverIp2":"","serverPortFormat":"range","serverPort1":0,"serverPort2":0}],"updateItemList":[],"deleteItemIds":[]}} + ${rescodeip} ${objidip} AddObject ${localIP} + log ${rescodeip} + log LocalIP:${objidip} + SET GLOBAL VARIABLE ${testClentID} ${objidip} + +DelLocalIPObject + log to_DelLocalIPObject + ${response} BaseDeleteRequest /v1/policy/object {"objectIds":[${testClentID}]} + #${response_code} Get From Dictionary ${response} code + Should Be Equal As Strings ${response} {'code': 200, 'msg': 'Success', 'success': True} + SET GLOBAL VARIABLE ${testClentID} ${EMPTY} + +AddObject + [Arguments] ${body} + #addIPobject################################################################################# + ${response} BasePostRequest /v1/policy/object body=${body} + #log ${response} + ${objectId} Set Variable ${response['data']['objectList'][0]['objectId']} + ${rescodeReturn} Set Variable ${response['code']} + [Return] ${rescodeReturn} ${objectId} + +EditObject + [Arguments] @{body} + [Return] ${rescode} ${objectId} + +DeleteObjectbak + [Arguments] ${objectids} + ${body} String {"objectIds":[${objectids}]} + DELETE /v1/policy/object body=${body} headers=${headers} + Object response body + log DeleteObject + log dxytestOUtputstart + Output response body + log dxytestOUtputstart + ${rescode} Integer $.code + ${rescodeReturn} Get From List ${rescode} 0 + [Return] ${rescodeReturn} + +AddPolicy + [Arguments] ${body} + ${response} BasePostRequest /v1/policy/compile body=${body} + #log ${response} + ${policyId} Set Variable ${response['data']['policyList'][0]['policyId']} + ${rescode} Set Variable ${response['code']} + [Return] ${rescode} ${policyId} + +EditPolicy + [Arguments] @{body} + [Return] ${rescode} ${objectId} + +DeletePolicybak + [Arguments] ${policyids} + ${body} String {"policyType":"tsg_security","policyIds":[${policyids}]} + DELETE /v1/policy/compile body=${body} headers=${headers} + Object response body + log DeletePolicy + Output response body + ${rescode} Integer $.code + ${rescodeReturn} Get From List ${rescode} 0 + [Return] ${rescodeReturn} + +DeletePolicy + [Arguments] ${body} + #删除策略 + log toDeletePolicy_DeletePolicyDeletePolicy + ${response} BaseDeleteRequest /v1/policy/compile ${body} + #{"policyType":"tsg_security","policyIds":[${policyids}]} + ${response_code} Get From Dictionary ${response} code + Should Be Equal As Strings ${response_code} 200 + ${response} Convert to String ${response} + Should Be Equal As Strings ${response} {'code': 200, 'msg': 'Success', 'success': True} + +DeleteObject + [Arguments] ${objectids} + #删除对象 + log todeleteobj + ${response} BaseDeleteRequest /v1/policy/object {"objectIds":[${objectids}]} + ${response_code} Get From Dictionary ${response} code + #log aaaaaaaaaa:${response_code} + Should Be Equal As Strings ${response_code} 200 + #Integer ${response_code} 200 + ${response} Convert to String ${response} + Should Be Equal As Strings ${response} {'code': 200, 'msg': 'Success', 'success': True} + +DeletePolicyAndObject + [Arguments] ${policyids} ${objectids} + #删除和对象 + #删除策略 + log toDeletePolicy_DeletePolicyAndObject + ${listlenth}= Get Length ${policyids} + FOR ${var} IN RANGE ${listlenth} + #log dxytest111111 + log ${var} + DeletePolicy ${policyids}[${var}] + #Should Contain ${commandreturn} ${ca} + END + #删除对象 + log todeleteobj_DeletePolicyAndObject + DeleteObject ${objectids} diff --git a/02-Keyword/tsg_bfapi/Tag.robot b/02-Keyword/tsg_bfapi/Tag.robot new file mode 100644 index 0000000..6d150ce --- /dev/null +++ b/02-Keyword/tsg_bfapi/Tag.robot @@ -0,0 +1,41 @@ +*** Settings *** +Resource ../../03-Variable/BifangApiVariable.txt +Library REST http://${host}:${port} +Library Collections +Library RequestsLibrary +Resource Common.robot + +*** Keywords *** +ApiAddTags + [Arguments] ${body} + #ApiAddTags################################################################################# + ${response} BasePostRequest /v1/customize/tags body=${body} + #log ${response} + ${tagId} Set Variable ${response['data']['tagList'][0]['id']} + ${rescodeReturn} Set Variable ${response['code']} + [Return] ${rescodeReturn} ${objectId} + +ApiEditTags + [Arguments] @{body} + [Return] ${rescode} ${objectId} + +ApiDeleteTags + [Arguments] ${body} + #删除策略 + log toApiDeleteTags + ${response} BaseDeleteRequest /v1/customize/tags ${body} + ${response_code} Get From Dictionary ${response} code + Should Be Equal As Strings ${response_code} 200 + ${response} Convert to String ${response} + Should Be Equal As Strings ${response} {'code': 200, 'msg': 'Success', 'success': True} + +ApiAddAutoTagsCase + #ApiAddTags################################################################################# + ${rescode} ${tag_id} ApiAddTags {"tagList":{"id":0,"isValid":1,"opTime":1585652133641,"opUser":0,"optionType":2,"pid":0,"tagId":"","tagColor":"rgb(21, 101, 192)","tags":[{"tagId":"","tagName":"ApiAutoTest","key":1585652121540}],"tagList":[],"tagCategory":"AutoTest"},"returnData":0} + log ${tag_id} + SET GLOBAL VARIABLE ${userTagIds} ${tag_id} + +ApiDeleteAutoTagsCase + #ApiAddTags################################################################################# + ApiDeleteTags {"ids":[${userTagIds}]} +
\ No newline at end of file diff --git a/02-Keyword/tsg_bfapi/policy_file_interface/FunctionalKeywords.robot b/02-Keyword/tsg_bfapi/policy_file_interface/FunctionalKeywords.robot new file mode 100644 index 0000000..fc27065 --- /dev/null +++ b/02-Keyword/tsg_bfapi/policy_file_interface/FunctionalKeywords.robot @@ -0,0 +1,192 @@ +*** Settings *** +Library String +Library OperatingSystem +Library RequestsLibrary +Library Selenium2Library +Library Collections +Resource ../../../02-Keyword/tsg-bf-api/common.txt +Resource ../../../02-Keyword/tsg-bf-api/apirequest.txt +Resource ../../../03-Variable/bifangapivariable.txt + + +*** Keywords *** +QueryPolicyFile + [Arguments] ${url} ${suffix} + ${content_quary} Get-Request ${url}?isValid=1&${suffix} + ${msg_quary} Set Variable ${content_quary['msg']} + ${length} Get Length ${content_quary['data']['list']} + Should Be True ${length}>0 + Log quary operation:${msg_quary} + Log data:${content_quary['data']['list']} + +QueryPolicyFile2 + [Arguments] ${url} ${suffix} + ${content_quary} Get-Request ${url}?${suffix} + ${msg_quary} Set Variable ${content_quary['msg']} + ${length} Get Length ${content_quary['data']['list']} + Should Be True ${length}>0 + Log quary operation:${msg_quary} + Log data:${content_quary['data']['list']} + ${certId} Set Variable ${content_quary['data']['list'][0]['certId']} + [Return] ${certId} + +CreatePolicyFile + [Documentation] + ... 必传参数:url、filePath(文件路径)、fileName(文件名称) + ... 可选参数:header(不传时使用默认值) + [Arguments] ${url} ${filePath} ${fileName} @{header} + ${suffix} Generate Random String + ${certName} Catenate SEPARATOR=_ test ${suffix} + ${header} Run Keyword If ${header}==[] Set Variable {"isValid":1,"opAction":"add","certName":"${certName}","certId":null,"returnData":1} + ... ELSE Get From List ${header} 0 + + ${binFile} Evaluate open(r"${path}/${filePath}${fileName}",'rb') + ${fileDict} Create Dictionary file=${binFile} + ${requestData} Create Dictionary name="file" filename="${fileName}" Content-Type=application/octet-stream + ${fileDesc} Create Dictionary File-Desc=${header} + ${content} UpFilePostRequest ${url} ${requestData} ${fileDict} ${fileDesc} + ${msg} Set Variable ${content['msg']} + ${list} Set Variable ${content['data']['list']} + ${cerId} Set Variable ${list[0]['certId']} + ${certName} Set Variable ${list[0]['certName']} + ${response} Create Dictionary msg=${msg} certId=${cerId} certName=${certName} + Log add operation:${msg} + Log cerId:${cerId} + [Return] ${response} + +CreatePolicyFile2 + [Documentation] + ... 必传参数:url、filePath(文件路径)、fileName(文件名称)、flag(模块标识) + ... 可选参数:header(不传时使用默认值) + [Arguments] ${url} ${filePath} ${fileName} ${flag} @{header} + ${suffix} Generate Random String + ${randomName} Catenate SEPARATOR=_ test ${suffix} + ${value} Run Keyword If '${flag}'=='resPages' Set Variable {"isValid":1,"format":"html","opAction":"add","profileName":"${randomName}","profileId":null,"returnData":1} + ... ELSE IF '${flag}'=='hijack' Set Variable {"isValid":1,"contentType":"text/html","opAction":"add","profileName":"${randomName}","contentName":"${fileName}","profileId":null,"returnData":1} + ... ELSE IF '${flag}'=='insert' Set Variable {"isValid":1,"format":"js","insertOn":"after_page_load","opAction":"add","profileName":"${randomName}","profileId":null,"returnData":1} + + ${header} Run Keyword If ${header}==[] Set Variable ${value} + ... ELSE Get From List ${header} 0 + + ${binFile} Evaluate open(r"${path}/${filePath}${fileName}",'rb') + ${fileDict} Create Dictionary file=${binFile} + ${requestData} Create Dictionary name="file" filename="${fileName}" Content-Type=application/octet-stream + ${suffix} Generate Random String + ${profileName} Catenate SEPARATOR=_ test ${suffix} + ${fileDesc} Create Dictionary File-Desc=${header} + ${content} UpFilePostRequest ${url} ${requestData} ${fileDict} ${fileDesc} + ${msg} Set Variable ${content['msg']} + ${list} Set Variable ${content['data']['list']} + ${profileId} Set Variable ${list[0]['profileId']} + ${profileName} Set Variable ${list[0]['profileName']} + ${response} Create Dictionary msg=${msg} profileId=${profileId} profileName=${profileName} + Log add operation:${msg} + Log profileId:${profileId} + [Return] ${response} + +CreatePolicyFile3 + [Documentation] + ... 必传参数:url + ... 可选参数:data(不传时使用默认值) + [Arguments] ${url} @{data} + ${suffix} Generate Random String + ${profileName} Catenate SEPARATOR=_ test ${suffix} + ${data} Run Keyword If ${data}==[] Set Variable {"opAction":"add","returnData":1,"trafficMirrorList":[{"profileName":"${profileName}","addrType":"mac","isValid":1,"addrArray":["00:A1:B2:06:C3:29"]}]} + ... ELSE Get From List ${data} 0 + + ${content} Post-Request ${url} ${data} + ${msg} Set Variable ${content['msg']} + ${list} Set Variable ${content['data']['list']} + ${profileId} Set Variable ${list[0]['profileId']} + ${profileName} Set Variable ${list[0]['profileName']} + ${response} Create Dictionary msg=${msg} profileId=${profileId} profileName=${profileName} + Log add operation:${msg} + Log profileId:${profileId} + [Return] ${response} + +CreatePolicyMutipartFile + [Documentation] + ... 必传参数:url、filePath(文件路径)、pubFileName(证书文件名)、priFileName(私钥文件名) + ... 可选参数:header(不传时使用默认值) + [Arguments] ${url} ${filePath} ${pubFileName} ${priFileName} @{header} + ${suffix} Generate Random String + ${certName} Catenate SEPARATOR=_ test ${suffix} + ${header} Run Keyword If ${header}==[] Set Variable {"isValid":1,"opAction":"add","returnData":1,"keyringName":"${certName}","keyringType":"root","reissueExpiryHour":0,"crl":"null","publicKeyAlgo":"rsa1024","keyringId":null,"includeRoot":0} + ... ELSE Get From List ${header} 0 + + ${pubFile} Evaluate open(r"${path}/${filePath}${pubFileName}",'rb') + ${priFile} Evaluate open(r"${path}/${filePath}${priFileName}",'rb') + ${fileDict} Create Dictionary publicFile ${pubFile} + Set To Dictionary ${fileDict} privateFile ${priFile} + ${requestData} Create Dictionary name="publicFile" filename="${pubFileName}" Content-Type=application/octet-stream + Set To Dictionary ${requestData} name privateFile + Set To Dictionary ${requestData} filename ${priFileName} + Set To Dictionary ${requestData} Content-Type application/octet-stream + ${fileDesc} Create Dictionary File-Desc=${header} + + ${content} UpFilePostRequest ${url} ${requestData} ${fileDict} ${fileDesc} + ${msg} Set Variable ${content['msg']} + ${list} Set Variable ${content['data']['list']} + ${keyringId} Set Variable ${list[0]['keyringId']} + ${keyringName} Set Variable ${list[0]['keyringName']} + ${response} Create Dictionary msg=${msg} keyringId=${keyringId} keyringName=${keyringName} + Log add operation:${msg} + Log keyringId:${keyringId} + [Return] ${response} + +UpdatePolicyMutipartFile + [Arguments] ${url} ${filePath} ${pubFileName} ${priFileName} ${reqHeader} + ${pubFile} Evaluate open(r"${path}/${filePath}${pubFileName}",'rb') + ${priFile} Evaluate open(r"${path}/${filePath}${priFileName}",'rb') + ${fileDict} Create Dictionary publicFile ${pubFile} + Set To Dictionary ${fileDict} privateFile ${priFile} + + ${requestData} Create Dictionary name="publicFile" filename="${pubFileName}" Content-Type=application/octet-stream + Set To Dictionary ${requestData} name privateFile + Set To Dictionary ${requestData} filename ${priFileName} + Set To Dictionary ${requestData} Content-Type application/octet-stream + + ${fileDesc} Create Dictionary File-Desc ${reqHeader} + ${content} UpFilePutRequest ${url} ${requestData} ${fileDict} ${fileDesc} + ${msg} Set Variable ${content['msg']} + Log update operation:${msg} + Log update condition:${reqHeader} + +UpdatePolicyFile + [Arguments] ${url} ${filePath} ${fileName} ${reqHeader} + ${binFile} Evaluate open(r"${path}/${filePath}${fileName}",'rb') + ${fileDict} Create Dictionary file=${binFile} + ${requestData} Create Dictionary name="file" filename="${fileName}" Content-Type=application/octet-stream + ${fileDesc} Create Dictionary File-Desc=${reqHeader} + ${content} UpFilePutRequest ${url} ${requestData} ${fileDict} ${fileDesc} + ${msg} Set Variable ${content['msg']} + Log update operation:${msg} + Log update condition:${reqHeader} + +UpdatePolicyFile2 + [Arguments] ${url} ${data} + ${header} Create Dictionary Content-Type=application/json Authorization=${token} + Create Session api http://${host}:${port}/${version} headers=${header} + ${remoteResponse} Put Request api ${url} data=${data} headers=${header} + ${response} to json ${remoteResponse.content} + Should Be Equal As Strings ${remoteResponse.status_code} 200 + ${msg} Set Variable ${response['msg']} + Log update operation:${msg} + Log update condition:${data} + +DeletePolicyFile + [Arguments] ${url} ${data} + ${content} Delete-Request ${url} ${data} + ${msg} Set Variable ${content['msg']} + Log delete operation:${msg} + Log delete condition:${data} + +TeardownDelete + [Arguments] ${url} ${key} ${value} + ${ids} Create List ${value} + ${data} Create Dictionary ${key}=${ids} + ${content} Delete-Request ${url} ${data} + ${msg} Set Variable ${content['msg']} + Log teardown operation:${msg} + Log teardown condition:${data} + diff --git a/02-Keyword/tsg_cli/Interface.robot b/02-Keyword/tsg_cli/Interface.robot new file mode 100644 index 0000000..9fd6237 --- /dev/null +++ b/02-Keyword/tsg_cli/Interface.robot @@ -0,0 +1,281 @@ +*** Settings *** +Library json +Library String +Library DateTime +Library SSHLibrary +Library Collections +Library RequestsLibrary +Library Selenium2Library +Resource ../../03-Variable/bifangapivariable.txt + +*** Variables *** +${Tsg_Policy} tsg_policy +${Tsg_Policy_Object} tsg_policy_object +${Tsg_Record} tsg_record +${Tsg_Show} tsg_show +${Tsg_Passwd} tsg_passwd +${Tsg_Help_file_Path} cli_files/tsg_help.txt + +*** Keywords *** +Get_Policy_Object1 + [Arguments] ${type} + ${dict} Tsg_Policy_Query ${type} ${None} ${None} ${None} ${True} + Should Be True ${dict}[data][total] > 1 + [Return] ${dict}[data][list][1] + +Get_Policy_Object2 + [Arguments] ${type} + ${dict} Tsg_Policy_Query ${type} ${None} ${None} ${None} ${True} + [Return] ${dict}[data][list][0] + +Get_Policy_Object3 + [Arguments] ${type} + ${obj} Get_Policy_Object1 ${type} + ${commandType1} Run Keyword If ${obj}[isValid]==0 Set Variable enable + ... ELSE Set Variable disable + ${commandType2} Run Keyword If ${obj}[isValid]==1 Set Variable enable + ... ELSE Set Variable disable + Set To Dictionary ${obj} commandType1=${commandType1} commandType2=${commandType2} + [Return] ${obj} + +Get_Policy_Object4 + [Arguments] ${type} + ${dict} Tsg_Policy_Object_Query ${type} ${None} ${True} + [Return] ${dict}[data][list][0] + +Get_File_Name + [Arguments] ${ObjectType} ${FileType} + ${date} Get Current Date + ${date_stamp} Convert Date ${date} epoch + ${time} Evaluate int(round(${date_stamp} * 1000)) + ${filename} Set Variable ${ObjectType}_export_${time}.${FileType} + [Return] ${filename} + +Get_Import_Info + [Arguments] ${type} + ${date} Get Current Date + ${date_stamp} Convert Date ${date} epoch + ${time} Evaluate int(round(${date_stamp} * 1000)) + ${name} Set Variable ${type}_import_${time} + [Return] ${name} + +Tsg_Policy_Query + # ${type}:必传 @{param}:非必传,最大参数数量为四位。依次顺序为'policyId'、'policyName'、'policyDesc'和'allFlag',中间存在为空参数可用'${None}'占位 + [Arguments] ${type} @{params} + ${str} Evaluate '${Tsg_Policy} --query --policyType %s ' % ('${type}') + ${str} Run Keyword If '${params}[0]' != '${None}' Evaluate '${str}--policyId %s ' % ('${params}[0]') + ... ELSE Set Variable ${str} + ${str} Run Keyword If '${params}[1]' != '${None}' Evaluate '${str}--policyName "%s" ' % ('${params}[1]') + ... ELSE Set Variable ${str} + ${str} Run Keyword If '${params}[2]' != '${None}' Evaluate '${str}--policyDesc "%s" ' % ('${params}[2]') + ... ELSE Set Variable ${str} + ${str} Run Keyword If ${params}[3] == ${True} Evaluate '${str}--all ' + ... ELSE Set Variable ${str} + Log ${str} + ${r} Run1 ${str} + [Return] ${r} + +Tsg_Policy_EnDisable + # ${id}:必传 ${type}:必传 ${commandType}:必传'enable'|'disable' + [Arguments] ${id} ${type} ${commandType} + ${str} Evaluate '${Tsg_Policy} --%s --policyId %s --policyType %s' % ('${commandType}', '${id}', '${type}') + Run2 ${str} + +Tsg_Policy_Object_Query + # @{param}:非必传,最大参数数量为三位。依次顺序为'objectName'、'objectType'和'allFlag',中间存在为空参数可用'${None}'占位 + [Arguments] @{params} + ${str} Set Variable ${Tsg_Policy_Object} --query + ${str} Run Keyword If '${params}[0]' != '${None}' Evaluate '${str} --objectType "%s" ' % ('${params}[0]') + ... ELSE Set Variable ${str} + ${str} Run Keyword If '${params}[1]' != '${None}' Evaluate '${str} --objectName "%s" ' % ('${params}[1]') + ... ELSE Set Variable ${str} + ${str} Run Keyword If ${params}[2] == ${True} Evaluate '${str} --all ' + ... ELSE Set Variable ${str} + ${r} Run1 ${str} + [Return] ${r} + +Tsg_Policy_Object_Import + # ${type}:必传 ${file}:必传 @{params}:非必传,含义'objectName' + [Arguments] ${type} ${file} @{params} + ${newFile} Replace String ${file} export import + ${command} Set Variable head -n 2 files/${file} > files/${newFile} + Run4 ${command} + ${str} Evaluate '${Tsg_Policy_Object} --import --objectType %s --file files/%s ' % ('${type}','${newFile}') + ${str} Run Keyword If '${params}[0]' != '${None}' Evaluate '${str}--objectName %s ' % ('${params}[0]') + ... ELSE Set Variable ${str} + Run3 ${str} + +Tsg_Policy_Object_Export + # ${type}:必传 ${file}:必传 @{params}:非必传,含义'exportFormat'(txt|csv) + [Arguments] ${type} ${file} @{params} + ${str} Evaluate '${Tsg_Policy_Object} --export --objectType %s --file files/%s ' % ('${type}','${file}') + ${str} Run Keyword If '${params}[0]' != '${None}' Evaluate '${str}--exportFormat %s ' % ('${params}[0]') + ... ELSE Set Variable ${str} + Run3 ${str} + +Tsg_Record_UserList + ${str} Set Variable ${Tsg_Record} --userlist + Run6 ${str} ${cliUsername} + +Tsg_Record_Query + ${str} Evaluate '${Tsg_Record} --username %s ' % ('${cliUsername}') + ${param} Set Variable ${Tsg_Record} --userlist + Run6 ${str} ${param} + +Clear_Test_Data + ${str} Set Variable rm -rf /home/${cliUsername}/files/* + Run4 ${str} + +Tsg_Help_Keyword + ${r} Run5 tsg_help + ${data} Evaluate open(r"${path}/${Tsg_Help_file_Path}",'rb').read() + Should Be Equal As Strings ${r} ${data} + +Tsg_Diagnose_Keyword + Write Until Expected Output tsg_diagnose\n Success ${timeout} ${timeout} + +Tsg_Show_Chassis-ip + ${str} Set Variable ${Tsg_Show} --chassis-ip + ${r} Run5 ${str} + Should Contain ${r} Name + Should Contain ${r} IP + +Tsg_Show_Chassis-port + ${str} Set Variable ${Tsg_Show} --chassis-port + ${r} Run5 ${str} + Should Contain ${r} PortId + Should Contain ${r} Type + Should Contain ${r} Function + Should Contain ${r} Description + +Tsg_Show_Interface + ${str} Set Variable ${Tsg_Show} --interface + ${r} Run5 ${str} + Should Contain ${r} time + Should Contain ${r} PhyRXBits + Should Contain ${r} PhyRXFrame + Should Contain ${r} PhyTXBits + Should Contain ${r} PhyTXFrame + Should Contain ${r} flow_type + Should Contain ${r} sled + +Tsg_Show_APP + ${str} Set Variable ${Tsg_Show} --app + ${r} Run5 ${str} + Should Contain ${r} time + Should Contain ${r} RxBits + Should Contain ${r} RxPkts + Should Contain ${r} TxBits + Should Contain ${r} TxPkts + Should Contain ${r} device + Should Contain ${r} flow_type + Should Contain ${r} sled + +Tsg_Show_Protocol + ${str} Set Variable ${Tsg_Show} --protocol + ${r} Run5 ${str} + Should Contain ${r} time + Should Contain ${r} Eth_Bit + Should Contain ${r} Ipv4_Bit + Should Contain ${r} Ipv6_Bit + Should Contain ${r} Tcp_Bit + Should Contain ${r} Udp_Bit + Should Contain ${r} device + Should Contain ${r} flow_type + Should Contain ${r} sled + +Tsg_Show_Stream + ${str} Set Variable ${Tsg_Show} --stream + ${r} Run5 ${str} + Should Contain ${r} time + Should Contain ${r} Tcp_Link_New + Should Contain ${r} Tcp_Concurrent + Should Contain ${r} Tcp_Link_Double + Should Contain ${r} device + Should Contain ${r} flow_type + Should Contain ${r} sled + +Tsg_Show_Intercept + ${str} Set Variable ${Tsg_Show} --intercept + ${r} Run5 ${str} + Should Contain ${r} time + Should Contain ${r} intcp_rdy_bits + Should Contain ${r} intcp_rdy_stm + Should Contain ${r} intcped_bits + Should Contain ${r} intcped_stm + Should Contain ${r} sled + +Tsg_Passwd_Keyword + ${str1} Evaluate '${Tsg_Passwd} --password %s' % ('${cliPassword}x') + Run7 ${str1} + ${str2} Evaluate '${Tsg_Passwd} --password %s --username %s' % ('${cliPassword}y','${cliUsername}') + Run7 ${str2} + ${str3} Evaluate '${Tsg_Passwd} --password %s' % ('${cliPassword}') + Run7 ${str3} + +Run1 + [Arguments] ${command} + Write ${command} + ${r} Read delay=10s + ${dict} Run Keyword If '${cliUsername}'!='tsgadmin' Run1_A ${r} + ... ELSE Run1_B ${r} + [Return] ${dict} + +Run1_A + [Arguments] ${r} + Should Contain ${r} Permission denied + ${dict} To Json {"data":{"list":[{"policyDesc":"","policyId":0,"policyName":"","policyType":"","objectType":"","objectName":"","isValid":0},{"policyDesc":"","policyId":0,"policyName":"","policyType":"","isValid":0}],"total":2},"msg":"Success"} + [Return] ${dict} + +Run1_B + [Arguments] ${r} + Should Contain ${r} Success + ${str} Replace String ${r} ${\n} - + ${str} Replace String ${str} ' \\' + ${index} Evaluate '${str}'.rindex('}') + 1 + ${len} Convert To Integer ${index} + ${json} Evaluate '${str}'[0:${len}] + ${dict} json.Loads ${json} + Should Be True ${dict}[data][total] > 0 + [Return] ${dict} + +Run2 + [Arguments] ${command} + Write ${command} + ${r} Read delay=10s + Run Keyword If '${cliUsername}'!='tsgadmin' Should Contain ${r} Permission denied + ... ELSE Should Contain ${r} Success + +Run3 + [Arguments] ${command} + ${flag} Run Keyword If '${cliUsername}'!='tsgadmin' Set Variable Permission denied + ... ELSE Set Variable Success + Write Until Expected Output ${command}\n ${flag} ${timeout} ${timeout} + +Run4 + [Arguments] ${command} + Write ${command} + ${r} Read delay=10s + Run Keyword If '${cliUsername}'!='tsgadmin' Should Contain Any ${r} Permission denied -bash: + ... ELSE Should Not Contain ${r} head: + +Run5 + [Arguments] ${command} + Write ${command} + ${r} Read delay=10s + Should Not Be Empty ${r} + [Return] ${r} + +Run6 + [Arguments] ${command} ${param} + Write ${command} + ${r} Read delay=10s + Should Not Be Empty ${r} + Run Keyword If '${cliUsername}'!='tsgadmin' Should Contain ${r} Permission denied + ... ELSE Should Contain ${r} ${param} + +Run7 + [Arguments] ${command} + Write ${command} + ${r} Read delay=10s + Should Contain ${r} Success diff --git a/02-Keyword/tsg_common/LoginAndLogoutTypeSwitch.robot b/02-Keyword/tsg_common/LoginAndLogoutTypeSwitch.robot new file mode 100644 index 0000000..84617aa --- /dev/null +++ b/02-Keyword/tsg_common/LoginAndLogoutTypeSwitch.robot @@ -0,0 +1,18 @@ +*** Settings *** +Resource ../../03-Variable/BifangApiVariable.txt +Library REST http://${host}:${port} +Library Collections +Resource ../tsg_bfapi/LoginLogout.robot +Resource ../tsg_ui/Logout/Logout.robot +Resource ../tsg_ui/Login/Login.robot + +*** Keywords *** +LoginAndAddLocalIP + Run Keyword If '${loginType}' == 'api' ApiLoginAndAddLocalIP aa + ... ELSE IF '${loginType}' == 'cli' CliLogin + ... ELSE UiLoginAndAaddLocalIP bb + +LogoutAndDelLocalIP + Run Keyword If '${loginType}' == 'api' ApiLogoutAndDelLocalIP aa + ... ELSE IF '${loginType}' == 'cli' CliLogout + ... ELSE UiLogoutAndDelLocalIP bb
\ No newline at end of file diff --git a/02-Keyword/tsg_common/StmpHandle.robot b/02-Keyword/tsg_common/StmpHandle.robot new file mode 100644 index 0000000..161b240 --- /dev/null +++ b/02-Keyword/tsg_common/StmpHandle.robot @@ -0,0 +1,43 @@ +*** Settings *** +Library Smtp3Library + +*** Keywords *** +EmailLogin + [Arguments] ${SURL} ${SPORT} ${SUSER} ${SPWD} + [Documentation] [${SURL}:邮箱发送服务器,比如:腾讯企业邮箱:smtp.exmail.qq.com;qq邮箱:smtp.qq.com;163邮箱:smtp.163.com等] + ... [${SPORT}:邮箱发送服务器的端口,无论是哪种邮箱的,一般是25,该值可灵活填充] + ... [${SUSER}:邮箱登入用户名,无需转码] + ... [${SPWD}:登入密码。对于腾讯企业邮箱,密码无变化;qq邮箱需要第三方授权码登入;163邮箱需要第三方授权码登入] + ... [关键字返回值:这是163邮箱的返回结果:不同邮箱可能不太一样(235, b'Authentication successful')] + [Tags] function email send + Prepare Connection ${SURL} ${SPORT} ${SUSER} ${SPWD} + Connect + Ehlo + ${result} logins + run keyword if "${result}"=="fail" log ${result} + ... ELSE Quit Close Connection + #Quit + #Close Connection + [Return] ${result} # 返回登入结果 + +EmailSendFull + [Arguments] ${SURL} ${SPORT} ${SUSER} ${PWD} ${SUBJ} ${FROM} ${to} ${cc} ${bcc} ${Sbody} ${attach} + [Documentation] [注意:所有参数都是必填参数] + ... [${SURL}:邮箱发送服务器,比如:smtp.qq.com] + ... [${SPORT}:邮箱服务器,写法如:25] + ... [${SUSER}:登入名,如:[email protected]] + ... [${PWD}:登入密码,不同类型的邮箱登入密码需求不一样,具体看EmailLogin关键字对于密码的要求] + ... [${SUBJ}:主题,如:111111] + ... [${FROM} :发送者,例如:[email protected]] + ... [ ${to} :接收者,可以写多个,写法例如:["[email protected]","[email protected]"] ,若写单个接收者["[email protected]"] ] + ... [${cc}:抄送者。可以写多个,写法同${to}] + ... [${bcc}:密送者。可以写多个,写法同${to}] + ... [${Sbody}:邮件正文,写法如:1234teacher] + ... [${attach}:附件文本,可以写多个,注意本地是否有这些文件。写法如:["1.txt","E://abc.txt"]] + ... [关键字返回值:发送成功会返回{},空的内容] + [Tags] function email send + Prepare Connection ${SURL} ${SPORT} ${SUSER} ${PWD} + ${send_result} Send Message With All Parameters ${SURL} ${SUSER} ${PWD} ${SUBJ} ${FROM} ${to} ${cc} ${bcc} ${Sbody} ${attach} + Comment Send Message + Close Connection + [Return] ${send_result} # 返回发送邮件结果 diff --git a/02-Keyword/tsg_common/测试结果入库关键字参数描述及示例.docx b/02-Keyword/tsg_common/测试结果入库关键字参数描述及示例.docx Binary files differnew file mode 100644 index 0000000..05fc63a --- /dev/null +++ b/02-Keyword/tsg_common/测试结果入库关键字参数描述及示例.docx diff --git a/02-Keyword/tsg_ui/FTPHandle.robot b/02-Keyword/tsg_ui/FTPHandle.robot new file mode 100644 index 0000000..42cc2c4 --- /dev/null +++ b/02-Keyword/tsg_ui/FTPHandle.robot @@ -0,0 +1,94 @@ +*** Settings *** +Library FtpLibrary + +*** Keywords *** +checkFTPRecvReport + [Arguments] ${fURL} ${fport} ${fuser} ${fpwd} ${fpath} ${filename} + [Documentation] [fURL写法例如:192.168.1.1] + ... [fport写法例如:21] + ... [fuser写法例如:wxs] + ... [fpwd要写ftp服务器的密码,写法例如:111111] + ... [fpath要写ftp服务器的绝对路径,写法例如:/a/b/20200110/] + ... [filename,是指系统下发report时对report起的名字,在这里判断方法是ftp文件名称是否包含report名称,所以在TSG系统上下发report时应尽量不要用重名,以免判断失误,写法例如:长安街] + ... [注意:该关键字无返回值,他是等同于一个用例,若字符串不包含则表示用例执行失败,会有相关信息打印] + [Tags] function FTP reportResult + Ftp Connect ${fURL} ${fuser} ${fpwd} ${fport} + sleep 1 + cwd ${fpath} + sleep 1 + @{dirname} Dir Names + sleep 1 + ${Strdirname} Evaluate ''.join(@{dirname}) + Should Contain ${Strdirname} ${filename} + ftp close + +FTPDownloadFile + [Arguments] ${fURL} ${fport} ${fuser} ${fpwd} ${SrcPath} ${SrcName} ${dstPathName} + [Documentation] [fUrl是FTP服务器地址,例如:192.168.1.1] + ... [fport是ftp服务器的端口号,例如:21] + ... [fuser是用户名,例如:wxs] + ... [fpwd是密码,例如:wqqq] + ... [SrcPath是ftp服务器上的要下载的文件的路径,文件包名称必须写,例如:/a/b/] + ... [SrcName是ftp服务器上的要下载的文件名称,文件名称不要太复杂(不要包含符号),否则无法识别,例如:teacher王.txt] + ... [dstPathName是下载到本地时的本地路径名(+名称),名称可不写,建议不写,下载到本地的名称就会与FTP上文件一样,写法:1. D:/rfftppy/tmp/ 2.D:/rfftppy/tmp/b.txt \] + [Tags] function FTP downloadFile + Ftp Connect ${fURL} ${fuser} ${fpwd} ${fport} + cwd ${SrcPath} + sleep 1 + download file ${SrcName} ${dstPathName} + ftp close + +FTPUploadFileToTest + [Arguments] ${fURL} ${fport} ${fuser} ${fpwd} ${SrcPathName} + [Documentation] [fURL写法例如:192.168.1.1] + ... [fport写法例如:21] + ... [fuser写法例如:wxs] + ... [fpwd要写ftp服务器的密码,写法例如:111111] + ... [SrcPathName,本地待上传的文件的路径名,例如:E:/qqq.txt] + ... [注意:该关键字默认上传到ftp服务器的/test目录下,若test目录不存在会自己创建] + [Tags] function FTP uploadFileToTest + ${intest} Set Variable test + Run Keyword If '${fport}'!='21' Run Keyword Log 请注意:FTP服务器端口号不是21(默认端口号),请继续登入 + ... AND Log 登入中... + Ftp Connect ${fURL} ${fuser} ${fpwd} ${fport} + @{dirnames} Dir Names + ${result} checkListContainStirng ${intest} @{dirnames} + log ${SrcPathName} + Run Keyword If '${result}'=='${intest}' log /test目录存在 + ... ELSE Run Keyword log /test目录不存在,已创建并上传文件 + ... AND Mkd ${intest} + Cwd ${intest} + Comment @{aa} Dir Names + Upload File ${SrcPathName} + +checkListContainStirng + [Arguments] ${str} @{strlist} + FOR ${value} IN @{strlist} + Log ${value} + Return From Keyword If '${value}'=='${str}' ${value} + END + Return From Keyword ${value} + +FTPUploadFile + [Arguments] ${fURL} ${fport} ${fuser} ${fpwd} ${SrcPathName} + [Documentation] [fURL写法例如:192.168.1.1] + ... [fport写法例如:21] + ... [fuser写法例如:wxs] + ... [fpwd要写ftp服务器的密码,写法例如:111111] + ... [SrcPathName,本地待上传的文件的路径名,例如:E:/qqq.txt] + ... [注意:该关键字默认上传到ftp服务器的root目录下] + [Tags] function FTP uploadFile + Run Keyword If '${fport}'!='21' Run Keyword Log 请注意:FTP服务器端口号不是21(默认端口号),请继续登入 + ... AND Log 登入中... + Ftp Connect ${fURL} ${fuser} ${fpwd} ${fport} + Upload File ${SrcPathName} + +FTPLogin + [Arguments] ${fURL} ${fport} ${fuser} ${fpwd} + [Documentation] [fURL写法例如:192.168.1.1] + ... [fport写法例如:21] + ... [fuser写法例如:wxs] + ... [fpwd要写ftp服务器的密码,写法例如:111111] + [Tags] function FTP login + Ftp Connect ${fURL} ${fuser} ${fpwd} ${fport} + Get Welcome diff --git a/02-Keyword/tsg_ui/Log/Log.robot b/02-Keyword/tsg_ui/Log/Log.robot new file mode 100644 index 0000000..d4cdc4c --- /dev/null +++ b/02-Keyword/tsg_ui/Log/Log.robot @@ -0,0 +1,259 @@ +*** Settings *** +Documentation 写用例的话,直接调用关键字,输入关键字参数的值。 +... 例如:想查询时间为2020-02-24 00:00:00 到2020-02-25 00:00:00 \ 的policy id为2409的log +... 1、创建一个case, +... 2、输入关键字Security Event Logs +... 3、输入必填参数的值(根据关键字里的要求填入相对应的值) +... 必填参数:${time1} | ${time2} | ${type1} | ${value} | ${element1} +... ${time1}:为开始时间 \ ${time2}:为结束时间 +... ${type1}:为要查询的类型 +... ${value}:要查询的内容 +... ${element1}:想要获取信息的定位元素 +... +... 4、直接运行该case +Library Selenium2Library +Library ExcelLibrary + +*** Keywords *** +click + [Arguments] ${element} + Click Element ${element} + +input + [Arguments] ${element} ${text} + Input Text ${element} ${text} + +ui-login + Open Browser http://192.168.40.120 Chrome + input xpath=//*[@id="app"]/div/div[2]/div/div[2]/div/input lyf + input xpath=//*[@id="app"]/div/div[2]/div/div[3]/div/input 111111 + click xpath=//*[@id="app"]/div/div[2]/div/div[4]/button + +ui-logout + Close Browser + +Security Event Logs + [Arguments] ${time1} ${time2} ${type1} ${value} ${element1} + #打开浏览器 + #TSG-登录 lyf 111111 + Sleep 1 + click id=children2 #点击一级目录log + Sleep 1 + click id=sidebarLog_SecurityEventLogs #点击二级目录Security Event Logs + sleep 1 + ${result} ${text1} Run Keyword And Ignore Error text #获取弹出框文本,进行异常处理 + run keyword if '${result}'=='Pass' run keywords click xpath=/html/body/div/div/div[3]/button + sleep 1 + Clear Element Text xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div/input[1] #清空输入框 + sleep 1 + input xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div/input[1] ${time1} #在输入框里输入时间 \ 格式为2020-02-24 18:21:01 + sleep 1 + Clear Element Text xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div/input[2] #清空输入框 + sleep 1 + input xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div/input[2] ${time2} #在输入框里输入时间 \ 格式为2020-02-24 18:21:01 + sleep 1 + click xpath=/html/body/div/div[2]/button[2] + sleep 1 + click id=one-input + sleep 1 + click ${type1} #选择要查询的类型 + sleep 1 + input id=sreach_input ${value} #在输入框输入查询数据 + sleep 1 + click xpath=//*[@id="app"]/div/div[3]/div/div/div[1]/div/div[2] #点击搜索按钮 + sleep 2 + ${result1} ${text2} Run Keyword And Ignore Error text #获取弹出框文本,进行异常处理 + run keyword if '${result}'=='Pass' run keywords click xpath=/html/body/div/div/div[3]/button + sleep 1 + ${text3} Get text xpath=//*[@id="app"]/div/div[3]/div/div/div[7]/div/ul/li[1]/span + # Evaluate ${text3}.replace('','Total: ') + ${t} Convert To Integer ${text3} + ${a1} Evaluate ${t}%20 #求余 + ${t1}= Evaluate math.ceil(${t}/20) math #求整(如果有余数会得出整数加1) + ${t2} Evaluate ${t1}+1 + : FOR ${j} IN RANGE 1 ${t2} + \ ForSElog ${element1} ${j} ${t1} ${a1} + \ click xpath=//*[@id="zhumingmingPageRight"]/i + #关闭浏览器 + +text + sleep 2 + ${text1} Get Text xpath=/html/body/div/div/div[3]/button/span + +ForSElog + [Arguments] ${element} ${j} ${t1} ${a1} + : FOR ${i} IN RANGE 1 21 + \ log ${i} + \ click xpath=//*[@id="ly-table1-listcontent"]/div/div[3]/table/tbody/tr[${i}]/td[3] + \ sleep 2 + \ ${text4} Get text ${element} + \ log ${text4} + \ click id=securityEvent_logIdClose + \ run keyword if '${j}'=='${t1}' log yes + \ IF1 ${i} ${a1} + +IF1 + [Arguments] ${i} ${a2} + run keyword if '${i}'=='${a2}' Exit For Loop + +Proxy Event Logs + [Arguments] ${time1} ${time2} ${type1} ${value} ${element1} + #打开浏览器 + #TSG-登录 lyf 111111 + Sleep 1 + click id=children2 #点击一级目录log + Sleep 1 + click id=sidebarLog_ProxyEventLogs #点击二级目录ProxyEventLogs + sleep 1 + ${result} ${text1} Run Keyword And Ignore Error text1 #获取弹出框文本,进行异常处理 + run keyword if '${result}'=='Pass' run keywords click xpath=/html/body/div/div/div[3]/button + #click xpath=/html/body/div/div/div[3]/button + Clear Element Text id=d #清空输入框 + sleep 1 + input id=d ${time1} #在输入框里输入时间 \ 格式为2020-02-24 18:21:01 + sleep 1 + Clear Element Text id=a #清空输入框 + sleep 1 + input id=a ${time2} #在输入框里输入时间 \ 格式为2020-02-24 18:21:01 + sleep 1 + click xpath=/html/body/div/div[2]/button[2] #点击时间组件的ok按钮 + sleep 1 + click id=one-input #点击查询输入框 + sleep 1 + click ${type1} #选择要查询的类型 + sleep 1 + input id=sreach_input ${value} #在输入框输入查询数据 + sleep 1 + click xpath=//*[@id="app"]/div/div[3]/div/div/div[1]/div/div[2] #点击搜索按钮 + sleep 2 + ${result1} ${text2} Run Keyword And Ignore Error text1 #获取弹出框文本,进行异常处理 + run keyword if '${result}'=='Pass' run keywords click xpath=/html/body/div/div/div[3]/button + sleep 1 + ${text3} Get text xpath=//*[@id="app"]/div/div[3]/div/div/div[7]/div/ul/li[1]/span #获取列表数量 + # Evaluate ${text3}.replace('','Total: ') + ${t} Convert To Integer ${text3} #text转换为int + ${a1} Evaluate ${t}%20 #求余 + ${t1}= Evaluate math.ceil(${t}/20) math #求整(如果有余数会得出整数加1) + ${t2} Evaluate ${t1}+1 + : FOR ${j} IN RANGE 1 ${t2} + ForPElog ${element1} ${j} ${t1} ${a1} + click xpath=//*[@id="zhumingmingPageRight"]/i #点击翻页 + #关闭浏览器 + +text1 + sleep 2 + ${text1} Get Text xpath=/html/body/div[3]/div/div[3]/button/span + +SE logs-Export + [Arguments] ${time1} ${time2} ${type1} ${value} ${file} + #打开浏览器 + #TSG-登录 lyf 111111 + Sleep 1 + click id=children2 #点击一级目录log + Sleep 1 + click id=sidebarLog_SecurityEventLogs #点击二级目录Security Event Logs + sleep 1 + ${result} ${text1} Run Keyword And Ignore Error text #获取弹出框文本,进行异常处理 + run keyword if '${result}'=='Pass' run keywords click xpath=/html/body/div/div/div[3]/button + #click xpath=/html/body/div[2]/div/div[3]/button + Clear Element Text xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div/input[1] #清空输入框 + sleep 1 + input xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div/input[1] ${time1} #在输入框里输入时间 \ 格式为2020-02-24 18:21:01 + sleep 1 + Clear Element Text xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div/input[2] #清空输入框 + sleep 1 + input xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div/input[2] ${time2} #在输入框里输入时间 \ 格式为2020-02-24 18:21:01 + sleep 1 + click xpath=/html/body/div/div[2]/button[2] + sleep 1 + click id=one-input + sleep 1 + click ${type1} #选择要查询的类型 + sleep 1 + input id=sreach_input ${value} #在输入框输入查询数据 + sleep 1 + click xpath=//*[@id="app"]/div/div[3]/div/div/div[1]/div/div[2] #点击搜索按钮 + sleep 2 + ${result1} ${text2} Run Keyword And Ignore Error text #获取弹出框文本,进行异常处理 + run keyword if '${result}'=='Pass' ui-logout else log 有数据 + sleep 1 + ${text3} Get text xpath=//*[@id="app"]/div/div[3]/div/div/div[7]/div/ul/li[1]/span + ${t} Convert To Integer ${text3} + click xpath=//*[@id="log_securityEventExport"]/i + sleep 20 + Open Excel ${file} #打开Excel表 + sleep 2 + ${row} Get Row Count Sheet1 #获取Excel表的行数 + Should Be Equal As Numbers ${row} ${t} #断言 \ 获取到的log列表数量和获取到的Excel表的行数对比 + +PE Logs-Export + +Session Records + [Arguments] ${time1} ${time2} ${type1} ${value} ${element1} + #打开浏览器 + #TSG-登录 lyf 111111 + Sleep 1 + click id=children2 #点击一级目录log + Sleep 1 + click id=sidebarLog_SesssionRecords #点击二级目录Session Records + sleep 1 + ${result} ${text1} Run Keyword And Ignore Error text #获取弹出框文本,进行异常处理 + run keyword if '${result}'=='Pass' run keywords click xpath=/html/body/div/div/div[3]/button + # xpath=/html/body/div[2]/div/div[3]/button + Clear Element Text xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div/input[1] #清空输入框 + sleep 1 + input xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div/input[1] ${time1} #在输入框里输入时间 \ 格式为2020-02-24 18:21:01 + sleep 1 + Clear Element Text xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div/input[2] #清空输入框 + sleep 1 + input xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div/input[2] ${time2} #在输入框里输入时间 \ 格式为2020-02-24 18:21:01 + sleep 1 + click xpath=/html/body/div/div[2]/button[2] + sleep 1 + ${result} ${text1} Run Keyword And Ignore Error text #获取弹出框文本,进行异常处理 + run keyword if '${result}'=='Pass' run keywords click xpath=/html/body/div/div/div[3]/button + click id=one-input + sleep 1 + click ${type1} #选择要查询的类型 + sleep 1 + input id=sreach_input ${value} #在输入框输入查询数据 + sleep 1 + click xpath=//*[@id="app"]/div/div[3]/div/div/div[1]/div/div[2] #点击搜索按钮 + sleep 2 + ${result1} ${text2} Run Keyword And Ignore Error text #获取弹出框文本,进行异常处理 + run keyword if '${result}'=='Pass' run keywords click xpath=/html/body/div/div/div[3]/button + sleep 1 + ${text3} Get text xpath=//*[@id="app"]/div/div[3]/div/div/div[6]/div/ul/li[1]/span + # Evaluate ${text3}.replace('','Total: ') + ${t} Convert To Integer ${text3} + ${a1} Evaluate ${t}%20 #求余 + ${t1}= Evaluate math.ceil(${t}/20) math #求整(如果有余数会得出整数加1) + ${t2} Evaluate ${t1}+1 + : FOR ${j} IN RANGE 1 ${t2} + ForSR ${element1} ${j} ${t1} ${a1} + click xpath=//*[@id="zhumingmingPageRight"]/i + #关闭浏览器 + +ForPElog + [Arguments] ${element} ${j} ${t1} ${a1} + : FOR ${i} IN RANGE 1 21 + \ log ${i} + \ click xpath=//*[@id="ly-table1-listcontent"]/div/div[3]/table/tbody/tr[${i}]/td[3] + \ sleep 2 + \ ${text4} Get text ${element} + \ log ${text4} + \ click id=proxyEvent_logIdClose + \ run keyword if '${j}'=='${t1}' log yes + \ IF1 ${i} ${a1} + +ForSR + [Arguments] ${element} ${j} ${t1} ${a1} + : FOR ${i} IN RANGE 1 21 + \ log ${i} + \ click xpath=//*[@id="ly-table1-listcontent"]/div/div[3]/table/tbody/tr[${i}]/td[3] + \ sleep 2 + \ ${text4} Get text ${element} + \ log ${text4} + \ click id=sessionRecords_logIdClose + \ run keyword if '${j}'=='${t1}' log yes + \ IF1 ${i} ${a1} diff --git a/02-Keyword/tsg_ui/Login/Login.robot b/02-Keyword/tsg_ui/Login/Login.robot new file mode 100644 index 0000000..e91f39f --- /dev/null +++ b/02-Keyword/tsg_ui/Login/Login.robot @@ -0,0 +1,26 @@ +*** Settings *** +Library Selenium2Library +Resource ../../../03-Variable/BifangApiVariable.txt +Library Selenium2Library +Resource ../Objects/Objects.robot +Resource ../Objects/ObjectPages.robot + +*** Keywords *** +Login + Open Browser http://${host}/#/login ${browserType} + Maximize Browser Window + input text xpath=//*[@id="app"]/div/div[2]/div/div[2]/div/input ${username} + input text xpath=//*[@id="app"]/div/div[2]/div/div[3]/div/input ${password} + Click button id=login + +AddLocalIp + ${obj1} create dictionary type=Ip name=LocahIPName ipads=${ipType} ipclient=masks ipclienttext1=${testClentIP} ipclienttext2=${ipMask} + CreatePage ${obj1}[type] ${obj1}[name] ipads=${obj1}[ipads] ipclient=${obj1}[ipclient] ipclienttext1=${obj1}[ipclienttext1] ipclienttext2=${obj1}[ipclienttext2] + set global variable ${LocahIPName} ${obj1}[name] + +UiLoginAndAaddLocalIP + [Arguments] ${tempParm} + log UiLoginAndAaddLocalIP${tempParm} + Login.Login + Run Keyword If ${addTestClentIPFlag}==1 AddLocalIp + log UiLoginAndAaddLocalIP:${LocahIPName} diff --git a/02-Keyword/tsg_ui/Logout/Logout.robot b/02-Keyword/tsg_ui/Logout/Logout.robot new file mode 100644 index 0000000..f4ea7f1 --- /dev/null +++ b/02-Keyword/tsg_ui/Logout/Logout.robot @@ -0,0 +1,17 @@ +*** Settings *** +Library Selenium2Library +Resource ../Objects/ObjectPages.robot + +*** Keywords *** +Logout + Mouse Hover xpath=//*[@id="app"]/div/div[1]/div[2]/div/span/div/span + sleep 0.5 + click element xpath=//div[@class='SignOut'] + sleep 2 + Close All Browsers + +UiLogoutAndDelLocalIP + [Arguments] ${tempParm} + log UiLogoutAndDelLocalIP${tempParm} + Objects.DeletePage ${LocahIPName} + Logout.Logout diff --git a/02-Keyword/tsg_ui/Menu.robot b/02-Keyword/tsg_ui/Menu.robot new file mode 100644 index 0000000..08e8a54 --- /dev/null +++ b/02-Keyword/tsg_ui/Menu.robot @@ -0,0 +1,23 @@ +*** Settings *** +Library Selenium2Library + +*** Keywords *** +Menu + [Arguments] ${menuOne} ${menuTwo} + Wait Until Element Is Enabled id=routerEvent0 + # 一级菜单 + ${dict} create dictionary dashboard=routerEvent0 policy&objects=children1 log=children2 report=children3 device=children4 settings=children5 administartion=children6 + # 二级菜单 + ${policy&objects} create dictionary Security Policy=sidebarObjects_ProxyInterception Proxy Policy=sidebarObjects_ProxyManipulation Objects=sidebarObjects_Objects Schedules=sidebarObjects_Schedule Tags=sidebarObjects_Tags + ${log} create dictionary Security Event Logs=sidebarLog_SecurityEventLogs Proxy Event Logs=sidebarLog_ProxyEventLogs Session Records=sidebarLog_SesssionRecords Radius Logs=sidebarLog_RadiusLogs + # 遍历一级菜单 + FOR ${list} ${num} IN ENUMERATE @{dict} + run keyword if "${num}"=="${menuOne}" run keywords sleep 5 + ... AND click element id=${dict}[${num}] + END + # 遍历二级菜单 + FOR ${list} ${num} IN ENUMERATE @{${menuOne}} + run keyword if "${num}"=="dashboard" Exit For Loop + ... ELSE IF "${num}"=="${menuTwo}" run keywords sleep 3 + ... AND click element id=${${menuOne}}[${num}] + END diff --git a/02-Keyword/tsg_ui/Objects/ObjectPages.robot b/02-Keyword/tsg_ui/Objects/ObjectPages.robot new file mode 100644 index 0000000..0a4fe69 --- /dev/null +++ b/02-Keyword/tsg_ui/Objects/ObjectPages.robot @@ -0,0 +1,71 @@ +*** Settings *** +Library Selenium2Library +Resource Objects.robot +Resource ../Menu.robot +Library Collections + +*** Keywords *** +CreatePage + [Arguments] ${objtype} ${name} ${ipads}=null ${ipclient}=null ${ipclienttext1}=null ${ipclienttext2}=null ${keywordtext}=null ${hex}=close ${reqrestype}=null ${reqresheader}=null + Menu policy&objects Objects + sleep 3 + Objects.CreateButton ${objtype} + Objects.Create-name ${name} + Objects.Create-item + run keyword if "${objtype}"=="Ip" run keywords Objects.Create-ip-AddressType ${ipads} + ... AND Objects.Create-ip-ClientIP ${ipclient} + ... AND Objects.Create-ip-ClientIP-text ${ipclient} ${ipclienttext1} ${ipclienttext2} + run keyword if "${objtype}"=="Fqdn" or "${objtype}"=="Sub" or "${objtype}"=="Url" or "${objtype}"=="Category" or "${objtype}"=="Account" run keywords Objects.Create-keyword-text ${objtype} ${keywordtext} + ... AND sleep 1 + run keyword if '${objtype}'=='Key' run keywords Objects.Create-Key-text ${keywordtext} + ... AND Objects.Create-Key-hexmode ${hex} + run keyword if '${objtype}'=='ReqRes' run keywords Objects.Create-ReqRes-type ${reqrestype} + ... AND Objects.Create-ReqRes-header ${reqrestype} ${reqresheader} + ... AND Objects.Create-ReqRes-text ${keywordtext} + ... AND Objects.Create-ReqRes-hexmode ${hex} + Objects.Create-item-ok ${objtype} + Objects.Create-ok + +UpdateIPPage + SelectOne + UpButton + UpName yyq_test_up + Create-item + Create-ip-ClientIP range + Create-ip-ClientIP-text 192.168.255.255 192.168.255.255 + Create-item-ok Ip #Ip + UpOk + +DeletePage + [Arguments] ${name} + sleep 1 + click element id=clear_input_btm + sleep 1 + input text id=one-input ${name} + press keys id=one-input ENTER + Objects.SelectOne + Objects.DeleteButton + Objects.Delete-delete + +UploadPage + UploadButton + Upload-name yyq-uploadFile + Upload-objectType + Upload-uploadedFile F:\\yyq\\python\\ip_20200221080650.txt + Upload-ok + +ExportPage + ExportPage + Export-objectType ip + Export-format txt + Export-ok + +DeleteObjects + [Arguments] ${obj} + sleep 2 + Menu policy&objects Objects + FOR ${num} ${key} IN ENUMERATE @{obj} + sleep 2 + run keyword if "${key}"!="Ip" DeletePage ${obj}[${key}] + sleep 1 + END diff --git a/02-Keyword/tsg_ui/Objects/Objects.robot b/02-Keyword/tsg_ui/Objects/Objects.robot new file mode 100644 index 0000000..08ca49e --- /dev/null +++ b/02-Keyword/tsg_ui/Objects/Objects.robot @@ -0,0 +1,256 @@ +*** Settings *** +Library Selenium2Library + +*** Keywords *** +CreateButton + [Arguments] ${objType} + Wait Until Element Is Enabled id=objectCreate + sleep 3 + Click element id=objectCreate + run keyword if "${objType}"=="Ip" run keywords sleep 2 + ... AND Click element id=object1 + ... ELSE IF "${objType}"=="Fqdn" run keywords sleep 2 + ... AND Click element id=object2 + ... ELSE IF "${objType}"=="Sub" run keywords sleep 2 + ... AND Click element id=object3 + ... ELSE IF "${objType}"=="ReqRes" run keywords sleep 2 + ... AND Click element id=object4 + ... ELSE IF "${objType}"=="Key" run keywords sleep 2 + ... AND Click element id=object5 + ... ELSE IF "${objType}"=="Url" run keywords sleep 2 + ... AND Click element id=object6 + ... ELSE IF "${objType}"=="Category" run keywords sleep 2 + ... AND Click element id=object7 + ... ELSE IF "${objType}"=="Account" run keywords sleep 2 + ... AND Click element id=object8 + ... ELSE IF log 对象类型有误 + +Create-name + [Arguments] ${objName} + sleep 2 + input text id=objectAdd_name ${objName} + +Create-item + click element id=objectAddItemAdd + +Create-item-Add + [Arguments] ${Type} + click element id=objectAddItem${Type}Add + +Create-item-ok + [Arguments] ${Type} + sleep 2 + run keyword if "${Type}"=="Category" click element id=objectAddItemFqdnOk + ... ELSE IF "${Type}"=="Account" click element id=objectItemAccountOk + ... ELSE click element id=objectAddItem${Type}Ok + +Create-item-Cancel + [Arguments] ${Type} + click button id=objectAddItem${Type}Cancel + +Create-ip-AddressType + [Arguments] ${AdsType} + sleep 2 + click element id=objectItemIpType0 + sleep 2 + run keyword if "${AdsType}"=="ipv4" run keywords click element xpath=/html/body/div[2]/div[1]/div[1]/ul/li[1] + ... AND sleep 1 + ... ELSE IF "${AdsType}"=="ipv6" run keywords click element xpath=/html/body/div[2]/div[1]/div[1]/ul/li[2] + ... ELSE run keywords log 'Address Type错误' + +Create-ip-Protocol + [Arguments] ${Protocol} + run keyword if ${Protocol}=="any" click element id=objectItemIpProtocol10 + ... ELSE IF ${Protocol}=="tcp" click element id=objectItemIpProtocol20 + ... ELSE IF ${Protocol}=="udp" click element id=objectItemIpProtocol30 + +Create-ip-Directed + [Arguments] ${Directed} + run keyword if ${Directed}=="no" click element id=objectItemIpDirection10 + ... ELSE IF ${Directed}=="yes" click element id=objectItemIpDirection20 + +Create-ip-ClientIP + [Arguments] ${clientIPType} + sleep 2 + click element id=object_ip_sourecip0 + sleep 2 + run keyword if "${clientIPType}"=="range" run keywords sleep 1 + ... AND click element id=range0 + ... ELSE IF "${clientIPType}"=="cidr" run keywords sleep 1 + ... AND click element id=CIDR0 + ... ELSE IF "${clientIPType}"=="masks" run keywords sleep 1 + ... AND click element xpath=/html/body/div[3]/div[1]/div[1]/ul/li[3] + sleep 2 + +Create-ip-ClientIP-text + [Arguments] ${clientIPType} ${clientIPStart} ${clientIPEnd} + sleep 2 + run keyword if "${clientIPType}"=="range" run keywords input text id=object_ip_clientip10 ${clientIPStart} + ... AND input text id=object_ip_clientip20 ${clientIPEnd} + run keyword if "${clientIPType}"=="cidr" run keywords input text id=object_ip_clientip30 ${clientIPStart} + ... AND input text id=object_ip_clientip40 ${clientIPEnd} + run keyword if "${clientIPType}"=="masks" run keywords input text id=object_ip_clientip50 ${clientIPStart} + ... AND input text id=object_ip_clientip60 ${clientIPEnd} + +Create-ip-ClientPort + +Create-ip-ClientPort-text + +Create-ip-ServerIP + +Create-ip-ServerPort + +Create-subobjects + click element id=objectAddSubAdd + +Create-Description + [Arguments] ${objDesc} + input text id=objectAdd_description ${objDesc} + +Create-ok + sleep 1 + click button id=objectAdd_ok + +Create-cancel + click button id=objectAdd_cancel + +SelectOne + sleep 3 + click element xpath=//*[@id="ly-table1-listcontent"]/div/div[3]/table/tbody/tr[1] + +UpButton + click button id=objectEdit + +DeleteButton + click button id=objectDel + +Delete-delete + sleep 2 + click button id=object-objectDel-confirm + +Delete-cancel + click button xpath=/html/body/div[2]/div/div[3]/button[1] + +UpName + [Arguments] ${name} + clear element text id=objectAdd_name + input text id=objectAdd_name ${name} + +UpOk + click button id=objectAdd_ok + +UploadButton + sleep 3 + click button id=objectImprt + +ExportButton + sleep 3 + click button id=objectExport + +Upload-name + [Arguments] ${name} + sleep 2 + input text xpath=//*[@id="app"]/div/div[3]/div/div/div[14]/div/div[1]/div[1]/div/input ${name} + +Upload-objectType + click button id=object_select_Import + sleep 2 + click element xpath=/html/body/div[2]/div[1]/div[1]/ul/li[1] + +Upload-uploadedFile + [Arguments] ${ads} + sleep 3 + Choose File xpath=//*[@id="app"]/div/div[3]/div/div/div[14]/div/div[2]/div/div[1]/input ${ads} + +Upload-ok + click button id=objectUploadedOk + +Export-objectType + [Arguments] ${objType} + click element id=object_select_Import1 + run keyword if "${objType}"=="ip" run keywords sleep 2 + ... AND click element xpath=/html/body/div[2]/div[1]/div[1]/ul/li[1] + ... ELSE IF "${objType}"=="fqdn" run keywords sleep 2 + ... AND Click element xpath=/html/body/div[2]/div[1]/div[1]/ul/li[2] + ... ELSE IF "${objType}"=="subscriberid" run keywords sleep 2 + ... AND Click element xpath=/html/body/div[2]/div[1]/div[1]/ul/li[3] + ... ELSE IF "${objType}"=="httpsignature" run keywords sleep 2 + ... AND Click element xpath=/html/body/div[2]/div[1]/div[1]/ul/li[4] + ... ELSE IF "${objType}"=="keywords" run keywords sleep 2 + ... AND Click element xpath=/html/body/div[2]/div[1]/div[1]/ul/li[5] + ... ELSE IF "${objType}"=="url" run keywords sleep 2 + ... AND Click element xpath=/html/body/div[2]/div[1]/div[1]/ul/li[6] + ... ELSE IF "${objType}"=="category" run keywords sleep 2 + ... AND Click element xpath=/html/body/div[2]/div[1]/div[1]/ul/li[7] + ... ELSE IF "${objType}"=="account" run keywords sleep 2 + ... AND Click element xpath=/html/body/div[2]/div[1]/div[1]/ul/li[8] + +Export-format + [Arguments] ${filetype} + sleep 2 + click element id=object_select_export + run keyword if "${filetype}"=="txt" run keywords sleep 2 + ... AND click element xpath=/html/body/div[3]/div[1]/div[1]/ul/li[1] + ... ELSE IF "${filetype}"=="csv" run keywords sleep 2 + ... AND click element xpath=/html/body/div[3]/div[1]/div[1]/ul/li[2] + +Export-ok + click button id=objectImportOk + +Export-cancel + click button id=objectImportCancel + +Create-keyword-text + [Arguments] ${type} ${keywordtext} + sleep 1 + run keyword if "${type}"=="Fqdn" run keywords sleep 1 + ... AND input text id=object_fqdn0 ${keywordtext} + ... ELSE IF "${type}"=="Sub" run keywords sleep 1 + ... AND input text id=object_sub0 ${keywordtext} + ... ELSE IF "${type}"=="Url" run keywords sleep 1 + ... AND input text id=object_url0 ${keywordtext} + ... ELSE IF "${type}"=="Category" run keywords sleep 1 + ... AND input text id=object_fqdn0 ${keywordtext} + ... ELSE IF "${type}"=="Account" run keywords sleep 1 + ... AND input text id=object_account0 ${keywordtext} + ... ELSE log 2 + +Create-ReqRes-type + [Arguments] ${type} + sleep 1 + run keyword if '${type}'=='req' click element xpath=//*[@id="objectAddItemReqRes"]/label[1] + ... ELSE IF '${type}'=='res' click element xpath=//*[@id="objectAddItemReqRes"]/label[2] + sleep 1 + +Create-ReqRes-header + [Arguments] ${type} ${header} + sleep 1 + run keyword if '${type}'=='req' and '${header}'=='ua' click element xpath=//*[@id="objectAddItemReqResType1"]/label[1] + ... ELSE IF '${type}'=='req' and '${header}'=='ck' click element xpath=//*[@id="objectAddItemReqResType1"]/label[2] + ... ELSE IF '${type}'=='res'and '${header}'=='sck' click element xpath=//*[@id="objectAddItemReqResType"]/label[1] + ... ELSE IF '${type}'=='res'and '${header}'=='ct' click element xpath=//*[@id="objectAddItemReqResType"]/label[2] + sleep 1 + +Create-ReqRes-text + [Arguments] ${keywordtext} + sleep 1 + input text id=object_sig0 ${keywordtext} + sleep 1 + +Create-ReqRes-hexmode + [Arguments] ${hex} + sleep 1 + run keyword if "${hex}"=="open" click element id=objectAddItemReqResIsHexbin0_swith + sleep 1 + +Create-Key-text + [Arguments] ${keywordtext} + sleep 1 + input text id=object_key0 ${keywordtext} + sleep 1 + +Create-Key-hexmode + [Arguments] ${hex} + sleep 1 + run keyword if "${hex}"=="open" click element id=objectAddItemKeyIsHexbin0_swith + sleep 1 diff --git a/02-Keyword/tsg_ui/Schedules/Schedules.robot b/02-Keyword/tsg_ui/Schedules/Schedules.robot new file mode 100644 index 0000000..8b90349 --- /dev/null +++ b/02-Keyword/tsg_ui/Schedules/Schedules.robot @@ -0,0 +1,260 @@ +*** Settings *** +Library Selenium2Library + +*** Keywords *** +Schedules-create + [Arguments] ${name} ${type1} ${number} ${weeks} ${dateorweeks} ${dates} + ... ${aweeks} ${Start Date} ${End Date} ${Start Time} ${End Time} + click element id=scheduleAdd #点击create按钮 + sleep 1 + input text id=schedule_name ${name} + sleep 1 + ${type} set variable ${type1} + run keyword if '${type}'=='Daily' run keywords sleep 1 + ... AND Schedules-Daily ${number} + ... ELSE IF '${type}'=='Weekly' run keywords sleep 1 + ... AND Schedules-Weekly ${number} ${weeks} + ... ELSE IF '${type}'=='Monthly' run keywords sleep 1 + ... AND Schedules-Monthly ${dateorweeks} ${number} ${dates} ${aweeks} + ... ${weeks} + ... ELSE IF '${type}'=='One-time' run keywords sleep 1 + ... AND click element id=scheduleAddTypeSingle + sleep 1 + input text id=schedulead_startdate ${Start Date} #开始日期 + sleep 1 + click element xpath=//*[@id="policy_Manipulation_create5"]/div[2] + sleep 1 + input text xpath=//*[@id="policy_Manipulation_create5"]/div[2]/form/div[5]/div/div/input ${End Date} #结束日期 + sleep 1 + click element xpath=//*[@id="policy_Manipulation_create5"]/div[2] + sleep 1 + input text id=schedulead_startTime ${Start Time} #开始时间 + sleep 1 + click element xpath=//*[@id="policy_Manipulation_create5"]/div[2] + sleep 1 + input text xpath=//*[@id="policy_Manipulation_create5"]/div[2]/form/div[7]/div/div/input ${End Time} #结束时间 + sleep 1 + click element xpath=//*[@id="policy_Manipulation_create5"]/div[2] + sleep 2 + click element xpath=//*[@id="policy_Manipulation_create5"]/div[2]/form/div[8]/div/div/button[1] #点击OK + sleep 2 + +Schedules-Daily + [Arguments] ${number} + click element id=scheduleAddTypeDaily #点击 Daily + sleep 1 + input text xpath=//*[@id="schedule_interval"]/div/input ${number} + sleep 1 + +Schedules-Weekly + [Arguments] ${number} ${weeks} + click element id=scheduleAddTypeWeekly #点击Weekly + sleep 1 + input text xpath=//*[@id="schedule_interval"]/div/input ${number} + sleep 1 + ${week} set variable ${weeks} + run keyword if '${week}'=='SUN' run keywords sleep 1 + ... AND click element id=schedulead_cities0 + ... ELSE IF '${week}'=='MON' run keywords sleep 1 + ... AND click element id=schedulead_cities1 + ... ELSE IF '${week}'=='TUE' run keywords sleep 1 + ... AND click element id=schedulead_cities2 + ... ELSE IF '${week}'=='WED' run keywords sleep 1 + ... AND click element id=schedulead_cities3 + ... ELSE IF '${week}'=='THU' run keywords sleep 1 + ... AND click element id=schedulead_cities4 + ... ELSE IF '${week}'=='FRI' run keywords sleep 1 + ... AND click element id=schedulead_cities5 + ... ELSE IF '${week}'=='SAT' run keywords sleep 1 + ... AND click element id=schedulead_cities6 + sleep 1 + +Schedules-Monthly + [Arguments] ${dateorweeks} ${number}=null ${dates}=null ${aweeks}=null ${weeks}=null + click element id=scheduleAddTypeMonthly #点击monthly + sleep 1 + ${dateorweek} set variable ${dateorweeks} + run keyword if '${dateorweek}'=='Date' run keywords sleep 1 + ... AND click element xpath=//*[@id="policy_Manipulation_create5"]/div[2]/form/div[3]/div/div[1]/label[1] + ... AND Schedules-Monthly-Date ${number} ${dates} + ... ELSE IF '${dateorweek}'=='Week' run keywords sleep 1 + ... AND click element xpath=//*[@id="policy_Manipulation_create5"]/div[2]/form/div[3]/div/div[1]/label[2] + ... AND Schedules-Monthly-Week ${number} ${aweeks} ${weeks} + +Schedules-Monthly-Date + [Arguments] ${number} ${dates} + input text xpath=//*[@id="schedule_interval"]/div/input ${number} + sleep 1 + ${date} set variable ${dates} + run keyword if '${date}'=='All' run keywords sleep 1 + ... AND click element id=schedule_alldaycontrol + ... ELSE IF '${date}'=='1' run keywords sleep 1 + ... AND click element id=schedule_onDay0 + ... ELSE IF '${date}'=='2' run keywords sleep 1 + ... AND click element id=schedule_onDay1 + ... ELSE IF '${date}'=='3' run keywords sleep 1 + ... AND click element id=schedule_onDay2 + ... ELSE IF '${date}'=='4' run keywords sleep 1 + ... AND click element id=schedule_onDay3 + ... ELSE IF '${date}'=='5' run keywords sleep 1 + ... AND click element id=schedule_onDay4 + ... ELSE IF '${date}'=='6' run keywords sleep 1 + ... AND click element id=schedule_onDay5 + ... ELSE IF '${date}'=='7' run keywords sleep 1 + ... AND click element id=schedule_onDay6 + ... ELSE IF '${date}'=='8' run keywords sleep 1 + ... AND click element id=schedule_onDay7 + ... ELSE IF '${date}'=='9' run keywords sleep 1 + ... AND click element id=schedule_onDay8 + ... ELSE IF '${date}'=='10' run keywords sleep 1 + ... AND click element id=schedule_onDay9 + ... ELSE IF '${date}'=='11' run keywords sleep 1 + ... AND click element id=schedule_onDay10 + ... ELSE IF '${date}'=='12' run keywords sleep 1 + ... AND click element id=schedule_onDay11 + ... ELSE IF '${date}'=='13' run keywords sleep 1 + ... AND click element id=schedule_onDay12 + ... ELSE IF '${date}'=='14' run keywords sleep 1 + ... AND click element id=schedule_onDay13 + ... ELSE IF '${date}'=='15' run keywords sleep 1 + ... AND click element id=schedule_onDay14 + ... ELSE IF '${date}'=='16' run keywords sleep 1 + ... AND click element id=schedule_onDay15 + ... ELSE IF '${date}'=='17' run keywords sleep 1 + ... AND click element id=schedule_onDay16 + ... ELSE IF '${date}'=='18' run keywords sleep 1 + ... AND click element id=schedule_onDay17 + ... ELSE IF '${date}'=='19' run keywords sleep 1 + ... AND click element id=schedule_onDay18 + ... ELSE IF '${date}'=='20' run keywords sleep 1 + ... AND click element id=schedule_onDay19 + ... ELSE IF '${date}'=='21' run keywords sleep 1 + ... AND click element id=schedule_onDay20 + ... ELSE IF '${date}'=='22' run keywords sleep 1 + ... AND click element id=schedule_onDay21 + ... ELSE IF '${date}'=='23' run keywords sleep 1 + ... AND click element id=schedule_onDay22 + ... ELSE IF '${date}'=='24' run keywords sleep 1 + ... AND click element id=schedule_onDay23 + ... ELSE IF '${date}'=='25' run keywords sleep 1 + ... AND click element id=schedule_onDay24 + ... ELSE IF '${date}'=='26' run keywords sleep 1 + ... AND click element id=schedule_onDay25 + ... ELSE IF '${date}'=='27' run keywords sleep 1 + ... AND click element id=schedule_onDay26 + ... ELSE IF '${date}'=='28' run keywords sleep 1 + ... AND click element id=schedule_onDay27 + ... ELSE IF '${date}'=='29' run keywords sleep 1 + ... AND click element id=schedule_onDay28 + ... ELSE IF '${date}'=='30' run keywords sleep 1 + ... AND click element id=schedule_onDay29 + ... ELSE IF '${date}'=='31' run keywords sleep 1 + ... AND click element id=schedule_onDay301sleep1 + sleep 1 + +Schedules-Monthly-Week + [Arguments] ${number} ${aweeks} ${weeks} + sleep 2 + input text xpath=/html/body/div/div/div[3]/div/div/div/div[2]/form/div[3]/div/div[2]/div/div/div/div/input ${number} + sleep 1 + click element id=schedulead_select_week + sleep 2 + ${aweek} set variable ${aweeks} + run keyword if '${aweek}'=='1' run keywords sleep 1 + ... AND click element xpath=/html/body/div/div[1]/div[1]/ul/li[1] + ... ELSE IF '${aweek}'=='2' run keywords sleep 1 + ... AND click element xpath=/html/body/div/div[1]/div[1]/ul/li[2] + ... ELSE IF '${aweek}'=='3' run1 keywords sleep 1 + ... AND click element xpath=/html/body/div/div[1]/div[1]/ul/li[3] + ... ELSE IF '${aweek}'=='4' run keywords sleep 1 + ... AND click eleme1nt xpath=/html/body/div/div[1]/div[1]/ul/li[4] + ... ELSE IF '${aweek}'=='L' run keywords sleep 1 + ... AND click element xpath=/html/body/div/div[1]/div[1]/ul/li[5] + sleep 1 + click element xpath=//*[@id="policy_Manipulation_create5"]/div[2]/form/div[3]/div/div[3]/nav/div/div[2]/span/span/i + sleep 1 + ${week} set variable ${weeks} + run keyword if '${week}'=='SUN' run keywords sleep 1 + ... AND click element id=schedulead_cities0 + ... ELSE IF '${week}'=='MON' run keywords sleep 1 + ... AND click element id=schedulead_cities1 + ... ELSE IF '${week}'=='TUE' run keywords sleep 1 + ... AND click element id=schedulead_cities2 + ... ELSE IF '${week}'=='WED' run keywords sleep 1 + ... AND click element id=schedulead_cities3 + ... ELSE IF '${week}'=='THU' run keywords sleep 1 + ... AND click element id=schedulead_cities4 + ... ELSE IF '${week}'=='FRI' run keywords sleep 1 + ... AND click element id=schedulead_cities5 + ... ELSE IF '${week}'=='SAT' run keywords sleep 1 + ... AND click element id=schedulead_cities6 + ... ELSE IF '${week}'=='All' run keywords sleep 1 + ... AND click element id=schedulead_weekchooseAll + sleep 1 + +Schedules-delete + sleep 1 + click element id=scheduleDel #点击删除按钮 + sleep 1 + click element xpath=/html/body/div[2]/div/div[3]/button[2] + +Schedules-search-id + [Arguments] ${id} + sleep 1 + click element id=one-input + sleep 1 + click element id=input_list_li1 + sleep 1 + input text id=sreach_input ${id} + sleep 1 + click element id=select_new_search_btn + sleep 1 + click element xpath=//*[@id="ly-table1-listcontent"]/div/div[3]/table + +Schedules-search-name + [Arguments] ${name} + sleep 1 + click element id=one-input + sleep 1 + click element id=input_list_li2 + sleep 1 + input text id=sreach_input ${name} + sleep 1 + click element id=select_new_search_btn + sleep 1 + click element xpath=//*[@id="ly-table1-listcontent"]/div/div[3]/table + +Schedules-edit + [Arguments] ${name} ${type1} ${number} ${weeks} ${dateorweeks} ${dates} + ... ${aweeks} ${Start Date} ${End Date} ${Start Time} ${End Time} + click element id=scheduleEdit #点击create按钮 + sleep 1 + input text id=schedule_name ${name} + sleep 1 + ${type} set variable ${type1} + run keyword if '${type}'=='Daily' run keywords sleep 1 + ... AND Schedules-Daily ${number} + ... ELSE IF '${type}'=='Weekly' run keywords sleep 1 + ... AND Schedules-Weekly ${number} ${weeks} + ... ELSE IF '${type}'=='Monthly' run keywords sleep 1 + ... AND Schedules-Monthly ${dateorweeks} ${number} ${dates} ${aweeks} + ... ${weeks} + sleep 1 + input text id=schedulead_startdate ${Start Date} #开始日期 + sleep 1 + click element xpath=//*[@id="policy_Manipulation_create5"]/div[2] + sleep 1 + input text xpath=//*[@id="policy_Manipulation_create5"]/div[2]/form/div[5]/div/div/input ${End Date} #结束日期 + sleep 1 + click element xpath=//*[@id="policy_Manipulation_create5"]/div[2] + sleep 1 + input text id=schedulead_startTime ${Start Time} #开始时间 + sleep 1 + click element xpath=//*[@id="policy_Manipulation_create5"]/div[2] + sleep 1 + input text xpath=//*[@id="policy_Manipulation_create5"]/div[2]/form/div[7]/div/div/input ${End Time} #结束时间 + sleep 1 + click element xpath=//*[@id="policy_Manipulation_create5"]/div[2] + sleep 1 + click element xpath=//*[@id="policy_Manipulation_create5"]/div[2]/form/div[8]/div/div/button[1] #点击OK + Sleep 2 diff --git a/02-Keyword/tsg_ui/SecurityPolicy/InterceptSSLModule.robot b/02-Keyword/tsg_ui/SecurityPolicy/InterceptSSLModule.robot new file mode 100644 index 0000000..c604573 --- /dev/null +++ b/02-Keyword/tsg_ui/SecurityPolicy/InterceptSSLModule.robot @@ -0,0 +1,122 @@ +*** Settings *** +Library Selenium2Library + +*** Keywords *** +Keyring-create + [Arguments] ${keyring-name} ${file} ${file1} ${1or2} ${type} ${type1} + [Documentation] 引用次关键字,填入必填参数 + ... 必填参数: + ... ${keyring-name}:新建页面name输入框里的内容 + ... ${file}:上传文件所在本地的路径 + ... ${file1}:上传文件所在本地的路径 + ... ${1or2}:填入1 或者其他数值 + ... ${type}:上传证书类型的元素 + ... ${type1}:上传证书加密解密算法的元素 + click element id=interceptionadd_eventkeying #点击下拉框 + sleep 1 + click element id=interceptionadd_keyadd #点击+号添加证书 + sleep 2 + input text id=keyringsadd_name ${keyring-name} #输入证书name + sleep 1 + Choose File xpath=//*[@id="proxy"]/div[10]/div/div/div[2]/form/div[2]/div/div/div/input ${file} #上传证书文件 + sleep 2 + Choose File xpath=//*[@id="proxy"]/div[10]/div/div/div[2]/form/div[4]/div/div/div/input ${file1} #上传证书文件 + ${select} Set Variable ${1or2} + Run Keyword If '${select}'=='1' click id=keyringsadd_customized + Run Keyword If '${select}'=='1' input id=reissueExpiryDate 10 + click element id=certificateType_input #点击下拉框 + sleep 1 + click element ${type} #选择证书类型 + sleep 1 + click element id=keyringsadd_publicKeyAlgo #点击下拉框 + sleep 1 + click element ${type1} #选择加密解密类型 + sleep 1 + click element id=parentobj_submit #点击ok + +Keyring-search + [Arguments] ${name} + [Documentation] 条用此关键字前需要给必填参数:${name} + ... ${name}:创建的keyring的name + click element id=tab-0 #点击Keyring + sleep 1 + click element id=interceptionadd_eventkeying #点击下拉框 + sleep 1 + input text id=card_keyringName ${name} #搜索框输入 + Sleep 1 + Press key id=card_keyringName \\13 #回车键 + sleep 1 + click element id=card_keylist0 #点击列表 + +Certificate Checks + [Arguments] ${Type} + [Documentation] 在调用此关键字前,需要添加必填参数${Type} + ... ${Type}为Fail-close或者是Pass-through \ \ \ 代表Certificate Checks 里的两个按钮 + click element id=tab-1 #点击Certificate Checks + sleep 1 + run keyword if "${Type}"=="Fail-close" click element id=card_fileoption0 + ... ELSE IF "${Type}"=="Pass-through" click element id=card_fileoption1 #选择Fail-close或者pass-through + +Dynamic Bypass + [Arguments] ${Type} + [Documentation] 调用此关键字前 需要给一个必填参数${Type} + ... ${Type}参数为EV或者CT或者MA或者OPE或者CP \ 对应Dynamic Bypass 五个按钮 + click element id=tab-3 #点击Dynamic Bypass + sleep 1 + click element id=mutual_authentication_swith + sleep 1 + click element id=undefined_swith + sleep 1 + click element id=cert_pinning1_swith + sleep 1 + run keyword if "${Type}"=="EV" click element id=ev_cert_swith + ... ELSE IF "${Type}"=="CT" click element id=cert_transparency_swith + ... ELSE IF "${Type}"=="MA" click element id=mutual_authentication_swith + ... ELSE IF "${Type}"=="OPE" click element id=undefined_swith + ... ELSE IF "${Type}"=="CP" click element id=cert_pinning1_swith + +Certificate Checks-close + [Documentation] 次关键字为关闭Certificate Checks的四个按钮 + click element id=tab-1 #点击Certificate Checks + sleep 1 + click element id=cn_swith + sleep 1 + click element id=issuer_swith + sleep 1 + click element id=self_signed_swith + sleep 1 + click element id=expiration_swith + +Protocol Version + [Arguments] ${Type} ${Type1} ${Type2} + [Documentation] 调用次关键字前需要添加必填参数: + ... ${Type}:填入MCV或者AH2 + ... ${Type1}:对应最小版本号(填入:3.0或者1.0或者1.1或者1.2或者1.3) + ... ${Type2}:对应最大版本号(填入:3.0或者1.0或者1.1或者1.2或者1.3) + click element id=tab-4 + sleep 1 + run keyword if "${Type}"=="MCV" run keywords click element id=interceptionadd_sslver_swith + ... AND Mirror Client Versions-close ${Type1} ${Type2} + ... ELSE IF "${Type}"=="AH2" click element id=interceptionaddallhttp_swith + +Mirror Client Versions-close + [Arguments] ${Type} ${Type1} + [Documentation] 调用次关键字前需要添加必填参数: + ... ${Type}:对应最小版本号(填入:3.0或者1.0或者1.1或者1.2或者1.3) + ... ${Type1}:对应最大版本号(填入:3.0或者1.0或者1.1或者1.2或者1.3) + sleep 1 + click element id=interceptionadd_sslmin + sleep 1 + run keyword if "${Type}"=="3.0" click element id=pro_min0 + ... ELSE IF "${Type}"=="1.0" click element id=pro_min1 + ... ELSE IF "${Type}"=="1.1" click element id=pro_min2 + ... ELSE IF "${Type}"=="1.2" click element id=pro_min3 + ... ELSE IF "${Type}"=="1.3" click element id=pro_min4 + sleep 1 + click element id=interceptionadd_sslmax + sleep 1 + run keyword if "${Type1}"=="3.0" click element id=pro_max0 + ... ELSE IF "${Type1}"=="1.0" click element id=pro_max1 + ... ELSE IF "${Type1}"=="1.1" click element id=pro_max2 + ... ELSE IF "${Typeq}"=="1.2" click element id=pro_max3 + ... ELSE IF "${Typeq}"=="1.3" click element id=pro_max4 diff --git a/02-Keyword/tsg_ui/SecurityPolicy/SecurityPolicy.robot b/02-Keyword/tsg_ui/SecurityPolicy/SecurityPolicy.robot new file mode 100644 index 0000000..fe6d05d --- /dev/null +++ b/02-Keyword/tsg_ui/SecurityPolicy/SecurityPolicy.robot @@ -0,0 +1,259 @@ +*** Settings *** +Library Selenium2Library + +*** Keywords *** +CreateButton + Wait Until Element Is Enabled id=proxyInterception_create + sleep 3 + click element id=proxyInterception_create + +Create-name + [Arguments] ${name} + sleep 2 + input text id=interceptionadd_name ${name} + +Create-action + [Arguments] ${action} + run keyword if "${action}"=="allow" run keywords sleep 1 + ... AND click element id=security_action_Allow + ... ELSE IF "${action}"=="deny" run keywords sleep 1 + ... AND click element id=security_action_Deny + ... ELSE IF "${action}"=="monitor" run keywords sleep 1 + ... AND click element id=security_action_Monitor + ... ELSE IF "${action}"=="intercept" run keywords sleep 1 + ... AND click element id=security_action_Intercept + +Create-Conditions + sleep 2 + click element id=interceptionadd_object + +Create-Conditions-ip + [Arguments] ${objname} + sleep 2 + click element id=interceptionadd_procolall1 + sleep 2 + SecurityPolicy.SelectOne ${objname} + +Create-Conditions-sub + [Arguments] ${objname} + sleep 2 + click element id=interceptionadd_procolall2 + sleep 2 + SecurityPolicy.SelectOne ${objname} + +Create-Conditions-protocol + [Arguments] ${protocol} + sleep 2 + click element id=interceptionadd_procolall3 + sleep 2 + run keyword if '${protocol}'=='http' run keywords sleep 1 + ... AND click element id=interceptionadd_prochange0 + ... ELSE IF '${protocol}'=='ssl' run keywords sleep 1 + ... AND click element id=interceptionadd_prochange1 + ... ELSE IF '${protocol}'=='dns' run keywords sleep 1 + ... AND click element id=interceptionadd_prochange2 + ... ELSE IF '${protocol}'=='mail' run keywords sleep 1 + ... AND click element id=interceptionadd_prochange3 + ... ELSE IF '${protocol}'=='ftp' run keywords sleep 1 + ... AND click element id=interceptionadd_prochange4 + ... ELSE log 协议内容错误 + +Create-Conditions-Search + [Arguments] ${Search} + input text xpath=//*[@id="proxy"]/div[5]/div[2]/div[2]/div/div[1]/input ${Search} + sleep 2 + +Create-Conditions-Close + click button id=interceptionadd_allcancelobject + sleep 2 + +Create-Tag + +Create-EffectiveDevices + +Create-Schedule + +Create-Log Session + +Create-Description + +Create-Enabled + [Arguments] ${state} + sleep 2 + run keyword if "${state}"=="open" run keywords click element id=enablencheck_swith + ... AND sleep 2 + ... AND click button id=interceptionadd-enable-confirm + +Create-ok + execute javascript document.documentElement.scrollTop=1000 + sleep 2 + click button id=interceptionadd_sub + sleep 1 + execute javascript document.documentElement.scrollTop=0 + +Create-cancel + click button id=interceptionadd_back + +Create-Conditions-obj + [Arguments] ${action} ${protocol} ${objtype} ${objname} ${objtype1}=null + run keyword if '${action}'=='allow' and '${protocol}'=='http' run keywords sleep 1 + ... AND click element id=interceptionadd_prochange0 + ... AND Create-Conditions-allow&intercept-http ${objtype} ${objname} + ... ELSE IF '${action}'=='intercept' and '${protocol}'=='http' run keywords sleep 1 + ... AND click element id=interceptionadd_prochange0 + ... AND Create-Conditions-allow&intercept-http ${objtype} ${objname} + ... ELSE IF '${action}'=='allow' and '${protocol}'=='ssl' run keywords sleep 1 + ... AND click element id=interceptionadd_prochange1 + ... AND Create-Conditions-allow&intercept-ssl ${objtype} ${objname} + ... ELSE IF '${action}'=='intercept' and '${protocol}'=='ssl' run keywords sleep 1 + ... AND click element id=interceptionadd_prochange1 + ... AND Create-Conditions-allow&intercept-ssl ${objtype} ${objname} + ... ELSE IF '${action}'=='deny' and '${protocol}'=='http' run keywords sleep 1 + ... AND click element id=interceptionadd_prochange0 + ... AND Create-Conditions-deny&monitor-http ${objtype} ${objname} + ... ELSE IF '${action}'=='monitor' and '${protocol}'=='http' run keywords sleep 1 + ... AND click element id=interceptionadd_prochange0 + ... AND Create-Conditions-deny&monitor-http ${objtype} ${objname} + ... ELSE IF '${action}'=='deny' and '${protocol}'=='ssl' run keywords sleep 1 + ... AND click element id=interceptionadd_prochange1 + ... AND Create-Conditions-deny&monitor-ssl ${objtype1} ${objtype} ${objname} + ... ELSE IF '${action}'=='monitor' and '${protocol}'=='ssl' run keywords sleep 1 + ... AND click element id=interceptionadd_prochange1 + ... AND Create-Conditions-deny&monitor-ssl ${objtype1} ${objtype} ${objname} + ... ELSE IF '${action}'=='deny' and '${protocol}'=='dns' run keywords sleep 1 + ... AND click element id=interceptionadd_prochange2 + ... AND Create-Conditions-deny&monitor-dns ${objtype} ${objname} + ... ELSE IF '${action}'=='monitor' and '${protocol}'=='dns' run keywords sleep 1 + ... AND click element id=interceptionadd_prochange2 + ... AND Create-Conditions-deny&monitor-dns ${objtype} ${objname} + ... ELSE IF '${action}'=='deny' and '${protocol}'=='mail' run keywords sleep 1 + ... AND click element id=interceptionadd_prochange3 + ... AND Create-Conditions-deny&monitor-mail ${objtype} ${objname} + ... ELSE IF '${action}'=='monitor' and '${protocol}'=='mail' run keywords sleep 1 + ... AND click element id=interceptionadd_prochange3 + ... AND Create-Conditions-deny&monitor-mail ${objtype} ${objname} + ... ELSE IF '${action}'=='deny' and '${protocol}'=='ftp' run keywords sleep 1 + ... AND click element id=interceptionadd_prochange4 + ... AND Create-Conditions-deny&monitor-ftp ${objtype} ${objname} + ... ELSE IF '${action}'=='monitor' and '${protocol}'=='ftp' run keywords sleep 1 + ... AND click element id=interceptionadd_prochange4 + ... AND Create-Conditions-deny&monitor-ftp ${objtype} ${objname} + ... ELSE log 对象错误 + +Create-Conditions-allow&intercept-http + [Arguments] ${objtype} ${objname} + sleep 2 + run keyword if '${objtype}'=='Fqdn' run keywords click element xpath=//*[@id="interceptionadd_pro0"]/div[2] + ... AND sleep 2 + ... ELSE IF '${objtype}'=='Category' run keywords click element xpath=//*[@id="interceptionadd_pro0"]/div[3] + ... AND sleep 2 + ... ELSE log 对象错误 + SecurityPolicy.SelectOne ${objname} + +Create-Conditions-allow&intercept-ssl + [Arguments] ${objtype} ${objname} + sleep 2 + run keyword if '${objtype}'=='Fqdn' run keywords click element xpath=//*[@id="interceptionadd_pro0"]/div[2] + ... AND sleep 2 + ... ELSE IF '${objtype}'=='Category' run keywords click element xpath=//*[@id="interceptionadd_pro0"]/div[3] + ... AND sleep 2 + ... ELSE log 对象错误 + SecurityPolicy.SelectOne ${objname} + +Create-Conditions-deny&monitor-http + [Arguments] ${objtype} ${objname} + sleep 2 + run keyword if '${objtype}'=='Fqdn' run keywords click element xpath=//*[@id="interceptionadd_pro0"]/div[2] + ... AND sleep 2 + ... ELSE IF '${objtype}'=='Category' run keywords click element xpath=//*[@id="interceptionadd_pro0"]/div[3] + ... AND sleep 2 + ... ELSE IF '${objtype}'=='Url' run keywords click element id=interceptionadd_pro1 + ... AND sleep 2 + ... ELSE IF '${objtype}'=='Reqhdr' run keywords click element id=interceptionadd_pro2 + ... AND sleep 2 + ... ELSE IF '${objtype}'=='Reshdr' run keywords click element id=interceptionadd_pro3 + ... AND sleep 2 + ... ELSE IF '${objtype}'=='Reqbody' run keywords click element id=interceptionadd_pro4 + ... AND sleep 2 + ... ELSE IF '${objtype}'=='Resbody' run keywords click element id=interceptionadd_pro5 + ... AND sleep 2 + ... ELSE log 对象错误 + SecurityPolicy.SelectOne ${objname} + +Create-Conditions-deny&monitor-ssl + [Arguments] ${objtype1} ${objtype} ${objname} + sleep 2 + run keyword if '${objtype1}'=='sni' and '${objtype}'=='Fqdn' run keywords click element xpath=//*[@id="interceptionadd_pro0"]/div[2] + ... AND sleep 2 + ... ELSE IF '${objtype1}'=='sni' and '${objtype}'=='Category' run keywords click element xpath=//*[@id="interceptionadd_pro0"]/div[3] + ... AND sleep 2 + ... ELSE IF ${objtype1}'=='cn' and ${objtype}'=='Fqdn' run keywords click element id=interceptionadd_pro1 + ... AND sleep 2 + ... AND click element xpath=//*[@id="interceptionadd_pro1"]/div[2] + ... AND sleep 2 + ... ELSE IF ${objtype1}'=='cn' and${objtype}'=='Category' run keywords click element id=interceptionadd_pro1 + ... AND sleep 2 + ... AND click element xpath=//*[@id="interceptionadd_pro1"]/div[3] + ... AND sleep 2 + ... ELSE IF ${objtype1}'=='san' and ${objtype}'=='Fqdn' run keywords click element id=interceptionadd_pro2 + ... AND sleep 2 + ... AND click element xpath=//*[@id="interceptionadd_pro2"]/div[2] + ... AND sleep 2 + ... ELSE IF ${objtype1}'=='san' and ${objtype}'=='Category' run keywords click element id=interceptionadd_pro2 + ... AND sleep 2 + ... AND click element xpath=//*[@id="interceptionadd_pro2"]/div[3] + ... AND sleep 2 + ... ELSE log 对象错误 + SecurityPolicy.SelectOne ${objname} + +Create-Conditions-deny&monitor-dns + [Arguments] ${objtype} ${objname} + sleep 2 + run keyword if '${objtype}'=='Fqdn' run keywords click element xpath=//*[@id="interceptionadd_pro0"]/div[2] + ... AND sleep 2 + ... ELSE IF '${objtype}'=='Category' run keywords click element xpath=//*[@id="interceptionadd_pro0"]/div[3] + ... AND sleep 2 + ... ELSE log 对象错误 + SecurityPolicy.SelectOne ${objname} + +Create-Conditions-deny&monitor-mail + [Arguments] ${objtype} ${objname} + sleep 2 + run keyword if '${objtype}'=='Subject' run keywords click element id=interceptionadd_pro0 + ... AND sleep 2 + ... ELSE IF '${objtype}'=='Content' run keywords click element id=interceptionadd_pro1 + ... AND sleep 2 + ... ELSE IF '${objtype}'=='ATT Name' run keywords click element id=interceptionadd_pro2 + ... AND sleep 2 + ... ELSE IF '${objtype}'=='ATT CONT' run keywords click element id=interceptionadd_pro3 + ... AND sleep 2 + ... ELSE IF '${objtype}'=='From' run keywords click element id=interceptionadd_pro4 + ... AND sleep 2 + ... ELSE IF '${objtype}'=='To' run keywords click element id=interceptionadd_pro5 + ... AND sleep 2 + ... ELSE IF '${objtype}'=='Account' run keywords click element id=interceptionadd_pro6 + ... AND sleep 2 + ... ELSE log 对象错误 + SecurityPolicy.SelectOne ${objname} + +Create-Conditions-deny&monitor-ftp + [Arguments] ${objtype} ${objname} + sleep 2 + run keyword if '${objtype}'=='url' run keywords click element id=interceptionadd_pro0 + ... AND sleep 2 + ... ELSE IF '${objtype}'=='content' run keywords click element id=interceptionadd_pro1 + ... AND sleep 2 + ... ELSE IF '${objtype}'=='account' run keywords click element id=interceptionadd_pro2 + ... AND sleep 2 + ... ELSE log 对象错误 + SecurityPolicy.SelectOne ${objname} + +SelectOne + [Arguments] ${objname} + sleep 2 + log ${objname} + input text xpath=//*[@id="condistions_protocol"]/div[2]/div[2]/div/div[1]/input ${objname} + sleep 1 + press keys xpath=//*[@id="condistions_protocol"]/div[2]/div[2]/div/div[1]/input ENTER + sleep 2 + click element xpath=//*[@id="interceptionadd_checkouobject"]/ul/li[1] diff --git a/02-Keyword/tsg_ui/Setting/Settings.robot b/02-Keyword/tsg_ui/Setting/Settings.robot new file mode 100644 index 0000000..7874d91 --- /dev/null +++ b/02-Keyword/tsg_ui/Setting/Settings.robot @@ -0,0 +1,541 @@ +*** Settings *** +Library Selenium2Library +Library E:/Program Files (x86)/Python37-32/Lib/site-packages/robot/libraries/String.py + +*** Keywords *** +click + [Arguments] ${element} + Click Element ${element} + +input + [Arguments] ${element} ${text} + Input Text ${element} ${text} + +ui-logout + Close Browser + +ui-login + Open Browser http://192.168.40.120 Chrome + input xpath=//*[@id="app"]/div/div[2]/div/div[2]/div/input lyf + input xpath=//*[@id="app"]/div/div[2]/div/div[3]/div/input 111111 + click xpath=//*[@id="app"]/div/div[2]/div/div[4]/button + +Create-Hijack Files + [Arguments] ${name} ${file} ${type} + Sleep 1 + click id=children5 #点击一级目录Settings + Sleep 1 + click id=sidebarProxy_Profiles #点击二级目录Proxy Profiles + Sleep 2 + click id=profilesTabs_Profile_HijackFiles #点击Hijack Files按钮 + Sleep 1 + click id=hijackAdd #点击Create + Sleep 2 + input id=hijack_profileName ${name} #输入name + Sleep 2 + Choose File xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div[1]/div[2]/form/div[2]/div/div/div[1]/input ${file} #上传文件 + Sleep 2 + click id=hijackAddContentType #点击+ 打开侧滑窗口 + Sleep 1 + click ${type} #选择文件类型 + sleep 2 + click id=hijackAddOk #点击OK + Sleep 2 + input id=one-input ${name} #搜索输入框输入name + Sleep 1 + click id=select_new_search_btn #点击搜索按钮 + Sleep 1 + ${text1} Get Text xpath=//*[@id="ly-table1-listcontent"]/div/div[3]/table/tbody/tr/td[2]/div/span #获取点击后页面文本信息 + Should Be Equal As Strings ${text1} ${name} #断言 + +Create-Insert Scripts + [Arguments] ${name} ${file} ${type} + Sleep 1 + click id=children5 #点击一级目录Settings + Sleep 1 + click id=sidebarProxy_Profiles #点击二级目录Proxy Profiles + Sleep 2 + click id=profilesTabs_Profile_Insert #点击Insert Scripts按钮 + Sleep 1 + click id=insertAdd #点击Create + Sleep 2 + input id=insert_profileName ${name} #输入name + Sleep 2 + Choose File xpath=//*[@id="insertAddUpload"]/div[1]/input ${file} #上传文件 + Sleep 2 + click id=insert_select_format #点击下拉框按钮 + Sleep 1 + click ${type} #选择css + sleep 1 + click xpath=//*[@id="policy_Manipulation_create8"]/div[2]/form/div[5]/div/div/button[1] #点击OK + Sleep 1 + input xpath=//*[@id="one-input"] ${name} #搜索输入框输入name + Sleep 1 + click xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div[1]/div[2]/div[2]/i #点击搜索按钮 + Sleep 1 + ${text1} Get Text xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div[2]/div/div[3]/table/tbody/tr[1]/td[2]/div/div/span #获取点击后页面文本信息 + Should Be Equal As Strings ${text1} ${name} #断言 + ui-logout + +Create-Traffic Mirror Profiles + [Arguments] ${name} ${type} ${shuru} + Sleep 1 + click id=children5 #点击一级目录Settings + Sleep 1 + click id=sidebarProxy_Profiles #点击二级目录Proxy Profiles + Sleep 2 + click id=profilesTabs_Profile_TrafficMirrorProfiles #点击Traffic Mirror Profiles按钮 + Sleep 1 + click id=trafficMirrorAdd #点击Create + Sleep 2 + input id=trafficmirror_profileName ${name} #输入name + Sleep 2 + click xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div/div[2]/form/div[2]/div/div/div[1]/span/span/i #点击下拉框 + Sleep 2 + click ${type} #选择vlan或者mac + Sleep 1 + input id=trafficmirror_addrArray0 ${shuru} + sleep 2 + click xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div/div[2]/form/div[5]/div/div/button[1] #点击OK + Sleep 2 + input id=one-input ${name} #搜索输入框输入name + Sleep 1 + click id=select_new_search_btn #点击搜索按钮 + Sleep 1 + ${text1} Get Text xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div[2]/div/div[3]/table/tbody/tr/td[2]/div/div/span #获取点击后页面文本信息 + Should Be Equal As Strings ${text1} ${name} #断言 + ui-logout + +Edit-Insert Scripts + [Arguments] ${id-name} ${name} ${name1} ${file} ${type} + [Documentation] 引用关键字,填入必填参数 + ... 必填参数: + ... ${id-name}:为选择要查询的类型是ID或者Name的元素 + ... ${name}:为查询输入框输入内容 + ... ${name1}:为修改页面的name输入框里输入的内容 + ... ${file}:为修改页面要上传文件的路径 + ... ${type}:选择文件类型的元素 + Sleep 1 + click xpath=//*[@id="app"]/div/div[2]/ul/li[6]/div #点击一级目录Settings + Sleep 1 + click id=sidebarProxy_Profiles #点击二级目录Proxy Profiles + Sleep 2 + click id=profilesTabs_Profile_Insert #点击Insert files按钮 + sleep 1 + click id=one-input #搜索点击输入框 + sleep 1 + click ${id-name} #选择ID或者name + sleep 1 + input id=sreach_input ${name} #输入搜索内容 + sleep 1 + click xpath=//*[@id="select_new_search_btn"] #点击搜索按钮 + sleep 1 + click xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div[2]/div/div[3]/table/tbody/tr[1] #点击搜素到的列表 + sleep 1 + click id=insertEdit #点击Edit + sleep 1 + Clear Element Text id=insert_profileName #清空输入框 + sleep 1 + input id=insert_profileName ${name1} #输入框输入 + sleep 1 + Choose File xpath=//*[@id="insertAddUpload"]/div[1]/input ${file} #上传文件 + sleep 1 + click id=insert_select_format #点击下拉框 + sleep 1 + click ${type} #选择文件类型 + sleep 1 + click xpath=//*[@id="policy_Manipulation_create8"]/div[2]/form/div[8]/div/div/button[1] #点击ok提交 + +Create-Response Pages + [Arguments] ${name} ${file} + [Documentation] 引用次关键字,填入必填参数 + ... 必填参数: + ... ${name}:新建页面name输入框里的内容 + ... ${file}:上传文件所在本地的路径 + #打开浏览器 + #ui-login lyf 111111 + Sleep 1 + click id=children5 #点击一级目录Settings + Sleep 1 + click id=sidebarProxy_Profiles #点击二级目录Proxy Profiles + Sleep 2 + click id=respinseAdd #Response Pages点击Create + Sleep 2 + input id=responsepages_profileName ${name} #输入name + Sleep 2 + Choose File xpath=//*[@id="policy_Manipulation_create6"]/div[2]/form/div[2]/div/div/div/input ${file} #上传文件 + Sleep 2 + click xpath=//*[@id="policy_Manipulation_create6"]/div[2]/form/div[4]/div/div/button[1] #点击OK缇交 + Sleep 1 + input xpath=//*[@id="one-input"] ${name} #搜索框输入 + Sleep 1 + click xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div[1]/div[1]/div[2]/i #点击搜索按钮 + Sleep 1 + ${text1} Get Text xpath=//*[@id="ly-table1-listcontent"]/div/div[3]/table/tbody/tr/td[2]/div/div/span #获取点击后页面文本信息 + Should Be Equal As Strings ${text1} ${name} #断言 + #ui-logout + +Edit-Response Pages + [Arguments] ${id-name} ${name} ${name1} ${file} + [Documentation] 引用关键字,填入必填参数 + ... 必填参数: + ... ${id-name}:为选择要查询的类型是ID或者Name的元素 + ... ${name}:为查询输入框输入内容 + ... ${name1}:为修改页面的name输入框里输入的内容 + ... ${file}:为修改页面要上传文件的路径 + Sleep 1 + click xpath=//*[@id="app"]/div/div[2]/ul/li[6]/div #点击一级目录Settings + Sleep 1 + click id=sidebarProxy_Profiles #点击二级目录Proxy Profiles + Sleep 2 + click id=one-input #搜索点击输入框 + sleep 1 + click ${id-name} #选择ID或者name + sleep 1 + input id=sreach_input ${name} + sleep 1 + click xpath=//*[@id="ly-table1-listcontent"]/div/div[3]/table/tbody/tr[1] #点击搜素到的列表 + sleep 1 + click id=resinseEdit #点击Edit + sleep 1 + Clear Element Text id=responsepages_profileName #清空name输入框 + sleep 1 + input id=responsepages_profileName ${name1} + sleep 1 + Choose File xpath=//*[@id="policy_Manipulation_create6"]/div[2]/form/div[5]/div/div/div/input ${file} + sleep 1 + click xpath=//*[@id="policy_Manipulation_create6"]/div[2]/form/div[7]/div/div/button[1] + +Edit-Hijack Files + [Arguments] ${id-name} ${name} ${name1} ${file} ${type} + [Documentation] 引用关键字,填入必填参数 + ... 必填参数: + ... ${id-name}:为选择要查询的类型是ID或者Name的元素 + ... ${name}:为查询输入框输入内容 + ... ${name1}:为修改页面的name输入框里输入的内容 + ... ${file}:为修改页面要上传文件的路径 + ... ${type}:为文件类型的元素 + Sleep 1 + click xpath=//*[@id="app"]/div/div[2]/ul/li[6]/div #点击一级目录Settings + Sleep 1 + click id=sidebarProxy_Profiles #点击二级目录Proxy Profiles + Sleep 2 + click id=profilesTabs_Profile_HijackFiles #点击Hijack files按钮 + sleep 1 + click id=one-input #搜索点击输入框 + sleep 1 + click ${id-name} #选择ID或者name + sleep 1 + input id=sreach_input ${name} #输入搜索内容 + sleep 1 + click xpath=//*[@id="select_new_search_btn"] #点击搜索按钮 + sleep 1 + click xpath=//*[@id="ly-table1-listcontent"]/div/div[3]/table/tbody/tr[1] #点击搜素到的列表 + sleep 1 + click id=hijackEdit #点击Edit + sleep 1 + Clear Element Text id=hijack_profileName #清空输入框 + sleep 1 + input id=hijack_profileName ${name1} #输入框输入 + sleep 1 + Choose File xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div[1]/div[2]/form/div[5]/div/div/div[1]/input ${file} #上传文件 + sleep 1 + click id=hijackAddContentType #点击+号打开侧滑框 + sleep 3 + click ${type} #选择类型 + sleep 1 + click xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div[2]/div/div[2]/button #关闭侧滑框 + sleep 1 + click id=hijackAddOk #点击ok提交 + +Edit-Traffic Mirror Profiles + [Arguments] ${id-name} ${name} ${name1} ${type} ${shuju} + [Documentation] 引用关键字,填入必填参数 + ... 必填参数: + ... ${id-name}:为选择要查询的类型是ID或者Name的元素 + ... ${name}:为查询输入框输入内容 + ... ${name1}:为修改页面的name输入框里输入的内容 + ... ${type}:为选择点击vlan或mac的元素 + ... ${shuju}:为输入框输入内容 + Sleep 1 + click xpath=//*[@id="app"]/div/div[2]/ul/li[6]/div #点击一级目录Settings + Sleep 1 + click id=sidebarProxy_Profiles #点击二级目录Proxy Profiles + Sleep 2 + click id=profilesTabs_Profile_TrafficMirrorProfiles #点击Traffic Mirror Profiles按钮 + sleep 1 + click id=one-input #搜索点击输入框 + sleep 1 + click ${id-name} #选择ID或者name + sleep 1 + input id=sreach_input ${name} #输入搜索内容 + sleep 1 + click xpath=//*[@id="select_new_search_btn"] #点击搜索按钮 + sleep 1 + click xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div[2]/div/div[3]/table/tbody/tr[1] #点击搜素到的列表 + sleep 1 + click id=trafficMirrorEdit #点击Edit + sleep 1 + Clear Element Text id=trafficmirror_profileName #清空输入框 + sleep 1 + input id=trafficmirror_profileName ${name1} #输入框输入 + sleep 1 + click xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div/div[2]/form/div[5]/div/div/div[1]/input #点击下拉框 + sleep 1 + click ${type} #选择vlan或者mac + sleep 1 + Clear Element Text id=trafficmirror_addrArray0 #清空输入框 + sleep 1 + input id=trafficmirror_addrArray0 ${shuju} #输入内容 + sleep 1 + click xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div/div[2]/form/div[8]/div/div/button[1] #点击ok + +import-Trusted Certificate Authorities + [Arguments] ${name} ${file} + [Documentation] 引用次关键字,填入必填参数 + ... 必填参数: + ... ${name}:新建页面name输入框里的内容 + ... ${file}:上传文件所在本地的路径 + #打开浏览器 + #ui-login lyf 111111 + Sleep 1 + click id=children5 #点击一级目录Settings + Sleep 1 + click id=sidebarProxy_CertificateManagement #点击二级目录Trusted Certificate Authorities + Sleep 2 + click id=Authorities_create #点击Import + Sleep 2 + input id=authoritiesAdd_name ${name} #输入name + Sleep 2 + Choose File xpath=//*[@id="upload_dome"]/div/input ${file} #上传文件 + Sleep 2 + click id=authoritiesAdd_sub #点击OK缇交 + Sleep 1 + input xpath=//*[@id="one-input"] ${name} #搜索框输入 + Sleep 1 + click id=select_new_search_btn #点击搜索按钮 + Sleep 1 + ${text1} Get Text xpath=//*[@id="ly-table1-listcontent"]/div/div[3]/table/tbody/tr/td[2]/div/div/div/p/span #获取点击后页面文本信息 + Should Be Equal As Strings ${text1} ${name} #断言 + #ui-logout + +Create-Decryption Keyrings + [Arguments] ${name} ${file} ${file1} ${1or2} ${type} ${type1} + [Documentation] 引用次关键字,填入必填参数 + ... 必填参数: + ... ${name}:新建页面name输入框里的内容 + ... ${file}:上传文件所在本地的路径 + ... ${file1}:上传文件所在本地的路径 + ... ${1or2}:填入1 或者其他 + ... ${type}:上传证书类型的元素 + ... ${type1}:上传证书加密解密算法的元素 + #打开浏览器 + #ui-login lyf 111111 + Sleep 1 + click id=children5 #点击一级目录Settings + Sleep 1 + click id=sidebarProxy_CertificateManagement #点击二级目录Trusted Certificate Authorities + Sleep 2 + click xpath=//*[@id="proxyTabs"]/div/ul/li[2] #点击Decryption Keyrings + sleep 1 + click id=Keyrings_create #点击Create + Sleep 2 + input id=keyringsadd_name ${name} #输入name + Sleep 2 + Choose File xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div/div[2]/form/div[2]/div/div/div/input ${file} #上传文件 + Sleep 2 + Choose File xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div/div[2]/form/div[4]/div/div/div/input ${file1} #上传文件 + ${select} Set Variable ${1or2} + Run Keyword If '${select}'=='1' click id=keyringsadd_customized + Run Keyword If '${select}'=='1' input id=reissueExpiryDate 10 + sleep 1 + click xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div/div[2]/form/div[7]/div/div/div[1] #点击下拉框 + sleep 1 + click ${type} #选择证书类型 + sleep 1 + click xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div/div[2]/form/div[8]/div/div/div[1] #点击下拉框 + sleep 1 + click ${type1} #选择加密解密类型 + sleep 1 + click id=keyringsadd_sub #点击OK缇交 + Sleep 1 + input xpath=//*[@id="one-input"] ${name} #搜索框输入 + Sleep 1 + click id=select_new_search_btn #点击搜索按钮 + Sleep 1 + ${text1} Get Text xpath=//*[@id="ly-table1-listcontent"]/div/div[3]/table/tbody/tr/td[2]/div/div/div/p/span #获取点击后页面文本信息 + Should Be Equal As Strings ${text1} ${name} #断言 + #ui-logout + +Create-SSL Decryption Exclusion + [Arguments] ${name} ${value} ${name1} + [Documentation] 引用次关键字,填入必填参数 + ... 必填参数: + ... ${name}:新建页面name输入框里的内容 + ... ${value}:输入内容 + ... ${naem1}:搜索框填入内容 + Sleep 1 + click id=children5 #点击一级目录Settings + Sleep 1 + click id=sidebarProxy_CertificateManagement #点击二级目录Trusted Certificate Authorities + Sleep 2 + click xpath=//*[@id="proxyTabs"]/div/ul/li[3] #点击SSL Decryption Exclusion按钮 + sleep 1 + click id=ssl_create #点击Create + Sleep 2 + input id=sslAdd_name ${name} #输入name + Sleep 2 + input id=sslAdd_itemDesc ${value} #输入内容 + Sleep 2 + click id=ssl_ok #点击OK缇交 + Sleep 1 + input xpath=//*[@id="one-input"] ${name1} #搜索框输入 + Sleep 1 + click id=select_new_search_btn #点击搜索按钮 + Sleep 1 + ${text1} Get Text xpath=//*[@id="ly-table1-listcontent"]/div/div[3]/table/tbody/tr/td[2]/div/div/div/p/span #获取点击后页面文本信息 + Should Be Equal As Strings ${text1} ${name} #断言 + +Search-Cached Intermediate Certificates + [Arguments] ${type} ${id-sni} ${enabled} + [Documentation] 引用关键字,填入必填参数 + ... ${type}:为搜索类型的元素(id或sni) + ... ${enabled}:为enabled开启或关闭按钮的元素 + Sleep 1 + click id=children5 #点击一级目录Settings + Sleep 1 + click id=sidebarProxy_CertificateManagement #点击二级目录Trusted Certificate Authorities + Sleep 2 + click xpath=//*[@id="proxyTabs"]/div/ul/li[4] #点击Cached Intermediate Certificates按钮 + Sleep 1 + click id=one-input #点击搜索框 + Sleep 1 + click ${type} + Sleep 1 + input id=sreach_input ${id-sni} + click id=select_new_search_btn #点击搜索按钮 + Sleep 1 + click xpath=//*[@id="ly-table1-listcontent"]/div/div[3]/table/tbody/tr/td[8]/div/div/div/p/a/i #点击下载 + Sleep 10 + click ${enabled} #点击enabled按钮 + sleep 1 + +Edit-Trusted Certificate Authorities + [Arguments] ${id-name} ${value} ${name} ${file} + [Documentation] 引用关键字,填入必填参数 + ... 必填参数: + ... ${id-name}:为选择要查询的类型是ID或者Name的元素 + ... ${value}:为查询输入框输入内容 + ... ${name}:为修改页面的name输入框里输入的内容 + ... ${file}:为修改页面要上传文件的路径 + Sleep 1 + click id=children5 #点击一级目录Settings + Sleep 1 + click id=sidebarProxy_CertificateManagement #点击二级目录Trusted Certificate Authorities + Sleep 2 + click id=one-input #点击搜索框 + sleep 1 + click ${id-name} #选择搜索类型 + sleep 1 + input id=sreach_input ${value} #输入内容 + sleep 1 + click id=select_new_search_btn #点击搜索按钮 + sleep 1 + click xpath=//*[@id="ly-table1-listcontent"]/div/div[3]/table/tbody/tr #点击搜索列表 + sleep 1 + click id=Authorities_edit #点击Edit按钮 + sleep 1 + Clear Element Text id=authoritiesAdd_name #清空name输入框 + sleep 1 + input id=authoritiesAdd_name ${name} #输入name + sleep 1 + Choose File xpath=//*[@id="upload_dome"]/div/input ${file} #上传文件 + sleep 1 + click id=authoritiesAdd_sub #点击ok + +Edit-Decryption Keyrings + [Arguments] ${id-name} ${value} ${name} ${file} ${file1} ${1or2} + ... ${type} ${type1} + [Documentation] 引用次关键字,填入必填参数 + ... 必填参数: + ... ${id-name}:为选择要查询的类型是ID或者Name的元素 + ... ${value}:为查询输入框输入内容 + ... ${name}:新建页面name输入框里的内容 + ... ${file}:上传文件所在本地的路径 + ... ${file1}:上传文件所在本地的路径 + ... ${1or2}:填入1 或者其他 + ... ${type}:上传证书类型的元素 + ... ${type1}:上传证书加密解密算法的元素 + Sleep 1 + click id=children5 #点击一级目录Settings + Sleep 1 + click id=sidebarProxy_CertificateManagement #点击二级目录Trusted Certificate Authorities + Sleep 2 + click xpath=//*[@id="proxyTabs"]/div/ul/li[2] #点击Decryption Keyrings + sleep 1 + click id=one-input #点击搜索框 + sleep 1 + click ${id-name} #选择搜索类型 + sleep 1 + input id=sreach_input ${value} #输入内容 + sleep 1 + click id=select_new_search_btn #点击搜索按钮 + sleep 1 + click xpath=//*[@id="ly-table1-listcontent"]/div/div[3]/table/tbody/tr #点击搜索列表 + sleep 1 + click id=Keyrings_edit #点击Edit按钮 + sleep 1 + Clear Element Text id=keyringsadd_name #清空name输入框 + sleep 1 + input id=keyringsadd_name ${name} #输入name + sleep 1 + Choose File xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div/div[2]/form/div[5]/div/div/div/input ${file} #上传文件 + Sleep 2 + Choose File xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div/div[2]/form/div[7]/div/div/div/input ${file1} #上传文件 + ${select} Set Variable ${1or2} + Run Keyword If '${select}'=='1' click id=keyringsadd_customized + Run Keyword If '${select}'=='1' input id=reissueExpiryDate 10 + sleep 1 + click xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div/div[2]/form/div[10]/div/div/div[1] #点击下拉框 + sleep 1 + click ${type} #选择证书类型 + sleep 1 + click xpath=//*[@id="app"]/div/div[3]/div/div/div[2]/div/div[2]/form/div[11]/div/div/div[1] #点击下拉框 + sleep 1 + click ${type1} #选择加密解密类型 + sleep 1 + click id=keyringsadd_sub #点击OK缇交 + +Edit-SSL Decryption Exclusion + [Arguments] ${id-name} ${value} ${name} ${value1} + [Documentation] 引用关键字,填入必填参数 + ... ${id-name}:id或者name的元素 + ... ${value}:输入搜索的内容 + ... ${name}:输入name + ... ${calue1}:输入内容 + Sleep 1 + click id=children5 #点击一级目录Settings + Sleep 1 + click id=sidebarProxy_CertificateManagement #点击二级目录Trusted Certificate Authorities + Sleep 2 + click xpath=//*[@id="proxyTabs"]/div/ul/li[3] #点击SSL Decryption Exclusion按钮 + sleep 1 + click id=one-input #点击搜索框 + sleep 1 + click ${id-name} #选择搜索类型 + sleep 1 + input id=sreach_input ${value} #输入内容 + sleep 1 + click id=select_new_search_btn #点击搜索按钮 + sleep 1 + click xpath=//*[@id="ly-table1-listcontent"]/div/div[3]/table/tbody/tr #点击搜索列表 + Sleep 1 + click id=ssl_edit #点击Edit + Sleep 1 + Clear Element Text id=sslAdd_name #清空name输入框 + sleep 1 + input id=sslAdd_name ${name} #输入name + sleep 1 + input id=sslAdd_itemDesc ${value1} #输入内容 + Sleep 2 + click id=ssl_ok #点击OK缇交 diff --git a/02-Keyword/tsg_ui/Tag/Tags.robot b/02-Keyword/tsg_ui/Tag/Tags.robot new file mode 100644 index 0000000..5e04028 --- /dev/null +++ b/02-Keyword/tsg_ui/Tag/Tags.robot @@ -0,0 +1,120 @@ +*** Settings *** +Library Selenium2Library + +*** Keywords *** +ui-tags-create + [Arguments] ${tag-name} ${color-element} ${tag-value} + [Documentation] 引用关键字,填入必填参数: + ... ${tag-name}:输入tag 的name + ... ${color-element}:选择tag字体的颜色 + ... ${tag-value}:输入tag内容 + click element id=tagAdd #点击create按钮,新建tag + sleep 2 + input text id=tagsAdd_name ${tag-name} #输入tag name + sleep 1 + click element id=tagsAdd_color #点击color + sleep 2 + click element ${color-element} #选择tag字体颜色 + sleep 2 + input text id=tag_tagName0 ${tag-value} #输入tag内容 + sleep 1 + click element id=tagAddOk1 + sleep 1 + +ui-tags-create-1 + [Arguments] ${tag-name} ${color-element} ${tag-value} ${tag-value1} + [Documentation] 引用关键字,填入必填参数: + ... ${tag-name}:输入tag 的name + ... ${color-element}:选择tag字体的颜色 + ... ${tag-value}:输入tag内容 + ... ${tag-value1}:输入tag内容 + click element id=tagAdd #点击create按钮,新建tag + sleep 2 + input text id=tagsAdd_name ${tag-name} #输入tag name + sleep 1 + click element id=tagsAdd_color #点击color + sleep 2 + click element ${color-element} #选择tag字体颜色 + sleep 1 + input text id=tag_tagName0 ${tag-value} #输入tag内容 + sleep 1 + click element id=tagAddInput + input text id=tag_tagName1 ${tag-value1} #输入tag内容 + sleep 1 + click element id=tagAddOk1 + +ui-tags-edit + [Arguments] ${tag-name} ${color-element} ${tag-value} + [Documentation] 引用关键字,填入必填参数: + ... ${tag-name}:输入tag 的name + ... ${color-element}:选择tag字体的颜色 + ... ${tag-value}:输入tag内容 + sleep 1 + click element id=tagEdit #点击edit按钮 + sleep 2 + input text id=tagsAdd_name ${tag-name} #输入tag name + sleep 2 + click element id=tagsAdd_color #点击color + sleep 1 + click element ${color-element} #选择tag字体颜色 + sleep 1 + input text id=tag_tagName0 ${tag-value} #输入tag内容 + sleep 1 + click element id=tagAddOk1 + sleep 1 + +ui-tags-search-id + [Arguments] ${id} + sleep 1 + click element id=one-input + sleep 1 + click element id=input_list_li1 + sleep 1 + input text id=sreach_input ${id} + sleep 1 + click element id=select_new_search_btn + sleep 1 + click element xpath=//*[@id="ly-table1-listcontent"]/div/div[3]/table + +ui-tags-search-name + [Arguments] ${name} + sleep 1 + click element id=one-input + sleep 1 + click element id=input_list_li2 + sleep 1 + input text id=sreach_input ${name} + sleep 1 + click element id=select_new_search_btn + sleep 1 + click element xpath=//*[@id="ly-table1-listcontent"]/div/div[3]/table + +ui-tags-delete + sleep 1 + click element id=tagDel #点击删除按钮 + sleep 1 + click element id=tags-tagsDel-confirm + +ui-tags-edit-1 + [Arguments] ${tag-name} ${color-element} ${tag-value} ${tag-value1} + [Documentation] 引用关键字,填入必填参数: + ... ${tag-name}:输入tag 的name + ... ${color-element}:选择tag字体的颜色 + ... ${tag-value}:输入tag内容 + ... ${tag-value1}:输入tag内容 + sleep 1 + click element id=tagEdit #点击edit按钮 + sleep 2 + input text id=tagsAdd_name ${tag-name} #输入tag name + sleep 1 + click element id=tagsAdd_color #点击color + sleep 1 + click element ${color-element} #选择tag字体颜色 + sleep 2 + input text id=tag_tagName0 ${tag-value} #输入tag内容 + sleep 1 + sleep 1 + click element id=tagAddInput + input text id=tag_tagName1 ${tag-value1} #输入tag内容 + click element id=tagAddOk1 + sleep 1 |
