*** Settings *** Library json Library Collections Library Selenium2Library Resource ../objects/NewObject.robot Resource ../../../02-Keyword/tsg_ui/Menu.robot Resource ../../../03-Variable/PolicyObjectDefault.txt Resource ../../../03-Variable/BifangApiVariable.txt *** Keywords *** UIAddPolicies [Arguments] ${PolicyInfo} ${SourceInfo}=null ${DestinationInfo}=null ${FilterInfo}=null ${Subactionadd}=null ${Keyring}=null ${MirrorDecryptedTrafficInfo}=null ${DecryptionProfile}=null ... ${ProxyDenyadd}=null ${DenyRedirectadd}=null ${ReplaceActionParameters}=null ${HijackFileadd}=null ${InsertScript}=null [Documentation] 创建策略 ... 调用次关键字前需要添加参数: ... ${PolicyInfo}是个字典:实例 ${PolicyInfo} Create Dictionary PolicyType=Security Policy PolicyName=${TEST NAME} PolicyAction=deny PolicySubAction=RST ApplicationSearch=HTTP PolicyLogSession=1 PolicyEnabled=1 ... ${SourceInfo}是个字典:实例:sourceAddIpList=${sourceAddIpList} ${sourceAddIpList}是个列表,${sourceAddIpList} Create List ${sip1} 列表中是个字典:,实例:${sip1} Create Dictionary Sordtype=Source Type1=Ip CreateOrSearch=Create Add=Address Name=${TEST NAME}_IP1 Ipclienttext1=192.168.40.11-192.168.40.110 Port=1-65535 ... ${DestinationInfo}和${SourceInfo}格式一致 ... ${FilterInfo}是个字典:实例${FilterInfo} Create Dictionary Filter=${filter} Hostname=${hostname} URLname=${urlname} Request Headername=${RequestHeadername} Response Headername=${ResponseHeadername} 其中${filter}是个列表:实例${filter} create list Host URL Request Header Response Header Request Content,其中${xxxname}是对象的名字 ... ${Subactionadd}是一个字典:在"${PolicyType}"=="Security Policy" and "${PolicyAction}"=="deny" 并且PolicySubAction为Block或Alert或Redirect时需要的一个参数,例如:PolicySubAction=Block时需要填入:${Subactionadd} Create Dictionary code=403 Content=TEXT block-text=123456 ... ${Keyring}是一个字典,在"${PolicyType}"=="Security Policy" and "${PolicyAction}"=="intercept" and "ApplicationSearchV"=="SSL" 时需要根据用例情况填入,例如:name=证书名字 ${File}=文件所在路径 ${File1}=文件所在路径 ExpiryHours1or2=1或其他 ${Type}=上传证书类型的元素 ${Type1}=上传证书加密解密算法的元素 ${Shift}=close或open ${PrivateKeyType}=HSM或其他 ... ${MirrorDecryptedTrafficInfo}是个字典:在"${PolicyType}"=="Security Policy" and "${PolicyAction}"=="intercept" and "ApplicationSearchV"=="SSL" 时需要根据用例情况填入,例如:${MirrorDecryptedTraffic}=输入open代表开启按钮,其他代表不开启,${MirrorDecryptedTrafficSearchorCreate}=填入Create或Search,${MirrorDecryptedTrafficname}=解密流量文件的name,${Type}=是mac还是vlan的定位元素,${Shuru}=输入mac或vlan的值 ... ${DecryptionProfile}是个字典:在"${PolicyType}"=="Security Policy" and "${PolicyAction}"=="intercept" and "ApplicationSearchV"=="SSL" 时需要根据用例情况填入,例如:${DecryptionProfileSearchorCreate}=填入Create或Search,${DecryptionProfilename}=文件name,${Dict1}:是个字典,等于1为开启,等于0为关闭,例如:Common Name=1 Issuer=1 Self-signed=1 Expiry Date=1 EV Certificat=1 Certificate Transparency=1 Mutual Authentication=1 On Protocol Errors=1 Certificate Pinning=1 Certificate Not Installed=1 Mirror Client Versions=1 Allow HTTP/2=1 ${Fail1} =输入Fail-close或Pass-through,${Min1}=输入协议版本,${Max1}=输入协议版本, ... ${ProxyDenyadd}是个字典:例如:${DenyCode}=填入403或404或451,${Action}=填入deny,${Code}=填入403或404,${Content}=填入TEXT或Profile,${SearchorCreate}=填入Search或Create,${BlockText}=填入TEXT文本框内容,${ProfileName}=Profile的名字,${File}=上传文件路径,${TextValue}=填入text输入框内容 ... ${DenyRedirectadd}是个字典:例如:${QType}:填入A或AAAA,${Avalue}:根据${QType}填入IPV4或IPV6的值,${Attl}:根据${QType}填入A的ttl值或AAAA的ttl值,${CNAMEvalue}:根据${QType}填入A的CNAME的域名值或AAAA的CNAME域名值,${CNAMEttl}:根据${QType}填入A的CNAME的ttl值或AAAA的CNAME的ttl值 ... ${ReplaceActionParameters}是个字典:例如:${ParametersType}:列表格式,Search 下拉框中内容 ,${xxxFind}:是Find输入框输入的值,${XXXReplacewith}:是 Replacewith输入框中输入的值 ... ${HijackFileadd}是个字典:例如:${SearchorCreate}:填入Search或Create,${Hijackname}:填入新建hijack的name,${Hijackfile}:填入新建hijack文件的路径,${DowName}:根据情况填入close或open或其他,${Input};填入shuru或其他,${Hijacktype}:填入选择文件类型的元素 ... ${InsertScript}是个字典:例如:${SearchorCreate}:填入Search或Create,${Insertname}:填入新建insert的name,${Insertfile}:填入新建insert文件的路径,${Inserttype}:根据情况填入css或js,${Insertjstype};填入Before Page Load或After Page Load ${emptyList} Create List ${return} ${PolicyType} Run Keyword And Ignore Error Get From Dictionary ${PolicyInfo} PolicyType ${PolicyType} Run Keyword If "${return}"=="FAIL" or "${PolicyType}"=="${EMPTY}" set variable ${Default_PolicyType} ... ELSE set variable ${PolicyType} ${return} ${PolicyName} Run Keyword And Ignore Error Get From Dictionary ${PolicyInfo} PolicyName ${PolicyName} Run Keyword If "${return}"=="FAIL" or "${PolicyName}"=="${EMPTY}" set variable ${Default_PolicyName} ... ELSE set variable ${PolicyName} ${return} ${PolicyAction} Run Keyword And Ignore Error Get From Dictionary ${PolicyInfo} PolicyAction ${PolicyAction} Run Keyword If "${return}"=="FAIL" or "${PolicyAction}"=="${EMPTY}" set variable ${Default_Action} ... ELSE set variable ${PolicyAction} ${return} ${PolicySubAction} Run Keyword And Ignore Error Get From Dictionary ${PolicyInfo} PolicySubAction ${PolicySubAction} Run Keyword If "${return}"=="FAIL" or "${PolicySubAction}"=="${EMPTY}" set variable ${Default_PolicySubAction} ... ELSE set variable ${PolicySubAction} ${return} ${ApplicationSearch} Run Keyword And Ignore Error Get From Dictionary ${PolicyInfo} ApplicationSearch ${ApplicationSearchV} Run Keyword If "${return}"!="FAIL" and "${ApplicationSearch}"!="${EMPTY}" and "${ApplicationSearch}"!="${None}" Evaluate list(re.split('[,]', '${ApplicationSearch}')) re ... ELSE Set Variable ${emptyList} ${return} ${PolicyLogSession} Run Keyword And Ignore Error Get From Dictionary ${PolicyInfo} PolicyLogSession ${PolicyLogSession} Run Keyword If "${return}"=="FAIL" or "${PolicyLogSession}"=="${EMPTY}" set variable ${Default_PolicyLogSession} ... ELSE set variable ${PolicyLogSession} ${return} ${LogOptions} Run Keyword And Ignore Error Get From Dictionary ${PolicyInfo} LogOptions ${LogOptions} Run Keyword If "${return}"=="FAIL" or "${LogOptions}"=="${EMPTY}" set variable 1 ... ELSE set variable ${LogOptions} ${return} ${PolicyEnabled} Run Keyword And Ignore Error Get From Dictionary ${PolicyInfo} PolicyEnabled ${PolicyEnabled} Run Keyword If "${return}"=="FAIL" or "${PolicyEnabled}"=="${EMPTY}" set variable ${Default_PolicyEnabled} ... ELSE set variable ${PolicyEnabled} Comment 新建策略 打开菜单 Menu policys ${PolicyType} Comment 新建策略 打开安全策略列表上方的新建策略按钮 UIPolicy.CreateButton UIPolicy.Create-name ${PolicyType} ${PolicyName} UIPolicy.Create-actions ${PolicyType} ${PolicyAction} #Create-Source-Button Run Keyword If "${SourceInfo}"=="${EMPTY}" log there is no SourceInfoDict ... ELSE UIPolicy. Create-Source-Button Run Keyword If "${SourceInfo}"=="${EMPTY}" log there is no SourceInfoDict ... ELSE UIPolicy.CreateEditDeleteSources ${SourceInfo} Run Keyword If "${DestinationInfo}"=="${EMPTY}" log there is no DestinationInfo ... ELSE UIPolicy.Create-Destination-Button Run Keyword If "${DestinationInfo}"=="${EMPTY}" log there is no DestinationInfo ... ELSE UIPolicy.CreateEditDeleteDestination ${DestinationInfo} UIPolicy.Create-Application-Button ${PolicyType} ${ApplicationSearchV} ${PolicyAction} #编辑filter Run Keyword If "${FilterInfo}"=="null" log there is no FilterInfo ... ELSE Create-Filter-SecurityOrProxy ${PolicyType} ${ApplicationSearchV}[0] ${FilterInfo} Run Keyword If "${PolicyType}"=="Security Policy" and "${PolicyAction}"=="Deny" run keywords sleep ${sleep} ... AND Deny-subaction-1 ${PolicyAction} ${PolicySubAction} ${Subactionadd} Run Keyword If "${PolicyType}"=="Security Policy" and "${PolicyAction}"=="intercept" and "${ApplicationSearchV}"=="SSL" run keywords sleep ${sleep} ... AND Interceptadd ${Keyring} ${MirrorDecryptedTrafficInfo} ${DecryptionProfile} Run Keyword If "${PolicyType}"=="Proxy Policy" and "${PolicyAction}"=="Deny" run keywords sleep ${sleep} ... AND Proxy-Deny ${ProxyDenyadd} Run Keyword If "${PolicyType}"=="Proxy Policy" and "${PolicyAction}"=="Redirect" run keywords sleep ${sleep} ... AND Deny-Redirect ${DenyRedirectadd} Run Keyword If "${PolicyType}"=="Proxy Policy" and "${PolicyAction}"=="Replace" run keywords sleep ${sleep} ... AND Replace-Action-Parameters-for1 ${ReplaceActionParameters} Run Keyword If "${PolicyType}"=="Proxy Policy" and "${PolicyAction}"=="Hijack" run keywords sleep ${sleep} ... AND HijackFile-SearchorCreate ${HijackFileadd} Run Keyword If "${PolicyType}"=="Proxy Policy" and "${PolicyAction}"=="Insert" run keywords sleep ${sleep} ... AND InsertScript-SearchorCreate ${InsertScript} Run Keyword If "${PolicyType}"=="Proxy Policy" run keywords ProxyLogSession ${PolicyLogSession} ... AND ProxyLogOptions ${LogOptions} ... ELSE LogSession ${PolicyLogSession} Run Keyword If "${PolicyType}"=="Security Policy" Enabled ${PolicyEnabled} ... ELSE ProxyEnabled ${PolicyEnabled} Run Keyword If "${PolicyType}"=="Security Policy" Security-Policies-OK ... ELSE Proxy-Policies-OK Security-Source Name ${PolicyName} Run Keyword If "${PolicyType}"=="Security Policy" SecurityAssert ${PolicyName} ... ELSE ProxyAssert ${PolicyName} UIUpdataPolicies [Arguments] ${PolicyInfo} ${SourceInfo}=null ${DestinationInfo}=null ${FilterInfo}=null ${Subactionadd}=null ${Keyring}=null ${MirrorDecryptedTrafficInfo}=null ${DecryptionProfile}=null ... ${ProxyDenyadd}=null ${DenyRedirectadd}=null ${ReplaceActionParameters}=null ${HijackFileadd}=null ${InsertScript}=null [Documentation] 编辑策略 ${emptyList} Create List ${return} ${PolicyType} Run Keyword And Ignore Error Get From Dictionary ${PolicyInfo} PolicyType ${PolicyType} Run Keyword If "${return}"=="FAIL" or "${PolicyType}"=="${EMPTY}" set variable ${Default_PolicyType} ... ELSE set variable ${PolicyType} ${return} ${PolicyName} Run Keyword And Ignore Error Get From Dictionary ${PolicyInfo} PolicyName ${PolicyName} Run Keyword If "${return}"=="FAIL" or "${PolicyName}"=="${EMPTY}" set variable ${Default_PolicyName} ... ELSE set variable ${PolicyName} ${return} ${PolicyEditName} Run Keyword And Ignore Error Get From Dictionary ${PolicyInfo} PolicyEditName ${PolicyEditName} Run Keyword If "${return}"=="FAIL" or "${PolicyEditName}"=="${EMPTY}" set variable ${Default_PolicyName} ... ELSE set variable ${PolicyEditName} ${return} ${PolicyAction} Run Keyword And Ignore Error Get From Dictionary ${PolicyInfo} PolicyAction ${PolicyAction} Run Keyword If "${return}"=="FAIL" or "${PolicyAction}"=="${EMPTY}" set variable ${Default_Action} ... ELSE set variable ${PolicyAction} ${return} ${PolicySubAction} Run Keyword And Ignore Error Get From Dictionary ${PolicyInfo} PolicySubAction ${PolicySubAction} Run Keyword If "${return}"=="FAIL" or "${PolicySubAction}"=="${EMPTY}" set variable ${Default_PolicySubAction} ... ELSE set variable ${PolicySubAction} ${return} ${ApplicationSearch} Run Keyword And Ignore Error Get From Dictionary ${PolicyInfo} ApplicationSearch ${ApplicationSearchV} Run Keyword If "${return}"!="FAIL" and "${ApplicationSearch}"!="${EMPTY}" and "${ApplicationSearch}"!="${None}" Evaluate list(re.split('[,]', '${ApplicationSearch}')) re ... ELSE Set Variable ${emptyList} ${return} ${ApplicationFilter} Run Keyword And Ignore Error Get From Dictionary ${PolicyInfo} ApplicationFilter ${ApplicationFilter} Run Keyword If "${return}"=="FAIL" or "${ApplicationFilter}"=="${EMPTY}" set variable null ... ELSE set variable ${ApplicationFilter} ${return} ${PolicyLogSession} Run Keyword And Ignore Error Get From Dictionary ${PolicyInfo} PolicyLogSession ${PolicyLogSession} Run Keyword If "${return}"=="FAIL" or "${PolicyLogSession}"=="${EMPTY}" set variable ${Default_PolicyLogSession} ... ELSE set variable ${PolicyLogSessionession} ${return} ${LogOptions} Run Keyword And Ignore Error Get From Dictionary ${PolicyInfo} LogOptions ${LogOptions} Run Keyword If "${return}"=="FAIL" or "${LogOptions}"=="${EMPTY}" set variable 1 ... ELSE set variable ${LogOptions} ${return} ${PolicyEnabled} Run Keyword And Ignore Error Get From Dictionary ${PolicyInfo} PolicyEnabled ${PolicyEnabled} Run Keyword If "${return}"=="FAIL" or "${PolicyEnabled}"=="${EMPTY}" set variable ${Default_PolicyEnabled} ... ELSE set variable ${PolicyEnabled} Comment 新建策略 打开菜单 Menu policys ${PolicyType} Comment 新建策略 打开安全策略列表上方的新建策略按钮 UIPolicy.CreateButton Comment 搜索要编辑的策略 Security-Source Name ${PolicyName} Comment 点击编辑按钮Edit EditButton Comment 编辑name UIPolicy.Create-name ${PolicyType} ${PolicyEditName} Comment 编辑action UIPolicy.Create-actions ${PolicyType} ${PolicyAction} Comment 编辑Source Run Keyword If "${SourceInfo}"=="${EMPTY}" log there is no SourceInfoDict ... ELSE UIPolicy. Create-Source-Button Run Keyword If "${SourceInfo}"=="${EMPTY}" log there is no SourceInfoDict ... ELSE UIPolicy.CreateEditDeleteSources ${SourceInfo} Comment 编辑Destination Run Keyword If "${DestinationInfo}"=="${EMPTY}" log there is no DestinationInfo ... ELSE UIPolicy.Create-Destination-Button Run Keyword If "${DestinationInfo}"=="${EMPTY}" log there is no DestinationInfo ... ELSE UIPolicy.CreateEditDeleteDestination ${DestinationInfo} Comment 编辑Application UIPolicy.Create-Application-Button ${PolicyType} ${ApplicationSearchV} ${PolicyAction} #编辑filter Run Keyword If "${FilterInfo}"=="${EMPTY}" log there is no FilterInfo ... ELSE Create-Filter-SecurityOrProxy ${PolicyType} ${ApplicationFilter} ${FilterInfo} Run Keyword If "${PolicyType}"=="Security Policy" and "${PolicyAction}"=="deny" run keywords sleep ${sleep} ... AND Deny-subaction-1 ${PolicyAction} ${PolicySubAction} ${Subactionadd} Run Keyword If "${PolicyType}"=="Security Policy" and "${PolicyAction}"=="intercept" and "ApplicationSearchV"=="SSL" run keywords sleep ${sleep} ... AND Interceptadd ${Keyring} ${MirrorDecryptedTrafficInfo} ${DecryptionProfile} Run Keyword If "${PolicyType}"=="Proxy Policy" and "${PolicyAction}"=="deny" run keywords sleep ${sleep} ... AND Proxy-Deny ${ProxyDenyadd} Run Keyword If "${PolicyType}"=="Proxy Policy" and "${PolicyAction}"=="redirect" run keywords sleep ${sleep} ... AND Deny-Redirect ${DenyRedirectadd} Run Keyword If "${PolicyType}"=="Proxy Policy" and "${PolicyAction}"=="replace" run keywords sleep ${sleep} ... AND Replace-Action-Parameters-for1 ${ReplaceActionParameters} Run Keyword If "${PolicyType}"=="Proxy Policy" and "${PolicyAction}"=="hijack" run keywords sleep ${sleep} ... AND HijackFile-SearchorCreate ${HijackFileadd} Run Keyword If "${PolicyType}"=="Proxy Policy" and "${PolicyAction}"=="insert" run keywords sleep ${sleep} ... AND InsertScript-SearchorCreate ${InsertScript} Run Keyword If "${PolicyType}"=="Proxy Policy" run keywords ProxyLogSession ${PolicyLogSession} ... AND ProxyLogOptions ${LogOptions} ... ELSE LogSession ${PolicyLogSession} Run Keyword If "${PolicyType}"=="Security Policy" Enabled ${PolicyEnabled} ... ELSE ProxyEnabled ${PolicyEnabled} Run Keyword If "${PolicyType}"=="Security Policy" Security-Policies-OK ... ELSE Proxy-Policies-OK Security-Source Name ${PolicyName} Run Keyword If "${PolicyType}"=="Security Policy" SecurityAssert ${PolicyName} ... ELSE ProxyAssert ${PolicyName} SecurityAssert [Arguments] ${PolicyName} ${text} get text xpath=//*[@id="ly-table1-listcontent"]/div/div[3]/table/tbody/tr/td[2]/div/div/p Should Be Equal As Strings ${text} ${PolicyName} ProxyAssert [Arguments] ${PolicyName} ${text} get text xpath=//*[@id="ly-table1-listcontent"]/div/div[3]/table/tbody/tr/td[2]/div/div/div/p Should Be Equal As Strings ${text} ${PolicyName} CreateEditDeleteSources [Arguments] ${SourceInfoDict} [Documentation] 策略源条件处理、包括增加:create、search,update、delete几个列表; ... 格式:新增:Type1=IP option=Create Add=Address name=zdhip001 Ipclienttext1=192.168.100.1 Port=1 ... 修改:Type1=IP option=Update Add=Address name=zdhip001 Ipclienttext1=192.168.100.1 Port=1 把为name对应值的的记录修改为输入的内容 ... 新增:Type1=Geography option=Create Add=Address name=zdhip001 Ipclienttext1=192.168.100.1 Port=1geo ${return} ${AddList} Run Keyword And Ignore Error Get From Dictionary ${SourceInfoDict} sourceAddIpList Run Keyword If "${return}"=="FAIL" or "${AddList}"=="${EMPTY}" log there is no CreateSource ... ELSE CreateSources1 ${AddList} CreateSources1 [Arguments] ${AddList} [Documentation] 调用次关键字前需要添加必填参数: ... ${Type1}:填入Ip或SUBID或Geography或IPLearning ... ${CreateOrSearch}:填入Create或者Search ... ${Add}:填入Address或Group ... ${Name}:名称 ... ${Ip_type}:填入Ip或者Geography或者IPLearning ... ${Ipclienttext1}:填入IPV4或6的值或range的ip段 ... ${Port}:填入端口 ... ${Country}:列表形式,列表中是国家名字 ... ${City}:列表形式,列表中是城市名字 ... ${Protocols1}:填入HTTP或SSL或HTTPSSL ... ${Degree}:填入1Degree或2Degree ... ${Times}:填入小时数,例如1或2 ... ${Numbers}:填入数值,例如1或10000 ... ${Limits}:填入数值,例如1或10000 ... ${ObjectName}:列表形式,列表中是对象的名字 ... ${Keywordtext}:填入新建subid的内容 ... 判断新建source选择用什么样的类型数据 ${listlenth}= Get Length ${AddList} #${tempValue} set Variable tempValue #FOR ${var} IN RANGE ${AddList} FOR ${var} IN RANGE ${listlenth} log ${var} ${tempValue} Get From List ${AddList} ${var} CreateSource ${tempValue} END CreateEditDeleteDestination [Arguments] ${DestinationInfoDict} [Documentation] 策略源条件处理、包括增加:create、search,update、delete几个列表; ... 格式:新增:Type1=IP option=Create Add=Address name=zdhip001 Ipclienttext1=192.168.100.1 Port=1 ... 修改:Type1=IP option=Update Add=Address name=zdhip001 Ipclienttext1=192.168.100.1 Port=1 把为name对应值的的记录修改为输入的内容 ... 新增:Type1=Geography option=Create Add=Address name=zdhip001 Ipclienttext1=192.168.100.1 Port=1geo ${return} ${AddList} Run Keyword And Ignore Error Get From Dictionary ${DestinationInfoDict} destinationAddIpList Run Keyword If "${return}"=="FAIL" or "${AddList}"=="${EMPTY}" log there is no CreateSource ... ELSE CreateDestination1 ${AddList} CreateDestination1 [Arguments] ${AddList} [Documentation] 调用次关键字前需要添加必填参数: ... ${Type1}:填入Ip或SUBID或Geography或IPLearning ... ${CreateOrSearch}:填入Create或者Search ... ${Add}:填入Address或Group ... ${Name}:名称 ... ${Ip_type}:填入Ip或者Geography或者IPLearning ... ${Ipclienttext1}:填入IPV4或6的值或range的ip段 ... ${Port}:填入端口 ... ${Country}:列表形式,列表中是国家名字 ... ${City}:列表形式,列表中是城市名字 ... ${Protocols1}:填入HTTP或SSL或HTTPSSL ... ${Degree}:填入1Degree或2Degree ... ${Times}:填入小时数,例如1或2 ... ${Numbers}:填入数值,例如1或10000 ... ${Limits}:填入数值,例如1或10000 ... ${ObjectName}:列表形式,列表中是对象的名字 ... ${Keywordtext}:填入新建subid的内容 ... 判断新建source选择用什么样的类型数据 ${listlenth}= Get Length ${AddList} #${tempValue} set Variable tempValue #FOR ${var} IN RANGE ${AddList} FOR ${var} IN RANGE ${listlenth} log ${var} ${tempValue} Get From List ${AddList} ${var} Create-Destination ${tempValue} END CreateSource [Arguments] ${AddDict} #[Arguments] ${PolicyType}=null ${Type1}=null ${CreateOrSearch}=null ${Add}=null ${Name}=null #... ${ObjectName}=null ${Ipclienttext1}=null ${Port}=null ${Country}=null ${City}=null #... ${Protocols1}=null ${Degree}=null ${Times}=null ${Numbers}=null ${Limits}=null ${Keywordtext}=null [Documentation] 调用次关键字前需要添加必填参数: ... ${PolicyType}:填入安全策略或管控策略或tcp策略中前置元素:安全和代理源:/html/body/div[1]/div/div[3]/div[2]/div/div[1]/form/div/div[4] 安全和代理目的:/html/body/div[1]/div/div[3]/div[2]/div/div[1]/form/div/div[5] ... tcp源:/html/body/div[1]/div/div[3]/div[2]/div/div/div[1]/div[1]/div/div[2]/form/div[2] ... tcp目的:/html/body/div[1]/div/div[3]/div[2]/div/div/div[1]/div[1]/div/div[2]/form/div[3] ... ${Type1}:填入Ip或SUBID或Geography或IPLearning ... ${CreateOrSearch}:填入Create或者Search ... ${Add}:填入Address或Group ... ${Name}:名称 ... ${Ip_type}:填入Ip或者Geography或者IPLearning ... ${Ipclienttext1}:填入IPV4或6的值或range的ip段 ... ${Port}:填入端口 ... ${Country}:列表形式,列表中是国家名字 ... ${City}:列表形式,列表中是城市名字 ... ${Protocols1}:填入HTTP或SSL或HTTPSSL ... ${Degree}:填入1Degree或2Degree ... ${Times}:填入小时数,例如1或2 ... ${Numbers}:填入数值,例如1或10000 ... ${Limits}:填入数值,例如1或10000 ... ${ObjectName}:列表形式,列表中是对象的名字 ... ${Keywordtext}:填入新建subid的内容 ... 判断新建source选择用什么样的类型数据 #调用次关键字前需要添加必填参数: ${return} ${Sordtype} Run Keyword And Ignore Error Get From Dictionary ${AddDict} Sordtype ${Sordtype} Run Keyword If "${return}"=="FAIL" or "${Sordtype}"=="${EMPTY}" set variable Source ... ELSE set variable ${Sordtype} ${typepath} Run Keyword If "${Sordtype}"=="Source" set variable /html/body/div[1]/div/div[3]/div[2]/div/div[1]/form/div/div[4] ... ELSE set variable /html/body/div[1]/div/div[3]/div[2]/div/div[1]/form/div/div[5] ${return} ${Type1} Run Keyword And Ignore Error Get From Dictionary ${AddDict} Type1 ${Type1} Run Keyword If "${return}"=="FAIL" or "${Type1}"=="${EMPTY}" set variable IP ... ELSE set variable ${Type1} ${return} ${CreateOrSearch} Run Keyword And Ignore Error Get From Dictionary ${AddDict} CreateOrSearch ${CreateOrSearch} Run Keyword If "${return}"=="FAIL" or "${CreateOrSearch}"=="${EMPTY}" set variable Create ... ELSE set variable ${CreateOrSearch} ${return} ${Add} Run Keyword And Ignore Error Get From Dictionary ${AddDict} Add ${Add} Run Keyword If "${return}"=="FAIL" or "${Add}"=="${EMPTY}" set variable Add ... ELSE set variable ${Add} ${return} ${ObjectName} Run Keyword And Ignore Error Get From Dictionary ${AddDict} ObjectName ${ObjectName} Run Keyword If "${return}"=="FAIL" or "${ObjectName}"=="${EMPTY}" set variable null ... ELSE set variable ${ObjectName} ${return} ${Name} Run Keyword And Ignore Error Get From Dictionary ${AddDict} Name ${Name} Run Keyword If "${return}"=="FAIL" or "${Name}"=="${EMPTY}" set variable null ... ELSE set variable ${Name} ${return} ${Ipclienttext1} Run Keyword And Ignore Error Get From Dictionary ${AddDict} Ipclienttext1 ${Ipclienttext1} Run Keyword If "${return}"=="FAIL" or "${Ipclienttext1}"=="${EMPTY}" set variable null ... ELSE set variable ${Ipclienttext1} ${return} ${Port} Run Keyword And Ignore Error Get From Dictionary ${AddDict} Port ${Port} Run Keyword If "${return}"=="FAIL" or "${Port}"=="${EMPTY}" set variable null ... ELSE set variable ${Port} ${return} ${Country} Run Keyword And Ignore Error Get From Dictionary ${AddDict} Country ${Country} Run Keyword If "${return}"=="FAIL" or "${Country}"=="${EMPTY}" set variable null ... ELSE set variable ${Country} ${return} ${City} Run Keyword And Ignore Error Get From Dictionary ${AddDict} City ${City} Run Keyword If "${return}"=="FAIL" or "${City}"=="${EMPTY}" set variable null ... ELSE set variable ${City} ${return} ${Fqdn} Run Keyword And Ignore Error Get From Dictionary ${AddDict} Fqdn ${Fqdn} Run Keyword If "${return}"=="FAIL" or "${Fqdn}"=="${EMPTY}" set variable null ... ELSE set variable ${Fqdn} ${return} ${Protocols1} Run Keyword And Ignore Error Get From Dictionary ${AddDict} Protocols1 ${Protocols1} Run Keyword If "${return}"=="FAIL" or "${Protocols1}"=="${EMPTY}" set variable null ... ELSE set variable ${Protocols1} ${return} ${Degree} Run Keyword And Ignore Error Get From Dictionary ${AddDict} Degree ${Degree} Run Keyword If "${return}"=="FAIL" or "${Degree}"=="${EMPTY}" set variable null ... ELSE set variable ${Degree} ${return} ${Times} Run Keyword And Ignore Error Get From Dictionary ${AddDict} Times ${Times} Run Keyword If "${return}"=="FAIL" or "${Times}"=="${EMPTY}" set variable null ... ELSE set variable ${Times} ${return} ${Numbers} Run Keyword And Ignore Error Get From Dictionary ${AddDict} Numbers ${Numbers} Run Keyword If "${return}"=="FAIL" or "${Numbers}"=="${EMPTY}" set variable null ... ELSE set variable ${Numbers} ${return} ${Limits} Run Keyword And Ignore Error Get From Dictionary ${AddDict} Limits ${Limits} Run Keyword If "${return}"=="FAIL" or "${Limits}"=="${EMPTY}" set variable null ... ELSE set variable ${Limits} ${return} ${Keywordtext} Run Keyword And Ignore Error Get From Dictionary ${AddDict} Keywordtext ${Keywordtext} Run Keyword If "${return}"=="FAIL" or "${Keywordtext}"=="${EMPTY}" set variable null ... ELSE set variable ${Keywordtext} run keyword if "${Type1}"=="Ip" run keywords sleep ${sleep} ... AND click element xpath=${typepath}/div[2]/div[1]/div[2]/div[1]/div/div/div/div[1]/div/div/div/div[1] ... AND sleep ${sleep} ... AND sleep ${sleep} ... AND SourceIPCreateOrSearch ${typepath} ${CreateOrSearch} ${Add} ${Type1} ${Name} ${ObjectName} ${Ipclienttext1} ${Port} ${Country} ${City} ${Fqdn} ${Protocols1} ${Degree} ${Times} ${Numbers} ${Limits} ... ELSE IF "${Type1}"=="SUBID" run keywords sleep ${sleep} ... AND click element xpath=${typepath}/div[2]/div[1]/div[2]/div[1]/div/div/div/div[1]/div/div/div/div[2] ... AND sleep ${sleep} ... AND SUBIDCreateOrSearch ${typepath} ${CreateOrSearch} ${Add} ${Name} ${Keywordtext} ${ObjectName} ... ELSE IF "${Type1}"=="Geography" run keywords sleep ${sleep} ... AND click element xpath=${typepath}/div[2]/div[1]/div[2]/div[1]/div/div/div/div[1]/div/div/div/div[3] ... AND sleep ${sleep} ... AND SourceIPCreateOrSearch ${typepath} ${CreateOrSearch} ${Add} ${Type1} ${Name} ${ObjectName} ${Ipclienttext1} ${Port} ${Country} ${City} ${Fqdn} ${Protocols1} ${Degree} ${Times} ${Numbers} ${Limits} ... ELSE IF "${Type1}"=="IPLearning" run keywords sleep ${sleep} ... AND click element xpath=${typepath}/div[2]/div[1]/div[2]/div[1]/div/div/div/div[1]/div/div/div/div[4] ... AND sleep ${sleep} ... AND SourceIPCreateOrSearch ${typepath} ${CreateOrSearch} ${Add} ${Type1} ${Name} ${ObjectName} ${Ipclienttext1} ${Port} ${Country} ${City} ${Fqdn} ${Protocols1} ${Degree} ${Times} ${Numbers} ${Limits} Create-Destination [Arguments] ${AddDict} # ${PolicyType}=null ${Type1}=null ${CreateOrSearch}=null ${Add}=null ${Name}=null # ... ${ObjectName}=null ${Ipclienttext1}=null ${Port}=null ${Country}=null ${City}=null # ... ${Protocols1}=null ${Degree}=null ${Times}=null ${Numbers}=null ${Limits}=null ${Keywordtext}=null [Documentation] 调用次关键字前需要添加必填参数: ... ${Type1}:填入Ip或SUBID或Geography或IPLearning ... ${CreateOrSearch}:填入Create或者Search ... ${Add}:填入Address或Group ... ${Name}:名称 ... ${Ip_type}:填入Ip或者Geography或者IPLearning ... ${Ipclienttext1}:填入IPV4或6的值或range的ip段 ... ${Port}:填入端口 ... ${Country}:列表形式,列表中是国家名字 ... ${City}:列表形式,列表中是城市名字 ... ${Protocols1}:填入HTTP或SSL或HTTPSSL ... ${Degree}:填入1Degree或2Degree ... ${Times}:填入小时数,例如1或2 ... ${Numbers}:填入数值,例如1或10000 ... ${Limits}:填入数值,例如1或10000 ... ${ObjectName}:列表形式,列表中是对象的名字 ... ${Keywordtext}:填入新建subid的内容 ... 判断新建source选择用什么样的类型数据 #调用次关键字前需要添加必填参数: ${return} ${Sordtype} Run Keyword And Ignore Error Get From Dictionary ${AddDict} Sordtype ${Sordtype} Run Keyword If "${return}"=="FAIL" or "${Sordtype}"=="${EMPTY}" set variable Source ... ELSE set variable ${Sordtype} ${typepath} Run Keyword If "${Sordtype}"=="Source" set variable /html/body/div[1]/div/div[3]/div[2]/div/div[1]/form/div/div[4] ... ELSE set variable /html/body/div[1]/div/div[3]/div[2]/div/div[1]/form/div/div[5] ${return} ${Type1} Run Keyword And Ignore Error Get From Dictionary ${AddDict} Type1 ${Type1} Run Keyword If "${return}"=="FAIL" or "${Type1}"=="${EMPTY}" set variable IP ... ELSE set variable ${Type1} ${return} ${CreateOrSearch} Run Keyword And Ignore Error Get From Dictionary ${AddDict} CreateOrSearch ${CreateOrSearch} Run Keyword If "${return}"=="FAIL" or "${CreateOrSearch}"=="${EMPTY}" set variable Create ... ELSE set variable ${CreateOrSearch} ${return} ${Add} Run Keyword And Ignore Error Get From Dictionary ${AddDict} Add ${Add} Run Keyword If "${return}"=="FAIL" or "${Add}"=="${EMPTY}" set variable Add ... ELSE set variable ${Add} ${return} ${ObjectName} Run Keyword And Ignore Error Get From Dictionary ${AddDict} ObjectName ${ObjectName} Run Keyword If "${return}"=="FAIL" or "${ObjectName}"=="${EMPTY}" set variable null ... ELSE set variable ${ObjectName} ${return} ${Name} Run Keyword And Ignore Error Get From Dictionary ${AddDict} Name ${Name} Run Keyword If "${return}"=="FAIL" or "${Name}"=="${EMPTY}" set variable null ... ELSE set variable ${Name} ${return} ${Ipclienttext1} Run Keyword And Ignore Error Get From Dictionary ${AddDict} Ipclienttext1 ${Ipclienttext1} Run Keyword If "${return}"=="FAIL" or "${Ipclienttext1}"=="${EMPTY}" set variable null ... ELSE set variable ${Ipclienttext1} ${return} ${Port} Run Keyword And Ignore Error Get From Dictionary ${AddDict} Port ${Port} Run Keyword If "${return}"=="FAIL" or "${Port}"=="${EMPTY}" set variable null ... ELSE set variable ${Port} ${return} ${Country} Run Keyword And Ignore Error Get From Dictionary ${AddDict} Country ${Country} Run Keyword If "${return}"=="FAIL" or "${Country}"=="${EMPTY}" set variable null ... ELSE set variable ${Country} ${return} ${City} Run Keyword And Ignore Error Get From Dictionary ${AddDict} City ${City} Run Keyword If "${return}"=="FAIL" or "${City}"=="${EMPTY}" set variable null ... ELSE set variable ${City} ${return} ${Fqdn} Run Keyword And Ignore Error Get From Dictionary ${AddDict} Fqdn ${Fqdn} Run Keyword If "${return}"=="FAIL" or "${Fqdn}"=="${EMPTY}" set variable null ... ELSE set variable ${Fqdn} ${return} ${Protocols1} Run Keyword And Ignore Error Get From Dictionary ${AddDict} Protocols1 ${Protocols1} Run Keyword If "${return}"=="FAIL" or "${Protocols1}"=="${EMPTY}" set variable null ... ELSE set variable ${Protocols1} ${return} ${Degree} Run Keyword And Ignore Error Get From Dictionary ${AddDict} Degree ${Degree} Run Keyword If "${return}"=="FAIL" or "${Degree}"=="${EMPTY}" set variable null ... ELSE set variable ${Degree} ${return} ${Times} Run Keyword And Ignore Error Get From Dictionary ${AddDict} Times ${Times} Run Keyword If "${return}"=="FAIL" or "${Times}"=="${EMPTY}" set variable null ... ELSE set variable ${Times} ${return} ${Numbers} Run Keyword And Ignore Error Get From Dictionary ${AddDict} Numbers ${Numbers} Run Keyword If "${return}"=="FAIL" or "${Numbers}"=="${EMPTY}" set variable null ... ELSE set variable ${Numbers} ${return} ${Limits} Run Keyword And Ignore Error Get From Dictionary ${AddDict} Limits ${Limits} Run Keyword If "${return}"=="FAIL" or "${Limits}"=="${EMPTY}" set variable null ... ELSE set variable ${Limits} run keyword if "${Type1}"=="Ip" run keywords sleep ${sleep} ... AND click element xpath=${typepath}/div[2]/div[1]/div[2]/div[1]/div/div/div/div[1]/div/div/div/div[1] ... AND sleep ${sleep} ... AND sleep ${sleep} ... AND DestinationIPCreateOrSearch ${typepath} ${CreateOrSearch} ${Add} ${Type1} ${Name} ${ObjectName} ${Ipclienttext1} ${Port} ${Country} ${City} ${Fqdn} ${Protocols1} ${Degree} ${Times} ${Numbers} ${Limits} ... ELSE IF "${Type1}"=="Geography" run keywords sleep ${sleep} ... AND click element xpath=${typepath}/div[2]/div[1]/div[2]/div[1]/div/div/div/div[1]/div/div/div/div[2] ... AND sleep ${sleep} ... AND DestinationIPCreateOrSearch ${typepath} ${CreateOrSearch} ${Add} ${Type1} ${Name} ${ObjectName} ${Ipclienttext1} ${Port} ${Country} ${City} ${Fqdn} ${Protocols1} ${Degree} ${Times} ${Numbers} ${Limits} ... ELSE IF "${Type1}"=="IPLearning" run keywords sleep ${sleep} ... AND click element xpath=${typepath}/div[2]/div[1]/div[2]/div[1]/div/div/div/div[1]/div/div/div/div[3] ... AND sleep ${sleep} ... AND DestinationIPCreateOrSearch ${typepath} ${CreateOrSearch} ${Add} ${Type1} ${Name} ${ObjectName} ${Ipclienttext1} ${Port} ${Country} ${City} ${Fqdn} ${Protocols1} ${Degree} ${Times} ${Numbers} ${Limits} CreateButton [Documentation] 点击安全策略中的Create按钮 Wait Until Element Is Enabled id=app_create sleep ${sleep} click element id=app_create Create-name [Arguments] ${PolicyType} ${Name} [Documentation] 输入name sleep ${sleep} run keyword if "${PolicyType}"=="Security Policy" run keywords sleep ${sleep} ... AND input text id=interceptionadd_name ${Name} run keyword if "${PolicyType}"=="Proxy Policy" run keywords sleep ${sleep} ... AND input text id=manipulation_elInput_policyName ${Name} Create-actions [Arguments] ${PolicyType} ${Action} sleep ${sleep} run keyword if "${PolicyType}"=="Security Policy" run keywords sleep ${sleep} ... AND Create-Securityaction ${Action} run keyword if "${PolicyType}"=="Proxy Policy" run keywords sleep ${sleep} ... AND Create-Proxyaction ${Action} Create-Securityaction [Arguments] ${Action} [Documentation] 调用次关键字前需要添加必填参数: ... ${Action}:填入allow或deny或monitor或intercept ... 判断要创建什么动作的策略 sleep ${sleep} run keyword if "${Action}"=="Allow" run keywords sleep ${sleep} ... AND click element id=security_action_allow ... ELSE IF "${Action}"=="Deny" run keywords sleep ${sleep} ... AND click element id=security_action_deny ... ELSE IF "${Action}"=="Monitor" run keywords sleep ${sleep} ... AND click element id=security_action_monitor ... ELSE IF "${Action}"=="Intercept" run keywords sleep ${sleep} ... AND click element id=security_action_intercept Create-Proxyaction [Arguments] ${Action} [Documentation] 调用次关键字前需要添加必填参数: ... ${Action}:填入allow或deny或monitor或intercept ... 判断要创建什么动作的策略 sleep ${sleep} run keyword if "${Action}"=="Allow" run keywords sleep ${sleep} ... AND click element id=proxyManipulationallow ... ELSE IF "${Action}"=="Deny" run keywords sleep ${sleep} ... AND click element id=proxyManipulationdeny ... ELSE IF "${Action}"=="Monitor" run keywords sleep ${sleep} ... AND click element id=proxyManipulationmonitor ... ELSE IF "${Action}"=="Redirect" run keywords sleep ${sleep} ... AND click element id=proxyManipulationredirect ... ELSE IF "${Action}"=="Replace" run keywords sleep ${sleep} ... AND click element id=proxyManipulationreplace ... ELSE IF "${Action}"=="Hijack" run keywords sleep ${sleep} ... AND click element id=proxyManipulationhijack ... ELSE IF "${Action}"=="Insert" run keywords sleep ${sleep} ... AND click element id=proxyManipulationinsert Create-Source-Button [Documentation] 点击Source的加号 sleep ${sleep} click element xpath=/html/body/div[1]/div/div[3]/div[2]/div/div[1]/form/div/div[4]/div[1]/div/div Create-Destination-Button [Documentation] 点击Destination的加号 Wait Until Element Is Enabled xpath=/html/body/div[1]/div/div[3]/div[2]/div/div[1]/form/div/div[5]/div[1]/div/div 10 sleep ${sleep} click element xpath=/html/body/div[1]/div/div[3]/div[2]/div/div[1]/form/div/div[5]/div[1]/div/div Create-Application-Button [Arguments] ${PolicyType} ${ApplicationSearchV} ${Action} [Documentation] 点击Application的加号 run keyword if "${PolicyType}"=="Security Policy" run keywords Wait Until Element Is Enabled id=interceptionadd_application 10 ... AND click element id=interceptionadd_application ... AND sleep ${sleep} ... AND SecurityApplicationFor ${ApplicationSearchV} ... AND sleep ${sleep} run keyword if "${PolicyType}"=="Proxy Policy" ProxyApplicationSearch ${Action} ${ApplicationSearchV} SecurityApplicationFor [Arguments] ${ApplicationSearchV} ${a} set variable ${ApplicationSearchV}[0] FOR ${i} IN @{ApplicationSearchV} run keyword if "${a}" != "${i}" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="interceptionadd_application"]/i SecurityApplicationSearch ${i} ${a} set variable ${i} END SecurityApplicationSearch [Arguments] ${Application} [Documentation] 调用次关键字前需要添加必填参数: ... ${Application}:填入是Application的内容,例如SSL或HTTP ... 选择search对象 sleep ${sleep} input text xpath=/html/body/div[1]/div/div[3]/div[2]/div/div[5]/div[2]/div[2]/div/div[1]/input ${Application} sleep ${sleep} press keys xpath=/html/body/div[1]/div/div[3]/div[2]/div/div[5]/div[2]/div[2]/div/div[1]/input ENTER sleep ${sleep} click element xpath=/html/body/div[1]/div/div[3]/div[2]/div/div[5]/div[2]/div[2]/div/div[3]/div/div/ul/li[1] sleep ${sleep} click element id=check_list_allcancelobject sleep ${sleep} ProxyApplicationSearch [Arguments] ${Action} ${HttpOrDoh} [Documentation] 调用次关键字前需要添加必填参数: ... ${Action}:填入是action的内容,例如redirect或deny ... 选择search对象 run keyword if "${Action}"=="redirect" run keywords sleep ${sleep} ... AND click element id=interceptionadd_application ... AND sleep ${sleep} ... AND HttpOrDoh ${HttpOrDoh} ... ELSE log 不操作 HttpOrDoh [Arguments] ${HttpOrDoh} [Documentation] 调用次关键字前需要添加必填参数: ... ${HttpOrDoh}:填入是Application的内容,例如Doh或HTTP ... 选择search对象 run keyword if "${HttpOrDoh}"=="HTTP" run keywords sleep ${sleep} ... AND click element id=interceptionadd_checkappshow1 ... AND sleep ${sleep} ... AND click element xpath=/html/body/div[1]/div/div[3]/div[2]/div/div[7]/div[3]/div/button ... ELSE IF "${HttpOrDoh}"=="Doh" run keywords sleep ${sleep} ... AND click element id=interceptionadd_checkappshow0 ... AND sleep ${sleep} ... AND click element xpath=/html/body/div[1]/div/div[3]/div[2]/div/div[7]/div[3]/div/button Create-Filter-SecurityOrProxy [Arguments] ${PolicyType} ${Application} ${addFilter} [Documentation] 点击Application的加号 ${return} ${Filter} Run Keyword And Ignore Error Get From Dictionary ${addFilter} Filter ${Filter} Run Keyword If "${return}"=="FAIL" or "${Filter}"=="${EMPTY}" set variable null ... ELSE set variable ${Filter} ${return} ${Hostname} Run Keyword And Ignore Error Get From Dictionary ${addFilter} Hostname ${Hostname} Run Keyword If "${return}"=="FAIL" or "${Hostname}"=="${EMPTY}" set variable null ... ELSE set variable ${Hostname} ${return} ${URLname} Run Keyword And Ignore Error Get From Dictionary ${addFilter} URLname ${URLname} Run Keyword If "${return}"=="FAIL" or "${URLname}"=="${EMPTY}" set variable null ... ELSE set variable ${URLname} ${return} ${Request Headername} Run Keyword And Ignore Error Get From Dictionary ${addFilter} Request Headername ${Request Headername} Run Keyword If "${return}"=="FAIL" or "${Request Headername}"=="${EMPTY}" set variable null ... ELSE set variable ${Request Headername} ${return} ${Response Headername} Run Keyword And Ignore Error Get From Dictionary ${addFilter} Response Headername ${Response Headername} Run Keyword If "${return}"=="FAIL" or "${Response Headername}"=="${EMPTY}" set variable null ... ELSE set variable ${Response Headername} ${return} ${Request Contentname} Run Keyword And Ignore Error Get From Dictionary ${addFilter} Request Contentname ${Request Contentname} Run Keyword If "${return}"=="FAIL" or "${Request Contentname}"=="${EMPTY}" set variable null ... ELSE set variable ${Request Contentname} ${return} ${Response Contentname} Run Keyword And Ignore Error Get From Dictionary ${addFilter} Response Contentname ${Response Contentname} Run Keyword If "${return}"=="FAIL" or "${Response Contentname}"=="${EMPTY}" set variable null ... ELSE set variable ${Response Contentname} ${return} ${SSLSNIname} Run Keyword And Ignore Error Get From Dictionary ${addFilter} SSLSNIname ${SSLSNIname} Run Keyword If "${return}"=="FAIL" or "${SSLSNIname}"=="${EMPTY}" set variable null ... ELSE set variable ${SSLSNIname} ${return} ${CNname} Run Keyword And Ignore Error Get From Dictionary ${addFilter} CNname ${CNname} Run Keyword If "${return}"=="FAIL" or "${CNname}"=="${EMPTY}" set variable null ... ELSE set variable ${CNname} ${return} ${SANname} Run Keyword And Ignore Error Get From Dictionary ${addFilter} SANname ${SANname} Run Keyword If "${return}"=="FAIL" or "${SANname}"=="${EMPTY}" set variable null ... ELSE set variable ${SANname} ${return} ${QNAMEname} Run Keyword And Ignore Error Get From Dictionary ${addFilter} QNAMEname ${QNAMEname} Run Keyword If "${return}"=="FAIL" or "${QNAMEname}"=="${EMPTY}" set variable null ... ELSE set variable ${QNAMEname} ${return} ${Subjectname} Run Keyword And Ignore Error Get From Dictionary ${addFilter} Subjectname ${Subjectname} Run Keyword If "${return}"=="FAIL" or "${Subjectname}"=="${EMPTY}" set variable null ... ELSE set variable ${Subjectname} ${return} ${MAILContentname} Run Keyword And Ignore Error Get From Dictionary ${addFilter} MAILContentname ${MAILContentname} Run Keyword If "${return}"=="FAIL" or "${MAILContentname}"=="${EMPTY}" set variable null ... ELSE set variable ${MAILContentname} ${return} ${Attachment Namename} Run Keyword And Ignore Error Get From Dictionary ${addFilter} Attachment Namename ${Attachment Namename} Run Keyword If "${return}"=="FAIL" or "${Attachment Namename}"=="${EMPTY}" set variable null ... ELSE set variable ${Attachment Namename} ${return} ${Attachment Contentname} Run Keyword And Ignore Error Get From Dictionary ${addFilter} Attachment Contentname ${Attachment Contentname} Run Keyword If "${return}"=="FAIL" or "${Attachment Contentname}"=="${EMPTY}" set variable null ... ELSE set variable ${Attachment Contentname} ${return} ${Fromname} Run Keyword And Ignore Error Get From Dictionary ${addFilter} Fromname ${Fromname} Run Keyword If "${return}"=="FAIL" or "${Fromname}"=="${EMPTY}" set variable null ... ELSE set variable ${Fromname} ${return} ${Toname} Run Keyword And Ignore Error Get From Dictionary ${addFilter} Toname ${Toname} Run Keyword If "${return}"=="FAIL" or "${Toname}"=="${EMPTY}" set variable null ... ELSE set variable ${Toname} ${return} ${MAILAccountname} Run Keyword And Ignore Error Get From Dictionary ${addFilter} MAILAccountname ${MAILAccountname} Run Keyword If "${return}"=="FAIL" or "${MAILAccountname}"=="${EMPTY}" set variable null ... ELSE set variable ${MAILAccountname} ${return} ${URIname} Run Keyword And Ignore Error Get From Dictionary ${addFilter} URIname ${URIname} Run Keyword If "${return}"=="FAIL" or "${URIname}"=="${EMPTY}" set variable null ... ELSE set variable ${URIname} ${return} ${FTPContentname} Run Keyword And Ignore Error Get From Dictionary ${addFilter} FTPContentname ${FTPContentname} Run Keyword If "${return}"=="FAIL" or "${FTPContentname}"=="${EMPTY}" set variable null ... ELSE set variable ${FTPContentname} ${return} ${FTPAccountname} Run Keyword And Ignore Error Get From Dictionary ${addFilter} FTPAccountname ${FTPAccountname} Run Keyword If "${return}"=="FAIL" or "${FTPAccountname}"=="${EMPTY}" set variable null ... ELSE set variable ${FTPAccountname} ${return} ${QUICSNIname} Run Keyword And Ignore Error Get From Dictionary ${addFilter} QUICSNIname ${QUICSNIname} Run Keyword If "${return}"=="FAIL" or "${QUICSNIname}"=="${EMPTY}" set variable null ... ELSE set variable ${QUICSNIname} ${return} ${DohHostname} Run Keyword And Ignore Error Get From Dictionary ${addFilter} DohHostname ${DohHostname} Run Keyword If "${return}"=="FAIL" or "${DohHostname}"=="${EMPTY}" set variable null ... ELSE set variable ${DohHostname} run keyword if "${PolicyType}"=="Security Policy" Create-SecurityFilter-judge ${Application} ${Filter} ${Hostname} ${URLname} ${Request Headername} ${Response Headername} ${Request Contentname} ... ${Response Contentname} ${SSLSNIname} ${CNname} ${SANname} ${QNAMEname} ${Subjectname} ${MAILContentname} ${Attachment Namename} ... ${Attachment Contentname} ${Fromname} ${Toname} ${MAILAccountname} ${URIname} ${FTPContentname} ${FTPAccountname} ${QUICSNIname} run keyword if "${PolicyType}"=="Proxy Policy" Create-ProxyFilter ${Application} ${Filter} ${Hostname} ${URLname} ${Request Headername} ${Response Headername} ${Request Contentname} ... ${Response Contentname} ${QNAMEname} ${DohHostname} Create-SecurityFilter-judge [Arguments] ${Application}=null ${Filter}=null ${Hostname}=null ${URLname}=null ${Request Headername}=null ${Response Headername}=null ${Request Contentname}=null ... ${Response Contentname}=null ${SSLSNIname}=null ${CNname}=null ${SANname}=null ${QNAMEname}=null ${Subjectname}=null ${MAILContentname}=null ${Attachment Namename}=null ... ${Attachment Contentname}=null ${Fromname}=null ${Toname}=null ${MAILAccountname}=null ${URIname}=null ${FTPContentname}=null ${FTPAccountname}=null ${QUICSNIname}=null [Documentation] 调用次关键字前需要添加必填参数: ... ${Application}:填入是Application的内容,例如SSL或HTTP ... ${Filter}:是一个列表,列表中填入filter类型,例如Host或URL等 ... name:各个对象名称的列表 ... 判断filter是否可以点击 ${class}= Get Element Attribute xpath=/html/body/div[1]/div/div[3]/div[2]/div/div[1]/form/div/div[8]/div[1]/div/div[1] class run keyword if "${class}"=="addobject addobject-long-list obj-content-null filter-width-style cursor addobject-long-list-disabled" log filter不可点击,不可添加filter run keyword if "${class}"=="addobject addobject-long-list obj-content-null filter-width-style cursor" run keywords sleep ${sleep} ... AND Create-SecurityFilter ${Application} ${Filter} ${Hostname} ${URLname} ${Request Headername} ${Response Headername} ${Request Contentname} ... ${Response Contentname} ${SSLSNIname} ${CNname} ${SANname} ${QNAMEname} ${Subjectname} ${MAILContentname} ${Attachment Namename} ... ${Attachment Contentname} ${Fromname} ${Toname} ${MAILAccountname} ${URIname} ${FTPContentname} ${FTPAccountname} ${QUICSNIname} Create-SecurityFilter [Arguments] ${Application} ${Filter} ${Hostname} ${URLname} ${Request Headername} ${Response Headername} ${Request Contentname} ... ${Response Contentname} ${SSLSNIname} ${CNname} ${SANname} ${QNAMEname} ${Subjectname} ${MAILContentname} ${Attachment Namename} ... ${Attachment Contentname} ${Fromname} ${Toname} ${MAILAccountname} ${URIname} ${FTPContentname} ${FTPAccountname} ${QUICSNIname} [Documentation] 调用次关键字前需要添加必填参数: ... ${Application}:填入是Application的内容,例如SSL或HTTP ... ${Filter}:是一个列表,列表中填入filter类型,例如Host或URL等 ... name:各个对象名称的列表 ... 判断添加filter类型 sleep ${sleep} log ${Application} FOR ${i} IN @{Filter} sleep ${sleep} click element id=interceptionadd_add_filter sleep ${sleep} run keyword if "${Application}"=="HTTP" and "${i}"=="Host" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="condistions_protocol"]/div/div[1]/div/div/div/ul/li[1] ... AND Create-Object-Search ${Hostname} ${i} run keyword if "${Application}"=="HTTP" and "${i}"=="URL" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="condistions_protocol"]/div/div[1]/div/div/div/ul/li[2] ... AND Create-Object-Search ${URLname} ${i} run keyword if "${Application}"=="HTTP" and "${i}"=="Request Header" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="condistions_protocol"]/div/div[1]/div/div/div/ul/li[3] ... AND Create-Object-Search ${Request Headername} ${i} run keyword if "${Application}"=="HTTP" and "${i}"=="Response Header" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="condistions_protocol"]/div/div[1]/div/div/div/ul/li[4] ... AND Create-Object-Search ${Response Headername} ${i} run keyword if "${Application}"=="HTTP" and "${i}"=="Request Content" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="condistions_protocol"]/div/div[1]/div/div/div/ul/li[5] ... AND Create-Object-Search ${Request Contentname} ${i} run keyword if "${Application}"=="HTTP" and "${i}"=="Response Content" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="condistions_protocol"]/div/div[1]/div/div/div/ul/li[6] ... AND Create-Object-Search ${Response Contentname} ${i} run keyword if "${Application}"=="SSL" and "${i}"=="SNI" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="condistions_protocol"]/div/div[1]/div/div/div/ul/li[1] ... AND Create-Object-Search ${SSLSNIname} ${i} run keyword if "${Application}"=="SSL" and "${i}"=="CN" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="condistions_protocol"]/div/div[1]/div/div/div/ul/li[2] ... AND Create-Object-Search ${CNname} ${i} run keyword if "${Application}"=="SSL" and "${i}"=="SAN" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="condistions_protocol"]/div/div[1]/div/div/div/ul/li[3] ... AND Create-Object-Search ${SANname} ${i} run keyword if "${Application}"=="DNS" and "${i}"=="QNAME" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="condistions_protocol"]/div/div[1]/div/div/div/ul/li[1] ... AND Create-Object-Search ${QNAMEname} ${i} run keyword if "${Application}"=="MAIL" and "${i}"=="Subject" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="condistions_protocol"]/div/div[1]/div/div/div/ul/li[1] ... AND Create-Object-Search ${Subjectname} ${i} run keyword if "${Application}"=="MAIL" and "${i}"=="Content" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="condistions_protocol"]/div/div[1]/div/div/div/ul/li[2] ... AND Create-Object-Search ${MAILContentname} ${i} run keyword if "${Application}"=="MAIL" and "${i}"=="Attachment Name" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="condistions_protocol"]/div/div[1]/div/div/div/ul/li[3] ... AND Create-Object-Search ${Attachment Namename} ${i} run keyword if "${Application}"=="MAIL" and "${i}"=="Attachment Content" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="condistions_protocol"]/div/div[1]/div/div/div/ul/li[4] ... AND Create-Object-Search ${Attachment Contentname} ${i} run keyword if "${Application}"=="MAIL" and "${i}"=="From" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="condistions_protocol"]/div/div[1]/div/div/div/ul/li[5] ... AND Create-Object-Search ${Fromname} ${i} run keyword if "${Application}"=="MAIL" and "${i}"=="To" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="condistions_protocol"]/div/div[1]/div/div/div/ul/li[6] ... AND Create-Object-Search ${Toname} ${i} run keyword if "${Application}"=="MAIL" and "${i}"=="Account" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="condistions_protocol"]/div/div[1]/div/div/div/ul/li[7] ... AND Create-Object-Search ${MAILAccountname} ${i} run keyword if "${Application}"=="FTP" and "${i}"=="URI" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="condistions_protocol"]/div/div[1]/div/div/div/ul/li[1] ... AND Create-Object-Search ${URIname} ${i} run keyword if "${Application}"=="FTP" and "${i}"=="Content" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="condistions_protocol"]/div/div[1]/div/div/div/ul/li[2] ... AND Create-Object-Search ${FTPContentname} ${i} run keyword if "${Application}"=="FTP" and "${i}"=="Account" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="condistions_protocol"]/div/div[1]/div/div/div/ul/li[3] ... AND Create-Object-Search ${FTPAccountname} ${i} run keyword if "${Application}"=="QUIC" and "${i}"=="SNI" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="condistions_protocol"]/div/div[1]/div/div/div/ul/li[1] ... AND Create-Object-Search ${QUICSNIname} ${i} run keyword if "${Application}"=="SIP" and "${i}"=="From" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="condistions_protocol"]/div/div[1]/div/div/div/ul/li[1] ... AND Create-Object-Search ${Fromname} ${i} run keyword if "${Application}"=="SIP" and "${i}"=="To" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="condistions_protocol"]/div/div[1]/div/div/div/ul/li[2] ... AND Create-Object-Search ${Toname} ${i} END Create-ProxyFilter [Arguments] ${Application}=null ${Filter}=null ${Hostname}=null ${URLname}=null ${Request Headername}=null ${Response Headername}=null ${Request Contentname}=null ... ${Response Contentname}=null ${QNAMEname}=null ${DohHostname}=null [Documentation] 调用次关键字前需要添加必填参数: ... ${Application}:填入是Application的内容,例如SSL或HTTP ... ${Filter}:是一个列表,列表中填入filter类型,例如Host或URL等 ... name:各个对象名称的列表 ... 判断添加filter类型 xpath=//*[@id="policy_paper_left"]/div[8]/div/div[1]/label[contains(text(), "${filter}")]/following-sibling::div/div //*[@id="interceptionadd_checkappshow0"][contains(text(), "${filter}")] sleep ${sleep} FOR ${i} IN @{Filter} sleep ${sleep} click element id=interceptionadd_add_filter sleep ${sleep} run keyword if "${Application}"=="HTTP" and "${i}"=="Host" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="interceptionadd_checkappshow0"][contains(text(), "${i}")] ... AND Create-Object-Search ${Hostname} ${i} run keyword if "${Application}"=="HTTP" and "${i}"=="URL" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="interceptionadd_checkappshow1"][contains(text(), "${i}")] ... AND Create-Object-Search ${URLname} ${i} run keyword if "${Application}"=="HTTP" and "${i}"=="Request Header" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="interceptionadd_checkappshow2"][contains(text(), "${i}")] ... AND Create-Object-Search ${Request Headername} ${i} run keyword if "${Application}"=="HTTP" and "${i}"=="Response Header" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="interceptionadd_checkappshow3"][contains(text(), "${i}")] ... AND Create-Object-Search ${Response Headername} ${i} run keyword if "${Application}"=="HTTP" and "${i}"=="Request Content" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="interceptionadd_checkappshow4"][contains(text(), "${i}")] ... AND Create-Object-Search ${Request Contentname} ${i} run keyword if "${Application}"=="HTTP" and "${i}"=="Response Content" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="interceptionadd_checkappshow5"][contains(text(), "${i}")] ... AND Create-Object-Search ${Response Contentname} ${i} run keyword if "${Application}"=="Doh" and "${i}"=="Host" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="interceptionadd_checkappshow0"][contains(text(), "${i}")] ... AND Create-Object-Search ${DohHostname} ${i} run keyword if "${Application}"=="Doh" and "${i}"=="QNAME" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="interceptionadd_checkappshow1"][contains(text(), "${i}")] ... AND Create-Object-Search ${QNAMEname} ${i} END Deny-subaction-1 [Arguments] ${Action} ${subaction} ${Subactionadd} [Documentation] 调用次关键字前需要添加必填参数: ... ${Code}:填入403或404 ... ${Content}:填入TEXT或Profile ... ${SearchorCreate}:填入Search或Create ... ${BlockText}:填入TEXT文本框内容 ... ${ProfileName}:Profile的名字 ... ${File}:上传文件路径 ... ${QType}:填入A或AAAA ... ${Avalue}:根据${QType}填入IPV4或IPV6的值 ... ${Attl}:根据${QType}填入A的ttl值或AAAA的ttl值 ... ${CNAMEvalue}:根据${QType}填入A的CNAME的域名值或AAAA的CNAME域名值 ... ${CNAMEttl}:根据${QType}填入A的CNAME的ttl值或AAAA的CNAME的ttl值 ... 添加subaction ${return} ${Code} Run Keyword And Ignore Error Get From Dictionary ${Subactionadd} Code ${Code} Run Keyword If "${return}"=="FAIL" or "${Code}"=="${EMPTY}" set variable null ... ELSE set variable ${Code} ${return} ${Content} Run Keyword And Ignore Error Get From Dictionary ${Subactionadd} Content ${Content} Run Keyword If "${return}"=="FAIL" or "${Content}"=="${EMPTY}" set variable null ... ELSE set variable ${Content} ${return} ${BlockText} Run Keyword And Ignore Error Get From Dictionary ${Subactionadd} BlockText ${BlockText} Run Keyword If "${return}"=="FAIL" or "${BlockText}"=="${EMPTY}" set variable null ... ELSE set variable ${BlockText} ${return} ${SearchorCreate} Run Keyword And Ignore Error Get From Dictionary ${Subactionadd} SearchorCreate ${SearchorCreate} Run Keyword If "${return}"=="FAIL" or "${SearchorCreate}"=="${EMPTY}" set variable null ... ELSE set variable ${SearchorCreate} ${return} ${ProfileName} Run Keyword And Ignore Error Get From Dictionary ${Subactionadd} ProfileName ${ProfileName} Run Keyword If "${return}"=="FAIL" or "${ProfileName}"=="${EMPTY}" set variable null ... ELSE set variable ${ProfileName} ${return} ${File} Run Keyword And Ignore Error Get From Dictionary ${Subactionadd} File ${File} Run Keyword If "${return}"=="FAIL" or "${File}"=="${EMPTY}" set variable null ... ELSE set variable ${File} ${return} ${QType} Run Keyword And Ignore Error Get From Dictionary ${Subactionadd} QType ${QType} Run Keyword If "${return}"=="FAIL" or "${QType}"=="${EMPTY}" set variable null ... ELSE set variable ${QType} ${return} ${Avalue} Run Keyword And Ignore Error Get From Dictionary ${Subactionadd} Avalue ${Avalue} Run Keyword If "${return}"=="FAIL" or "${Avalue}"=="${EMPTY}" set variable null ... ELSE set variable ${Avalue} ${return} ${Attl} Run Keyword And Ignore Error Get From Dictionary ${Subactionadd} Attl ${Attl} Run Keyword If "${return}"=="FAIL" or "${Attl}"=="${EMPTY}" set variable null ... ELSE set variable ${Attl} ${return} ${CNAMEvalue} Run Keyword And Ignore Error Get From Dictionary ${Subactionadd} CNAMEvalue ${CNAMEvalue} Run Keyword If "${return}"=="FAIL" or "${CNAMEvalue}"=="${EMPTY}" set variable null ... ELSE set variable ${CNAMEvalue} ${return} ${CNAMEttl} Run Keyword And Ignore Error Get From Dictionary ${Subactionadd} CNAMEttl ${CNAMEttl} Run Keyword If "${return}"=="FAIL" or "${CNAMEttl}"=="${EMPTY}" set variable null ... ELSE set variable ${CNAMEttl} run keyword if "${Action}"=="Deny" and "${subaction}"=="Drop" run keywords sleep ${sleep} ... AND click element id=denyUserRegionBlock_method0 run keyword if "${Action}"=="Deny" and "${subaction}"=="RST" run keywords sleep ${sleep} ... AND click element id=denyUserRegionBlock_method1 run keyword if "${Action}"=="Deny" and "${subaction}"=="Block" run keywords sleep ${sleep} ... AND click element id=denyUserRegionBlock_method2 ... AND Deny-Block ${Code} ${Content} ${BlockText} ${SearchorCreate} ${ProfileName} ${File} run keyword if "${Action}"=="Deny" and "${subaction}"=="Alert" run keywords sleep ${sleep} ... AND click element id=denyUserRegionBlock_method3 ... AND Deny-Block ${Code} ${Content} ${BlockText} ${SearchorCreate} ${ProfileName} ${File} run keyword if "${Action}"=="Deny" and "${subaction}"=="Redirect" run keywords sleep ${sleep} ... AND click element id=denyUserRegionBlock_method4 ... AND sleep ${sleep} ... AND click element id=interceptionadd_rightdetails ... AND sleep ${sleep} ... AND Deny-Redirect ${QType} ${Avalue} ${Attl} ${CNAMEvalue} ${CNAMEttl} Deny-Block [Arguments] ${Code} ${Content} ${BlockText} ${SearchorCreate} ${ProfileName} ${File} [Documentation] 调用次关键字前需要添加必填参数: ... ${Code}:填入403或404 ... ${Content}:填入TEXT或Profile ... ${SearchorCreate}:填入Search或Create ... ${BlockText}:填入TEXT文本框内容 ... ${ProfileName}:Profile的名字 ... ${File}:上传文件路径 ... 添加block数据内容 # sleep ${sleep} # click element id=denyUserRegionBlock_code run keyword if "${Code}"=="403" or "${Code}"=="200" run keywords sleep ${sleep} ... AND click element id=denyUserRegionBlock_code_select0 ... AND sleep ${sleep} ... AND click element id=blockselect ... ELSE IF "${Code}"=="404" run keywords sleep ${sleep} ... AND click element id=denyUserRegionBlock_code_select1 ... AND sleep ${sleep} ... AND click element id=blockselect ... ELSE IF "${Code}"=="204" run keywords sleep ${sleep} ... AND click element id=denyUserRegionBlock_code_select1 ... ELSE IF "${Code}" == "480" run keywords sleep ${sleep} ... AND click element id=denyUserRegionBlock_mailCode ... AND sleep ${sleep} ... AND click element id=bolck_mail_code480 ... ELSE IF "${Code}" == "500" run keywords sleep ${sleep} ... AND click element id=denyUserRegionBlock_mailCode ... AND sleep ${sleep} ... AND click element id=bolck_mail_code500 run keyword if "${Content}"=="TEXT" run keywords sleep ${sleep} ... AND click element id=blockselect_select0 ... AND sleep ${sleep} ... AND input text id=denyUserRegionBlock_message ${BlockText} ... ELSE IF "${Content}"=="Profile" run keywords sleep ${sleep} ... AND click element id=blockselect_select1 ... AND sleep ${sleep} ... AND Profile-SearchorCreate ${SearchorCreate} ${ProfileName} ${File} Profile-SearchorCreate [Arguments] ${SearchorCreate} ${ProfileName} ${File} [Documentation] 调用次关键字前需要添加必填参数: ... ${SearchorCreate}:填入Search或Create ... ${ProfileName}:Profile的名字 ... ${File}:上传文件路径 ... 判断是新建还是搜索profile sleep ${sleep} click element id=html_profile sleep ${sleep} run keyword if "${SearchorCreate}"=="Search" run keywords sleep ${sleep} ... AND input text id=filedata_profileName ${ProfileName} ... AND sleep ${sleep} ... AND press keys id=filedata_profileName ENTER ... AND sleep ${sleep} ... AND click element id=filelist_select0 ... ELSE IF "${SearchorCreate}"=="Create" run keywords sleep ${sleep} ... AND click element id=interceptionadd_fileadd ... AND sleep ${sleep} ... AND input text id=responsepages_profileName ${ProfileName} ... AND sleep ${sleep} ... AND Choose File xpath=//*[@id="policy_Manipulation_create6"]/div[2]/form/div[2]/div/div/div/input ${File} #上传文件 ... AND sleep ${sleep} ... AND clcik element id=responseAddOk1 ... ELSE log 传入参数错误 Deny-Redirect [Arguments] ${DenyRedirectadd} # ${QType} ${Avalue} ${Attl} ${CNAMEvalue} ${CNAMEttl} [Documentation] 调用次关键字前需要添加必填参数: ... ${QType}:填入A或AAAA ... ${Avalue}:根据${QType}填入IPV4或IPV6的值 ... ${Attl}:根据${QType}填入A的ttl值或AAAA的ttl值 ... ${CNAMEvalue}:根据${QType}填入A的CNAME的域名值或AAAA的CNAME域名值 ... ${CNAMEttl}:根据${QType}填入A的CNAME的ttl值或AAAA的CNAME的ttl值 ... 新建Redirect ${return} ${QType} Run Keyword And Ignore Error Get From Dictionary ${${DenyRedirectadd}} QType ${QType} Run Keyword If "${return}"=="FAIL" or "${QType}"=="${EMPTY}" set variable null ... ELSE set variable ${QType} ${return} ${Avalue} Run Keyword And Ignore Error Get From Dictionary ${${DenyRedirectadd}} Avalue ${Avalue} Run Keyword If "${return}"=="FAIL" or "${Avalue}"=="${EMPTY}" set variable null ... ELSE set variable ${Avalue} ${return} ${Attl} Run Keyword And Ignore Error Get From Dictionary ${${DenyRedirectadd}} Attl ${Attl} Run Keyword If "${return}"=="FAIL" or "${Attl}"=="${EMPTY}" set variable null ... ELSE set variable ${Attl} ${return} ${CNAMEvalue} Run Keyword And Ignore Error Get From Dictionary ${${DenyRedirectadd}} CNAMEvalue ${CNAMEvalue} Run Keyword If "${return}"=="FAIL" or "${CNAMEvalue}"=="${EMPTY}" set variable null ... ELSE set variable ${CNAMEvalue} ${return} ${CNAMEttl} Run Keyword And Ignore Error Get From Dictionary ${${DenyRedirectadd}} CNAMEttl ${CNAMEttl} Run Keyword If "${return}"=="FAIL" or "${CNAMEttl}"=="${EMPTY}" set variable null ... ELSE set variable ${CNAMEttl} run keyword if "${QType}"=="A" run keywords sleep ${sleep} ... AND input text id=A00 ${Avalue} ... AND sleep ${sleep} ... AND input text id=ttl00 ${Attl} ... AND sleep ${sleep} ... AND click element id=interceptionadd_addForm ... AND sleep ${sleep} ... AND input text id=Cname01 ${CNAMEvalue} ... AND sleep ${sleep} ... AND input text id=ttl01 ${CNAMEttl} run keyword if "${QType}"=="AAAA" run keywords sleep ${sleep} ... AND click element id=dns_qtype_radio01 ... AND input text id=AAAA00 ${Avalue} ... AND sleep ${sleep} ... AND input text id=ttl00 ${Attl} ... AND sleep ${sleep} ... AND click element id=interceptionadd_addForm ... AND sleep ${sleep} ... AND input text id=Cname01 ${CNAMEvalue} ... AND sleep ${sleep} ... AND input text id=ttl01 ${CNAMEttl} sleep ${sleep} click element id=interceptionadd_shezhidns Interceptadd [Arguments] ${Keyring} ${MirrorDecryptedTrafficInfo} ${DecryptionProfile} [Documentation] 引用次关键字,填入必填参数 ... 必填参数: ... ${Keyring}:新建或替换证书的参数,字典 ... ${MirrorDecryptedTrafficInfo}:新建解密流量参数,字典 ... ${DecryptionProfile}:新建或修改属性参数,字典 Run Keyword If "${Keyring}"=="${EMPTY}" or "${Keyring}"=="null" log there is no KeyringInfo ... ELSE Intercept-SSL-Keyring-SearchorCreate ${Keyring} Run Keyword If "${MirrorDecryptedTrafficInfo}"=="${EMPTY}" or "${MirrorDecryptedTrafficInfo}"=="null" log there is no MirrorDecryptedTrafficInfo ... ELSE Intercept-SSL-MirrorDecryptedTraffic-Open ${MirrorDecryptedTrafficInfo} Run Keyword If "${DecryptionProfile}"=="${EMPTY}" or "${DecryptionProfile}"=="null" log there is no interceptaddInfo ... ELSE DecryptionProfile-SearchorCreate ${DecryptionProfile} Intercept-SSL-Keyring-SearchorCreate [Arguments] ${Keyring} [Documentation] 引用次关键字,填入必填参数 ... 必填参数: ... ${KeySearchorCreate}:填入Create或Search ... ${Name}:新建页面name输入框里的内容 ... ${File}:上传文件所在本地的路径 ... ${File1}:上传文件所在本地的路径 ... ${ExpiryHours1or2}:根证书时间填入1:自定义定义 2:原时间 ... ${Type}:上传证书类型的元素 ... ${Type1}:上传证书加密解密算法的元素 ... ${Shift}:是否打开客户端包含证书按钮 ... ${PrivateKeyType}:私钥类型 ${return} ${KeySearchorCreate} Run Keyword And Ignore Error Get From Dictionary ${Keyring} KeySearchorCreate ${KeySearchorCreate} Run Keyword If "${return}"=="FAIL" or "${KeySearchorCreate}"=="${EMPTY}" set variable null ... ELSE set variable ${KeySearchorCreate} ${return} ${Keyname} Run Keyword And Ignore Error Get From Dictionary ${Keyring} Keyname ${Keyname} Run Keyword If "${return}"=="FAIL" or "${Keyname}"=="${EMPTY}" set variable null ... ELSE set variable ${Keyname} ${return} ${File} Run Keyword And Ignore Error Get From Dictionary ${Keyring} File ${File} Run Keyword If "${return}"=="FAIL" or "${File}"=="${EMPTY}" set variable null ... ELSE set variable ${File} ${return} ${File1} Run Keyword And Ignore Error Get From Dictionary ${Keyring} File1 ${File1} Run Keyword If "${return}"=="FAIL" or "${File1}"=="${EMPTY}" set variable null ... ELSE set variable ${File1} ${return} ${ExpiryHours1or2} Run Keyword And Ignore Error Get From Dictionary ${Keyring} ExpiryHours1or2 ${ExpiryHours1or2} Run Keyword If "${return}"=="FAIL" or "${ExpiryHours1or2}"=="${EMPTY}" set variable null ... ELSE set variable ${ExpiryHours1or2} ${return} ${Type} Run Keyword And Ignore Error Get From Dictionary ${Keyring} Type ${Type} Run Keyword If "${return}"=="FAIL" or "${Type}"=="${EMPTY}" set variable null ... ELSE set variable ${Type} ${return} ${Type1} Run Keyword And Ignore Error Get From Dictionary ${Keyring} Type1 ${Type1} Run Keyword If "${return}"=="FAIL" or "${Type1}"=="${EMPTY}" set variable null ... ELSE set variable ${Type1} ${return} ${Shift} Run Keyword And Ignore Error Get From Dictionary ${Keyring} Shift ${Shift} Run Keyword If "${return}"=="FAIL" or "${Shift}"=="${EMPTY}" set variable null ... ELSE set variable ${Shift} ${return} ${PrivateKeyType} Run Keyword And Ignore Error Get From Dictionary ${Keyring} PrivateKeyType ${PrivateKeyType} Run Keyword If "${return}"=="FAIL" or "${PrivateKeyType}"=="${EMPTY}" set variable null ... ELSE set variable ${PrivateKeyType} sleep ${sleep} click element id=interceptionadd_eventkeying1 sleep ${sleep} run keyword if "${KeySearchorCreate}"=="Create" run keywords sleep ${sleep} ... AND click element id=interceptionadd_keyadd ... AND sleep ${sleep} ... AND Create-Keyring ${Keyname} ${File} ${File1} ${ExpiryHours1or2} ${Type} ${Type1} ... ${Shift}=close ${PrivateKeyType}=PrivateKeyFile run keyword if "${KeySearchorCreate}"=="Search" run keywords sleep ${sleep} ... AND input text id=card_keyringName1 ${Keyname} ... AND sleep ${sleep} ... AND press keys id=card_keyringName1 ENTER ... AND sleep ${sleep} ... AND clcik element id=card_keylist0 Create-Keyring [Arguments] ${Name} ${File} ${File1} ${ExpiryHours1or2} ${Type} ${Type1} ... ${Shift}=close ${PrivateKeyType}=PrivateKeyFile [Documentation] 引用次关键字,填入必填参数 ... 必填参数: ... ${Name}:新建页面name输入框里的内容 ... ${File}:上传文件所在本地的路径 ... ${File1}:上传文件所在本地的路径 ... ${ExpiryHours1or2}:根证书时间填入1:自定义定义 2:原时间 ... ${Type}:上传证书类型的元素 ... ${Type1}:上传证书加密解密算法的元素 ... ${Shift}:是否打开客户端包含证书按钮 ... ${PrivateKeyType}:私钥类型 sleep ${sleep} input id=keyringsadd_name ${Name} #输入name sleep ${sleep} Choose File xpath=//*[@id="app"]/div/div[3]/div[2]/div/div/div[2]/div[2]/form/div[2]/div/div/div/input ${File} #上传文件 sleep ${sleep} Choose File xpath=//*[@id="app"]/div/div[3]/div[2]/div/div/div[2]/div[2]/form/div[3]/div/div[2]/div/div/input ${File1} #上传文件 ${select} Set Variable ${ExpiryHours1or2} Run Keyword If '${select}'=='1' click element id=keyringsadd_customized Run Keyword If '${select}'=='1' input text id=reissueExpiryDate 10 sleep ${sleep} click element xpath=//*[@id="app"]/div/div[3]/div[2]/div/div/div[2]/div[2]/form/div[6]/div/div/div[1]/span/span/i #点击下拉框 sleep ${sleep} click element ${Type} #选择证书类型 sleep ${sleep} click element xpath=//*[@id="app"]/div/div[3]/div[2]/div/div/div[2]/div[2]/form/div[7]/div/div/div[1]/span/span/i #点击下拉框 sleep ${sleep} click element ${Type1} #选择加密解密类型 sleep ${sleep} ${root} Set Variable ${Shift} run keyword if "${root}"=="open" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="app"]/div/div[3]/div[2]/div/div/div[2]/div[2]/form/div[9]/div/div/span ... ELSE IF "${root}"=="close" log "go on" Run Keyword If '${PrivateKeyType}'=='HSM' run keywords sleep ${sleep} ... AND click element id=privateHSM ... AND sleep ${sleep} ... AND input text id=keyringsadd_slotid 10 sleep ${sleep} click id=keyringsadd_sub #点击OK缇交 Intercept-SSL-MirrorDecryptedTraffic-Open [Arguments] ${MirrorDecryptedTrafficInfo} [Documentation] 引用次关键字,填入必填参数 ... 必填参数: ... ${MirrorDecryptedTraffic}:输入open代表开启按钮,其他代表不开启 ... ${MirrorDecryptedTrafficSearchorCreate}:填入Create或Search ... ${MirrorDecryptedTrafficname}:解密流量文件的name ... ${Type}:是mac还是vlan的定位元素 ... ${Shuru}:输入mac或vlan的值 ${return} ${MirrorDecryptedTraffic} Run Keyword And Ignore Error Get From Dictionary ${MirrorDecryptedTrafficInfo} MirrorDecryptedTraffic ${MirrorDecryptedTraffic} Run Keyword If "${return}"=="FAIL" or "${MirrorDecryptedTraffic}"=="${EMPTY}" set variable null ... ELSE set variable ${MirrorDecryptedTraffic} ${return} ${MirrorDecryptedTrafficSearchorCreate} Run Keyword And Ignore Error Get From Dictionary ${MirrorDecryptedTrafficInfo} MirrorDecryptedTrafficSearchorCreate ${MirrorDecryptedTrafficSearchorCreate} Run Keyword If "${return}"=="FAIL" or "${MirrorDecryptedTrafficSearchorCreate}"=="${EMPTY}" set variable null ... ELSE set variable ${MirrorDecryptedTrafficSearchorCreate} ${return} ${MirrorDecryptedTrafficname} Run Keyword And Ignore Error Get From Dictionary ${MirrorDecryptedTrafficInfo} MirrorDecryptedTrafficname ${MirrorDecryptedTrafficname} Run Keyword If "${return}"=="FAIL" or "${MirrorDecryptedTrafficname}"=="${EMPTY}" set variable null ... ELSE set variable ${MirrorDecryptedTrafficname} ${return} ${Type} Run Keyword And Ignore Error Get From Dictionary ${MirrorDecryptedTrafficInfo} Type ${Type} Run Keyword If "${return}"=="FAIL" or "${Type}"=="${EMPTY}" set variable null ... ELSE set variable ${Type} ${return} ${Shuru} Run Keyword And Ignore Error Get From Dictionary ${MirrorDecryptedTrafficInfo} Shuru ${Shuru} Run Keyword If "${return}"=="FAIL" or "${Shuru}"=="${EMPTY}" set variable null ... ELSE set variable ${Shuru} sleep ${sleep} run keyword if "${MirrorDecryptedTraffic}"=="open" run keywords sleep ${sleep} ... AND click element xpath=///*[@id="policy_paper_left"]/div[10]/div[2]/label[contains(text(), "Mirror Decrypted Traffic")]/following-sibling::div/div ... AND sleep ${sleep} ... AND clcik element id=mirror_profile ... AND MirrorDecryptedTraffic-SearchorCreate ${MirrorDecryptedTrafficSearchorCreate} ${MirrorDecryptedTrafficname} ${Type} ${Shuru} ... ELSE log 不开启 MirrorDecryptedTraffic-SearchorCreate [Arguments] ${MirrorDecryptedTrafficSearchorCreate} ${MirrorDecryptedTrafficname} ${Type} ${Shuru} [Documentation] 引用次关键字,填入必填参数 ... 必填参数: ... ${MirrorDecryptedTrafficSearchorCreate}:填入Create或Search ... ${MirrorDecryptedTrafficname}:解密流量文件的name ... ${Type}:是mac还是vlan的定位元素 ... ${Shuru}:输入mac或vlan的值 sleep ${sleep} run keyword if "${MirrorDecryptedTrafficSearchorCreate}"=="Create" run keywords sleep ${sleep} ... AND click element id=interceptionadd_trarightadd ... AND sleep ${sleep} ... AND Create-MirrorDecryptedTraffic ${MirrorDecryptedTrafficname} ${Type} ${Shuru} run keyword if "${MirrorDecryptedTrafficSearchorCreate}"=="Search" run keywords sleep ${sleep} ... AND input text id=tradata_profileName ${MirrorDecryptedTrafficname} ... AND sleep ${sleep} ... AND press keys id=tradata_profileName ENTER ... AND sleep ${sleep} ... AND clcik element id=tralist_length0 Create-MirrorDecryptedTraffic [Arguments] ${MirrorDecryptedTrafficname} ${Type} ${Shuru} [Documentation] 引用次关键字,填入必填参数 ... 必填参数: ... ${MirrorDecryptedTrafficname}:解密流量文件的name ... ${Type}:是mac还是vlan的定位元素 ... ${Shuru}:输入mac或vlan的值 sleep ${sleep} input id=trafficmirror_profileName ${MirrorDecryptedTrafficname} #输入name sleep ${sleep} click id=addrTypeChoose #点击下拉框 sleep ${sleep} click ${Type} #选择vlan或者mac sleep ${sleep} input id=trafficmirror_addrArray0 ${Shuru} sleep ${sleep} click xpath=//*[@id="app"]/div/div[3]/div[2]/div/div/div[2]/button[1] #点击OK DecryptionProfile-SearchorCreate [Arguments] ${DecryptionProfile} [Documentation] 引用次关键字,填入必填参数 ... 必填参数: ... ${DecryptionProfileSearchorCreate}:填入Create或Search ... ${DecryptionProfilename}:文件name ... ${Dict1}:是个字典,等于1为开启,等于0为关闭,例如:Common Name=1 Issuer=1 Self-signed=1 Expiry Date=1 EV Certificat=1 ... Certificate Transparency=1 Mutual Authentication=1 On Protocol Errors=1 Certificate Pinning=1 Certificate Not Installed=1 Mirror Client Versions=1 ... Allow HTTP/2=1 ... ${Fail1} :输入Fail-close或Pass-through ... ${Min1}:输入协议版本, ... ${Max1}:输入协议版本, ${return} ${DecryptionProfileSearchorCreate} Run Keyword And Ignore Error Get From Dictionary ${DecryptionProfile} DecryptionProfileSearchorCreate ${DecryptionProfileSearchorCreate} Run Keyword If "${return}"=="FAIL" or "${DecryptionProfileSearchorCreate}"=="${EMPTY}" set variable null ... ELSE set variable ${DecryptionProfileSearchorCreate} ${return} ${DecryptionProfilename} Run Keyword And Ignore Error Get From Dictionary ${DecryptionProfile} DecryptionProfilename ${DecryptionProfilename} Run Keyword If "${return}"=="FAIL" or "${DecryptionProfilename}"=="${EMPTY}" set variable null ... ELSE set variable ${DecryptionProfilename} ${return} ${Dict1} Run Keyword And Ignore Error Get From Dictionary ${DecryptionProfile} Dict1 ${Dict1} Run Keyword If "${return}"=="FAIL" or "${Dict1}"=="${EMPTY}" set variable null ... ELSE set variable ${Dict1} ${return} ${Fail1} Run Keyword And Ignore Error Get From Dictionary ${DecryptionProfile} Fail1 ${Fail1} Run Keyword If "${return}"=="FAIL" or "${Fail1}"=="${EMPTY}" set variable null ... ELSE set variable ${Fail1} ${return} ${Min1} Run Keyword And Ignore Error Get From Dictionary ${DecryptionProfile} Min1 ${Min1} Run Keyword If "${return}"=="FAIL" or "${Min1}"=="${EMPTY}" set variable null ... ELSE set variable ${Min1} ${return} ${Max1} Run Keyword And Ignore Error Get From Dictionary ${DecryptionProfile} Max1 ${Max1} Run Keyword If "${return}"=="FAIL" or "${Max1}"=="${EMPTY}" set variable null ... ELSE set variable ${Max1} sleep ${sleep} click element id=interceptionadd_eventkeying sleep ${sleep} run keyword if "${DecryptionProfileSearchorCreate}"=="Create" run keywords sleep ${sleep} ... AND click element id=interceptionadd_decryptionProfileId ... AND sleep ${sleep} ... AND Create-DecryptionProfile ${DecryptionProfilename} ${Dict1} ${Fail1} ${Min1} ${Max1} run keyword if "${DecryptionProfileSearchorCreate}"=="Search" run keywords sleep ${sleep} ... AND input text id=card_keyringName ${DecryptionProfilename} ... AND sleep ${sleep} ... AND press keys id=card_keyringName ENTER ... AND sleep ${sleep} ... AND clcik element xpath=//*[@id="decryptionProfileList"]/following-sibling::li[2] Create-DecryptionProfile [Arguments] ${Name} ${Dict1} ${Fail1} ${Min1} ${Max1} sleep ${sleep} input id=insert_profileName ${Name} sleep ${sleep} DecryptionProfileButtonSwitch ${Dict1} //*[@id="policy_Manipulation_create8"]/div[2]/form/div/div/label[contains(text(), " ")]/following-sibling::div/div el-switch is-checked el-switch ${fail} Set Variable ${Fail1} run keyword if "${fail}"=="Fail-close" Run Keywords sleep ${sleep} ... AND click xpath=//*[@id="policy_Manipulation_create8"]/div[2]/form/div[3]/div[5]/div/div/label[1]/span ... ELSE IF "${fail}"=="Pass-through" Run Keywords sleep ${sleep} ... AND click xpath=//*[@id="policy_Manipulation_create8"]/div[2]/form/div[3]/div[5]/div/div/label[2]/span ... ELSE log 1111 ${min} Set Variable ${Min1} ${max} Set Variable ${Max1} run keyword if "${min}"=="TLSv1.0" Run Keywords sleep ${sleep} ... AND click xpath=//*[@id="policy_Manipulation_create8"]/div[2]/form/div[7]/div[2]/div/div/div/span/span/i ... AND sleep ${sleep} ... AND click id=pro_min1 ... ELSE IF "${min}"=="TLSv1.1" Run Keywords sleep ${sleep} ... AND click xpath=//*[@id="policy_Manipulation_create8"]/div[2]/form/div[7]/div[2]/div/div/div/span/span/i ... AND sleep ${sleep} ... AND click id=pro_min2 ... ELSE IF "${min}"=="TLSv1.2" Run Keywords sleep ${sleep} ... AND click xpath=//*[@id="policy_Manipulation_create8"]/div[2]/form/div[7]/div[2]/div/div/div/span/span/i ... AND sleep ${sleep} ... AND click id=pro_min3 ... ELSE IF "${min}"=="TLSv1.3" Run Keywords sleep ${sleep} ... AND click xpath=//*[@id="policy_Manipulation_create8"]/div[2]/form/div[7]/div[2]/div/div/div/span/span/i ... AND sleep ${sleep} ... AND click id=pro_min4 ... ELSE IF "${min}"=="SSLv3.0" Run Keywords sleep ${sleep} ... AND click xpath=//*[@id="policy_Manipulation_create8"]/div[2]/form/div[7]/div[2]/div/div/div/span/span/i ... AND sleep ${sleep} ... AND click id=pro_min0 ... ELSE log 错误 run keyword if "${max}"=="TLSv1.0" Run Keywords sleep ${sleep} ... AND click xpath=//*[@id="policy_Manipulation_create8"]/div[2]/form/div[7]/div[3]/div/div/div/span/span/i ... AND sleep ${sleep} ... AND click id=pro_max1 ... ELSE IF "${max}"=="TLSv1.1" Run Keywords sleep ${sleep} ... AND click xpath=//*[@id="policy_Manipulation_create8"]/div[2]/form/div[7]/div[3]/div/div/div/span/span/i ... AND sleep ${sleep} ... AND click id=pro_max2 ... ELSE IF "${max}"=="TLSv1.2" Run Keywords sleep ${sleep} ... AND click xpath=//*[@id="policy_Manipulation_create8"]/div[2]/form/div[7]/div[3]/div/div/div/span/span/i ... AND sleep ${sleep} ... AND click id=pro_max3 ... ELSE IF "${max}"=="TLSv1.3" Run Keywords sleep ${sleep} ... AND click xpath=//*[@id="policy_Manipulation_create8"]/div[2]/form/div[7]/div[3]/div/div/div/span/span/i ... AND sleep ${sleep} ... AND click id=pro_max4 ... ELSE IF "${max}"=="SSLv3.0" Run Keywords sleep ${sleep} ... AND click xpath=//*[@id="policy_Manipulation_create8"]/div[2]/form/div[7]/div[3]/div/div/div/span/span/i ... AND sleep ${sleep} ... AND click id=pro_max0 ... ELSE log 错误 sleep ${sleep} click id=decryption-ok sleep ${sleep} Settings-Search ${Name} ${search} #搜索框的关键字 sleep ${sleep} ${name1} get text xpath=//*[@id="app"]/div/div[3]/div[2]/div/div[3]/div/div/div[2]/div/div[3]/table/tbody/tr/td[2]/div/div/span Should Be Equal As Strings ${name1} ${Name} DecryptionProfileButtonSwitch [Arguments] ${Dict1} ${xpath1} ${xpath2} ${open} ${close} ${dict} Set Variable ${Dict1} FOR ${list} ${key} IN ENUMERATE @{dict} ${class}= Get Element Attribute xpath=${xpath1}${key}${xpath2} class run keyword if "${class}"=="${open}" and "${dict}[${key}]"=="1" log 默认开启,不进行操作 run keyword if "${class}"=="${open}" and "${dict}[${key}]"=="0" Run Keywords log 默认开启,但需求需要关闭,进行点击关闭按钮 ... AND sleep ${sleep} ... AND click xpath=${xpath1}${key}${xpath2}/span run keyword if "${class}"=="${close}" and "${dict}[${key}]"=="1" Run Keywords log 默认关闭,但需求需要开启,进行点击开启按钮 ... AND sleep ${sleep} ... AND click xpath=${xpath1}${key}${xpath2}/span run keyword if "${class}"=="${close}" and "${dict}[${key}]"=="0" log 默认关闭,不进行操作 END LogSession [Arguments] ${LogSession} [Documentation] 调用次关键字前需要添加必填参数: ... ${LogSession}:填入clcos或其他 run keyword if "${LogSession}"=="close" run keywords sleep ${sleep} ... AND click element id=addlabel_labels_log ... ELSE log 开启日志 Enabled [Arguments] ${Enabled} [Documentation] 调用次关键字前需要添加必填参数: ... ${Enabled}:填入open或其他 run keyword if "${Enabled}"=="open" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="policy_paper_left"]/div/label[contains(text(), "Enabled")]/following-sibling::div/div ... AND sleep ${sleep} ... AND click element xpath=/html/body/div/div/div[3]/button[2] ... ELSE log 开启日志 Security-Policies-OK sleep ${sleep} click element id=interceptionadd_sub Create-Object-Search [Arguments] ${Name} ${filter} [Documentation] 调用次关键字前需要添加必填参数: ... ${Name}:填入是一个列表,列表内容为object的name ... 选择search对象 sleep ${sleep} click element xpath=//*[@id="policy_paper_left"]/div[8]/div/div[1]/label[contains(text(), "${filter}")]/following-sibling::div/div sleep ${sleep} FOR ${i} IN @{name} input text xpath=//*[@id="condistions_protocol"]/div[2]/p[contains(text(), "${filter}")]/following-sibling::div[2]/div/div[1]/input ${i} sleep ${sleep} press keys xpath=//*[@id="condistions_protocol"]/div[2]/p[contains(text(), "${filter}")]/following-sibling::div[2]/div/div[1]/input ENTER sleep ${sleep} click element xpath=//*[@id="condistions_protocol"]/div[2]/p[contains(text(), "${filter}")]/following-sibling::div[2]/div/div[2]/div/div/ul/li[1] sleep ${sleep} END SourceIPCreateOrSearch [Arguments] ${PolicyType} ${CreateOrSearch} ${Add} ${Ip_type} ${Name} ${ObjectName} ${Ipclienttext1} ... ${Port} ${Country} ${City} ${Fqdn} ${Protocols1} ${Degree} ${Times} ${Numbers} ${Limits} [Documentation] 调用次关键字前需要添加必填参数: ... ${CreateOrSearch}:填入Create或者Search ... ${Add}:填入Address或Group ... ${Name}:名称 ... ${Ip_type}:填入Ip或者Geography或者IPLearning ... ${Ipclienttext1}:填入IPV4或6的值或range的ip段 ... ${Port}:填入端口 ... ${Country}:列表形式,列表中是国家名字 ... ${City}:列表形式,列表中是城市名字 ... ${Protocols1}:填入HTTP或SSL或HTTPSSL ... ${Degree}:填入1Degree或2Degree ... ${Times}:填入小时数,例如1或2 ... ${Numbers}:填入数值,例如1或10000 ... ${Limits}:填入数值,例如1或10000 ... ${ObjectName}:列表形式,列表中是对象的名字 ... 判断是新建ip还是搜索添加ip run keyword if "${CreateOrSearch}"=="Create" run keywords sleep ${sleep} ... AND click element id=interceptionadd_proaddaddSource ... AND SourceIPAdd ${PolicyType} ${Add} ${Ip_type} ${Name} ${ObjectName} ${Ipclienttext1} ${Port} ${Country} ${City} ${Fqdn} ${Protocols1} ${Degree} ${Times} ${Numbers} ${Limits} ... ELSE IF "${CreateOrSearch}"=="Search" run keywords sleep ${sleep} ... AND SourceSearch ${PolicyType} ${ObjectName} SUBIDCreateOrSearch [Arguments] ${PolicyType} ${CreateOrSearch} ${Add} ${Name} ${Keywordtext} ${ObjectName} [Documentation] 调用次关键字前需要添加必填参数: ... ${CreateOrSearch}:填入Create或者Search ... ${Name}:名称 ... ${Keywordtext}:填入新建subid的内容 ... ${ObjectName}:列表形式,列表中是对象的名字 ... 判断是新建subid还是搜索添加subid run keyword if "${CreateOrSearch}"=="Create" run keywords sleep ${sleep} ... AND click element id=interceptionadd_proaddaddSource ... AND SUBIDAdd ${PolicyType} ${Add} ${Name} ${Keywordtext} ${ObjectName} ... ELSE IF "${CreateOrSearch}"=="Search" run keywords sleep ${sleep} ... AND SourceSearch ${PolicyType} ${ObjectName} DestinationIPCreateOrSearch [Arguments] ${PolicyType} ${CreateOrSearch} ${Add} ${Ip_type} ${Name} ${ObjectName} ${Ipclienttext1} ... ${Port} ${Country} ${City} ${Fqdn} ${Protocols1} ${Degree} ${Times} ${Numbers} ${Limits} [Documentation] 调用次关键字前需要添加必填参数: ... ${CreateOrSearch}:填入Create或者Search ... ${Add}:填入Address或Group ... ${Name}:名称 ... ${Ip_type}:填入Ip或者Geography或者IPLearning ... ${Ipclienttext1}:填入IPV4或6的值或range的ip段 ... ${Port}:填入端口 ... ${Country}:列表形式,列表中是国家名字 ... ${City}:列表形式,列表中是城市名字 ... ${Protocols1}:填入HTTP或SSL或HTTPSSL ... ${Degree}:填入1Degree或2Degree ... ${Times}:填入小时数,例如1或2 ... ${Numbers}:填入数值,例如1或10000 ... ${Limits}:填入数值,例如1或10000 ... ${ObjectName}:列表形式,列表中是对象的名字 ... 判断是新建ip还是搜索添加ip run keyword if "${CreateOrSearch}"=="Create" run keywords sleep ${sleep} ... AND click element id=interceptionadd_proaddaddDestination ... AND DestinationIPAdd ${PolicyType} ${Add} ${Ip_type} ${Name} ${ObjectName} ${Ipclienttext1} ${Port} ${Country} ${City} ${Fqdn} ${Protocols1} ${Degree} ${Times} ${Numbers} ${Limits} ... ELSE IF "${CreateOrSearch}"=="Search" run keywords sleep ${sleep} ... AND DestinationSearch ${PolicyType} ${ObjectName} SourceSearch [Arguments] ${PolicyType} ${Name} [Documentation] 调用次关键字前需要添加必填参数: ... ${Name}:填入是一个列表,列表内容为source的name ... 选择search对象 FOR ${i} IN @{name} input text xpath=${PolicyType}/div[2]/div[1]/div[2]/div[2]/div/div[1]/input ${i} sleep ${sleep} press keys xpath=${PolicyType}/div[2]/div[1]/div[2]/div[2]/div/div[1]/input ENTER sleep ${sleep} click element xpath=${PolicyType}/div[2]/div[1]/div[2]/div[2]/div/div[2]/div/div/ul/li[1] sleep ${sleep} END DestinationSearch [Arguments] ${PolicyType} ${Name} [Documentation] 调用次关键字前需要添加必填参数: ... ${Name}:填入是一个列表,列表内容为source的name ... 选择search对象 FOR ${i} IN @{name} input text xpath=${PolicyType}/div[2]/div[1]/div[2]/div[2]/div/div[1]/input ${i} sleep ${sleep} press keys xpath=${PolicyType}/div[2]/div[1]/div[2]/div[2]/div/div[1]/input ENTER sleep ${sleep} click element xpath=${PolicyType}/div[2]/div[1]/div[2]/div[2]/div/div[2]/div/div/ul/li[1] sleep ${sleep} END SUBIDAdd [Arguments] ${PolicyType} ${Add} ${Name} ${Keywordtext} ${ObjectName} [Documentation] 调用次关键字前需要添加必填参数: ... ${Add}:填入Address或Group ... ${Name}:名称 ... ${Keywordtext}:填入新建subid的内容 ... ${ObjectName}:列表形式,列表中是对象的名字 ... 判断是新建subid还是新建subid分组 run keyword if "${Add}"=="Address" run keywords sleep ${sleep} ... AND click element xpath=/html/body/ul/li[1] ... AND sleep ${sleep} ... AND SUBAddress ${PolicyType} ${Name} ${Keywordtext} ... ELSE IF "${Add}"=="Group" run keywords sleep ${sleep} ... AND click element xpath=/html/body/ul/li[2] ... AND sleep ${sleep} ... AND SUBGroupAdd ${PolicyType} ${Name} ${ObjectName} SUBAddress [Arguments] ${PolicyType} ${Name} ${Keywordtext} [Documentation] 调用次关键字前需要添加必填参数: ... ${Name}:名称 ... ${Keywordtext}:填入新建subid的内容 ... 新建subid SourceCreate-name ${Name} click element xpath=${PolicyType}/div[2]/div[2]/div/div[1]/div[1]/div[2]/form/div[3]/div/div[1] sleep ${sleep} Create-SubscriberID-text ${Keywordtext} sleep ${sleep} click element xpath=${PolicyType}/div[2]/div[2]/div/div[2]/button[1] SUBGroupAdd [Arguments] ${PolicyType} ${Name} ${ObjectName} [Documentation] 调用次关键字前需要添加必填参数: ... ${Name}:名称 ... ${ObjectName}:列表形式,列表中是对象的名字 ... 新建subid分组 SourceCreate-name ${Name} click element xpath=${PolicyType}/div[2]/div[2]/div/div[1]/div[1]/div[2]/form/div[3]/div/div/div[2] sleep ${sleep} Create-Sub-Objects ${ObjectName} click element xpath=${PolicyType}/div[2]/div[2]/div/div[2]/button[1] SourceIPAdd [Arguments] ${PolicyType} ${Add} ${Ip_type} ${Name} ${ObjectName} ${Ipclienttext1} ${Port} ${Country} ${City} ${Fqdn} ${Protocols1} ${Degree} ${Times} ${Numbers} ${Limits} [Documentation] 调用次关键字前需要添加必填参数: ... ${Add}:填入Address或Group ... ${Ip_type}:填入IP或者Geography或者IPLearning ... 判断是新建ip还是新建ip分组 run keyword if "${Add}"=="Address" run keywords sleep ${sleep} ... AND click element xpath=/html/body/ul/li[1] ... AND sleep ${sleep} ... AND SourceIPAddress ${PolicyType} ${Name} ${Ip_type} ${Ipclienttext1} ${Port} ${Country} ${City} ${Fqdn} ${Protocols1} ${Degree} ${Times} ${Numbers} ${Limits} ... ELSE IF "${Add}"=="Group" run keywords sleep ${sleep} ... AND click element xpath=/html/body/ul/li[2] ... AND sleep ${sleep} ... AND SourceIPGroupAdd ${PolicyType} ${Name} ${Ip_type} ${ObjectName} SourceIPAddress [Arguments] ${PolicyType} ${Name} ${Ip_type} ${Ipclienttext1} ${Port} ${Country} ${City} ${Fqdn} ${Protocols1} ${Degree} ${Times} ${Numbers} ${Limits} [Documentation] 调用次关键字前需要添加必填参数: ... ${Name}:名称 ... ${Ip_type}:填入Ip或者Geography或者IPLearning ... ${Ipclienttext1}:填入IPV4或6的值或range的ip段 ... ${Port}:填入端口 ... ${Country}:列表形式,列表中是国家名字 ... ${City}:列表形式,列表中是城市名字 ... ${Protocols1}:填入HTTP或SSL或HTTPSSL ... ${Degree}:填入1Degree或2Degree ... ${Times}:填入小时数,例如1或2 ... ${Numbers}:填入数值,例如1或10000 ... ${Limits}:填入数值,例如1或10000 ... 判断 新建选择用什么样的类型,并进行新建 SourceCreate-name ${Name} sleep ${sleep} run keyword if "${Ip_type}"=="Ip" run keywords click element xpath=${PolicyType}/div[2]/div[2]/div/div[1]/div[1]/div[2]/form/div[4]/div/div[1] ... AND sleep ${sleep} ... AND NewObject.Create-ip-ClientIP-text ${Ipclienttext1} ${Port} run keyword if "${Ip_type}"=="Geography" run keywords click element xpath=${PolicyType}/div[2]/div[2]/div/div[1]/div[1]/div[2]/form/div[3]/div/div/label[2] ... AND sleep ${sleep} ... AND click element xpath=${PolicyType}/div[2]/div[2]/div/div[1]/div[1]/div[2]/form/div[4]/div/div[1]/div[2] ... AND sleep ${sleep} ... AND NewObject.Create-Geography ${Country} ${City} ... AND sleep ${sleep} ... AND click element xpath=${PolicyType}/div[2]/div[2]/div/div[1]/div[10]/div/div/div/div[4]/button ... AND sleep ${sleep} run keyword if "${Ip_type}"=="IPLearning" run keywords click element xpath=${PolicyType}/div[2]/div[2]/div/div[1]/div[1]/div[2]/form/div[3]/div/div/label[3] ... AND sleep ${sleep} ... AND click element xpath=${PolicyType}/div[2]/div[2]/div/div[1]/div[1]/div[2]/form/div[4]/div/div[1] ... AND sleep ${sleep} ... AND input text xpath=${PolicyType}/div[2]/div[2]/div/div[1]/div[1]/div[2]/form/div[4]/div/div[3]/div/div[1]/div[2]/div[1]/div[1]/form/div[1]/div/div[1]/input ${Fqdn} ... AND sleep ${sleep} ... AND click element xpath=//*[@id="policy_Manipulation2"]/div[1]/div[1]/div[2]/form/div[5]/div[1]/div/div/div[2] ... AND sleep ${sleep} ... AND UIPolicy.Learn-From-Protocols ${Protocols1} ... AND UIPolicy.Learning-Depth ${PolicyType} ${Degree} ... AND sleep ${sleep} ... AND input text xpath=//*[@id="policy_Manipulation2"]/div[1]/div[1]/div[2]/form/div[5]/div[3]/div/div[1]/input ${Times} ... AND sleep ${sleep} ... AND input text xpath=//*[@id="policy_Manipulation2"]/div[1]/div[1]/div[2]/form/div[5]/div[4]/div/div[1]/input ${Numbers} ... AND sleep ${sleep} ... AND input text xpath=//*[@id="policy_Manipulation2"]/div[1]/div[1]/div[2]/form/div[5]/div[5]/div/div[1]/input ${Limits} ... AND sleep ${sleep} sleep ${sleep} SourceCreate-ok DestinationIPAdd [Arguments] ${PolicyType} ${Add} ${Ip_type} ${Name} ${ObjectName} ${Ipclienttext1} ${Port} ${Country} ${City} ${Fqdn} ${Protocols1} ${Degree} ${Times} ${Numbers} ${Limits} [Documentation] 调用次关键字前需要添加必填参数: ... ${Add}:填入Address或Group ... ${Ip_type}:填入IP或者Geography或者IPLearning ... 判断是新建ip还是新建ip分组 run keyword if "${Add}"=="Address" run keywords sleep ${sleep} ... AND click element xpath=/html/body/ul[contains(@id,'dropdown-menu' )and @x-placement='bottom-start']/child::li[1] ... AND sleep ${sleep} ... AND DestinationIPAddress ${PolicyType} ${Name} ${Ip_type} ${Ipclienttext1} ${Port} ${Country} ${City} ${Fqdn} ${Protocols1} ${Degree} ${Times} ${Numbers} ${Limits} ... ELSE IF "${Add}"=="Group" run keywords sleep ${sleep} ... AND click element xpath=/html/body/ul[contains(@id,'dropdown-menu' )and @x-placement='bottom-start']/child::li[2] ... AND sleep ${sleep} ... AND DestinationIPGroupAdd ${PolicyType} ${Name} ${Ip_type} ${ObjectName} DestinationIPAddress [Arguments] ${PolicyType} ${Name} ${Ip_type} ${Ipclienttext1} ${Port} ${Country} ${City} ${Fqdn} ${Protocols1} ${Degree} ${Times} ${Numbers} ${Limits} [Documentation] 调用次关键字前需要添加必填参数: ... ${Name}:名称 ... ${Ip_type}:填入Ip或者Geography或者IPLearning ... ${Ipclienttext1}:填入IPV4或6的值或range的ip段 ... ${Port}:填入端口 ... ${Country}:列表形式,列表中是国家名字 ... ${City}:列表形式,列表中是城市名字 ... ${Protocols1}:填入HTTP或SSL或HTTPSSL ... ${Degree}:填入1Degree或2Degree ... ${Times}:填入小时数,例如1或2 ... ${Numbers}:填入数值,例如1或10000 ... ${Limits}:填入数值,例如1或10000 ... 判断 新建选择用什么样的类型,并进行新建 DestinationCreate-name ${PolicyType} ${Name} sleep ${sleep} run keyword if "${Ip_type}"=="Ip" run keywords click element xpath=${PolicyType}/div[2]/div[2]/div/div[1]/div[1]/div[2]/form/div[4]/div/div[1] ... AND sleep ${sleep} ... AND NewObject.Create-ip-ClientIP-text ${Ipclienttext1} ${Port} run keyword if "${Ip_type}"=="Geography" run keywords click element xpath=${PolicyType}/div[2]/div[2]/div/div[1]/div[1]/div[2]/form/div[3]/div/div/label[2] ... AND sleep ${sleep} ... AND click element xpath=${PolicyType}/div[2]/div[2]/div/div[1]/div[1]/div[2]/form/div[4]/div/div[1]/div[2] ... AND sleep ${sleep} ... AND NewObject.Create-Geography ${Country} ${City} ... AND sleep ${sleep} ... AND click element id=interceptionadd_allcancelobjec3t ... AND sleep ${sleep} run keyword if "${Ip_type}"=="IPLearning" run keywords click element xpath=${PolicyType}/div[2]/div[2]/div/div[1]/div[1]/div[2]/form/div[3]/div/div/label[3] ... AND sleep ${sleep} ... AND click element xpath=${PolicyType}/div[2]/div[2]/div/div[1]/div[1]/div[2]/form/div[4]/div/div[1] ... AND sleep ${sleep} ... AND input text xpath=${PolicyType}/div[2]/div[2]/div/div[1]/div[1]/div[2]/form/div[4]/div/div[3]/div/div[1]/div[2]/div[1]/div[1]/form/div[1]/div/div[1]/input ${Fqdn} ... AND sleep ${sleep} ... AND click element xpath=${PolicyType}/div[2]/div[2]/div/div[1]/div[1]/div[2]/form/div[5]/div[1]/div/div/div[2] ... AND sleep ${sleep} ... AND UIPolicy.Learn-From-Protocols ${Protocols1} ... AND UIPolicy.Learning-Depth ${PolicyType} ${Degree} ... AND sleep ${sleep} ... AND input text xpath=${PolicyType}/div[2]/div[2]/div/div[1]/div[1]/div[2]/form/div[5]/div[3]/div/div[1]/input ${Times} ... AND sleep ${sleep} ... AND input text xpath=${PolicyType}/div[2]/div[2]/div/div[1]/div[1]/div[2]/form/div[5]/div[4]/div/div[1]/input ${Numbers} ... AND sleep ${sleep} ... AND input text xpath=${PolicyType}/div[2]/div[2]/div/div[1]/div[1]/div[2]/form/div[5]/div[5]/div/div[1]/input ${Limits} ... AND sleep ${sleep} DestinationCreate-ok ${PolicyType} Learn-From-Protocols [Arguments] ${Protocols1} [Documentation] 调用次关键字前需要添加必填参数: ... ${Protocols1}:填入HTTP或SSL或者HTTPSSL ... 判断选择用什么样的协议 run keyword if "${Protocols1}"=="HTTP" run keywords sleep ${sleep} ... AND click element xpath=/html/body/div/div[1]/div[1]/ul/li[1] run keyword if "${Protocols1}"=="SSL" run keywords sleep ${sleep} ... AND click element xpath=/html/body/div/div[1]/div[1]/ul/li[2] run keyword if "${Protocols1}"=="HTTPSSL" run keywords sleep ${sleep} ... AND click element xpath=/html/body/div/div[1]/div[1]/ul/li[1] ... AND sleep ${sleep} ... AND click element xpath=/html/body/div/div[1]/div[1]/ul/li[2] Learning-Depth [Arguments] ${PolicyType} ${Degree} [Documentation] 调用次关键字前需要添加必填参数: ... ${Degree}:填入1Degree或2Degree ... 判断是用1Degree或2Degree run keyword if "${Degree}"=="1Degree" run keywords sleep ${sleep} ... AND click element xpath=${PolicyType}/div[2]/div[2]/div/div[1]/div[1]/div[2]/form/div[5]/div[2]/div/div/label[1] run keyword if "${Degree}"=="2Degree" run keywords sleep ${sleep} ... AND click element xpath=${PolicyType}/div[2]/div[2]/div/div[1]/div[1]/div[2]/form/div[5]/div[2]/div/div/label[2] SourceIPGroupAdd [Arguments] ${PolicyType} ${Name} ${Ip_type} ${ObjectName} [Documentation] 调用次关键字前需要添加必填参数: ... ${Name}:名称 ... ${Ip_type}:填入Ip或者Geography ... ${ObjectName}:列表形式,列表中是对象的名字 SourceCreate-name ${Name} Select-ip_type ${Ip_type} sleep ${sleep} click element xpath=${PolicyType}/div[2]/div[2]/div/div[1]/div[1]/div[2]/form/div[4]/div/div/div[2] Create-Sub-Objects ${ObjectName} NewObject.Create-ok DestinationIPGroupAdd [Arguments] ${PolicyType} ${Name} ${Ip_type} ${ObjectName} [Documentation] 调用次关键字前需要添加必填参数: ... ${Name}:名称 ... ${Ip_type}:填入Ip或者Geography ... ${ObjectName}:列表形式,列表中是对象的名字 SourceCreate-name ${Name} Select-ip_type ${Ip_type} sleep ${sleep} click element xpath=${PolicyType}/div[2]/div[2]/div/div[1]/div[1]/div[2]/form/div[4]/div/div/div[2] Create-Sub-Objects ${ObjectName} NewObject.Create-ok SourceCreate-name [Arguments] ${ObjName} sleep ${sleep} input text id=objectAdd_name ${ObjName} SourceCreate-ok sleep ${sleep} click button id=objectAdd_ok DestinationCreate-name [Arguments] ${PolicyType} ${ObjName} input text xpath=${PolicyType}/div[2]/div[2]/div/div[1]/div[1]/div[2]/form/div[1]/div/div[1]/input ${ObjName} DestinationCreate-ok [Arguments] ${PolicyType} sleep ${sleep} click button xpath=${PolicyType}/div[2]/div[2]/div/div[2]/button[1] Security-Source [Arguments] ${SourceType} ${SourceValue} Wait Until Element Is Enabled xpath=//*[@id="app"]/div/div[3]/div[2]/div/div[1]/div[1]/span/div/div/div[2]/div/div 10 click element xpath=//*[@id="app"]/div/div[3]/div[2]/div/div[1]/div[1]/span/div/div/div[2]/div/div sleep ${sleep} run keyword if "${SourceType}"=="ID" run keywords sleep ${sleep} ... AND click element xpath=/html/body/div/div[1]/div[1]/ul/li[2] run keyword if "${SourceType}"=="Name" run keywords sleep ${sleep} ... AND click element xpath=/html/body/div/div[1]/div[1]/ul/li[3] run keyword if "${SourceType}"=="Action" run keywords sleep ${sleep} ... AND click element xpath=/html/body/div/div[1]/div[1]/ul/li[4] sleep ${sleep} input text xpath=//*[@id="app"]/div/div[3]/div[2]/div/div[1]/div[1]/span/div/div/div[2]/div/div[1]/div[3]/div/input ${SourceValue} sleep ${sleep} click element xpath=//*[@id="app"]/div/div[3]/div[2]/div/div[1]/div[1]/span/div/i sleep ${sleep} click element xpath=//*[@id="ly-table1-listcontent"]/div/div[3]/table/tbody/tr[1] sleep ${sleep} EditButton sleep ${sleep} click element xpath=//*[@id="appEdit"]/span/div/div[2] sleep ${sleep} Initialize-Policie [Arguments] ${InitializeAction} [Documentation] 调用次关键字前需要添加必填参数: ... ${InitializeAction}:根据用例进行填写,意思就是是那一个action就不要点击哪一个,以免初始化失败 run keyword if "${InitializeAction}"=="Allow" run keywords sleep ${sleep} ... AND click element id=security_action_deny ... AND sleep ${sleep} ... ELSE IF "${InitializeAction}"=="Deny" run keywords sleep ${sleep} ... AND click element id=security_action_allow ... ELSE IF "${InitializeAction}"=="Monitor" run keywords sleep ${sleep} ... AND click element id=security_action_deny ... ELSE IF "${InitializeAction}"=="Intercept" run keywords sleep ${sleep} ... AND click element id=security_action_deny ... ELSE log 不修改 sleep ${sleep} ${status} Run Keyword And Return Status Page should contain element xpath=/html/body/div[1]/div/div[3]/div[2]/div/div[1]/form[1]/div/div[4]/div[1]/div/div/div #判断页面是否包含该元素 run keyword if "${status}"=="False" log go on run keyword if "${status}"=="True" run keywords sleep ${sleep} ... AND click element xpath=/html/body/div[1]/div/div[3]/div[2]/div/div[1]/form[1]/div/div[4]/div[1]/div/div/div/p/span/span/i[2] ... AND sleep ${sleep} ${status1} Run Keyword And Return Status Page should contain element xpath=/html/body/div[1]/div/div[3]/div[2]/div/div[1]/form[1]/div/div[5]/div[1]/div/div/div #判断页面是否包含该元素 run keyword if "${status1}"=="False" log go on run keyword if "${status1}"=="True" run keywords sleep ${sleep} ... AND click element xpath=/html/body/div[1]/div/div[3]/div[2]/div/div[1]/form[1]/div/div[5]/div[1]/div/div/div/p/span/span/i[2] ... AND sleep ${sleep} Proxy-Deny [Arguments] ${ProxyDenyadd} [Documentation] 调用次关键字前需要添加必填参数: ... ${DenyCode}:填入403或404或451 ... ${Action}:填入deny ... ${Code}:填入403或404 ... ${Content}:填入TEXT或Profile ... ${SearchorCreate}:填入Search或Create ... ${BlockText}:填入TEXT文本框内容 ... ${ProfileName}:Profile的名字 ... ${File}:上传文件路径 ... ${TextValue}:填入text输入框内容 ... 添加subaction ${return} ${Action} Run Keyword And Ignore Error Get From Dictionary ${ProxyDenyadd} Action ${Action} Run Keyword If "${return}"=="FAIL" or "${Action}"=="${EMPTY}" set variable null ... ELSE set variable ${Action} ${return} ${DenyCode} Run Keyword And Ignore Error Get From Dictionary ${ProxyDenyadd} DenyCode ${DenyCode} Run Keyword If "${return}"=="FAIL" or "${DenyCode}"=="${EMPTY}" set variable null ... ELSE set variable ${DenyCode} ${return} ${ContentType} Run Keyword And Ignore Error Get From Dictionary ${ProxyDenyadd} ContentType ${ContentType} Run Keyword If "${return}"=="FAIL" or "${ContentType}"=="${EMPTY}" set variable null ... ELSE set variable ${ContentType} ${return} ${SearchorCreate} Run Keyword And Ignore Error Get From Dictionary ${ProxyDenyadd} SearchorCreate ${SearchorCreate} Run Keyword If "${return}"=="FAIL" or "${SearchorCreate}"=="${EMPTY}" set variable null ... ELSE set variable ${SearchorCreate} ${return} ${ProfileName} Run Keyword And Ignore Error Get From Dictionary ${ProxyDenyadd} ProfileName ${ProfileName} Run Keyword If "${return}"=="FAIL" or "${ProfileName}"=="${EMPTY}" set variable null ... ELSE set variable ${ProfileName} ${return} ${File} Run Keyword And Ignore Error Get From Dictionary ${ProxyDenyadd} File ${File} Run Keyword If "${return}"=="FAIL" or "${ProfileName}"=="${EMPTY}" set variable null ... ELSE set variable ${File} ${return} ${TextValue} Run Keyword And Ignore Error Get From Dictionary ${ProxyDenyadd} TextValue ${TextValue} Run Keyword If "${return}"=="FAIL" or "${TextValue}"=="${EMPTY}" set variable null ... ELSE set variable ${TextValue} Deny-subaction ${Action} ${DenyCode} sleep ${sleep} Deny-content ${ContentType} ${SearchorCreate} ${ProfileName} ${File} ${TextValue} Deny-subaction [Arguments] ${Action} ${DenyCode} [Documentation] 调用次关键字前需要添加必填参数: ... ${DenyCode}:填入403或404或451 ... ${Action}:填入deny ... 添加subaction ${return} ${DecryptionProfileSearchorCreate} Run Keyword And Ignore Error Get From Dictionary ${DecryptionProfile} DecryptionProfileSearchorCreate ${DecryptionProfileSearchorCreate} Run Keyword If "${return}"=="FAIL" or "${DecryptionProfileSearchorCreate}"=="${EMPTY}" set variable null ... ELSE set variable ${DecryptionProfileSearchorCreate} run keyword if "${Action}"=="Deny" and "${DenyCode}"=="403" run keywords sleep ${sleep} ... AND click element id=manipulation_select_addAction ... AND sleep ${sleep} ... AND click element //span[.="${DenyCode}"] ... AND sleep ${sleep} run keyword if "${Action}"=="Deny" and "${DenyCode}"=="404" run keywords sleep ${sleep} ... AND click element id=manipulation_select_addAction ... AND sleep ${sleep} ... AND click element //span[.="${DenyCode}"] ... AND sleep ${sleep} run keyword if "${Action}"=="Deny" and "${DenyCode}"=="451" run keywords sleep ${sleep} ... AND click element id=manipulation_select_addAction ... AND sleep ${sleep} ... AND click element //span[.="${DenyCode}"] ... AND sleep ${sleep} ... AND Deny-content [Arguments] ${ContentType}=File ${SearchorCreate}=null ${ProfileName}=null ${File}=null ${TextValue}=null [Documentation] 调用次关键字前需要添加必填参数: ... ${Code}:填入403或404 ... ${Content}:填入TEXT或Profile ... ${SearchorCreate}:填入Search或Create ... ${BlockText}:填入TEXT文本框内容 ... ${ProfileName}:Profile的名字 ... ${File}:上传文件路径 ... ${TextValue}:填入text输入框内容 ... 添加block数据内容 sleep ${sleep} run keyword if "${ContentType}"=="File" run keywords sleep ${sleep} ... AND click element id=manipulation_select_blockInfo ... AND sleep ${sleep} ... AND click element id=ResponseContentFile ... AND sleep ${sleep} ... AND click element id=manipulation_select_htmlProfile ... AND sleep ${sleep} ... AND Profile-SearchorCreate ${SearchorCreate} ${ProfileName} ${File} run keyword if "${ContentType}"=="Text" run keywords sleep ${sleep} ... AND click element id=manipulation_select_blockInfo ... AND sleep ${sleep} ... AND click ellement id=ResponseContentText ... AND sllep 1 ... AND input text id=manipulation_elInput_blockselect ${TextValue} ... AND sleep ${sleep} Profile-SearchorCreate_bak [Arguments] ${SearchorCreate} ${ProfileName} ${File} [Documentation] 调用次关键字前需要添加必填参数: ... ${SearchorCreate}:填入Search或Create ... ${ProfileName}:Profile的名字 ... ${File}:上传文件路径 ... 判断是新建还是搜索profile sleep ${sleep} run keyword if "${SearchorCreate}"=="Search" run keywords sleep ${sleep} ... AND input text xapth=/html/body/div/div[1]/div[1]/ul/div[1]/div/input ${ProfileName} ... AND sleep ${sleep} ... AND press keys xapth=/html/body/div/div[1]/div[1]/ul/div[1]/div/input ENTER ... AND sleep ${sleep} ... AND click element xpath=/html/body/div/div[1]/div[1]/ul/div[2]/div/li[1] ... AND sleep ${sleep} ... ELSE IF "${SearchorCreate}"=="Create" run keywords sleep ${sleep} ... AND click element xpath=/html/body/div/div[1]/div[1]/ul/div[1]/div/div/button ... AND sleep ${sleep} ... AND input text id=responsepages_profileName ${ProfileName} ... AND sleep ${sleep} ... AND Choose File xpath=//*[@id="policy_Manipulation_create6"]/div[2]/form/div[2]/div/div/div/input ${File} #上传文件 ... AND sleep ${sleep} ... AND click element id=responseAddOk1 ... AND sleep ${sleep} ... ELSE log 传入参数错误 Deny-Redirect_bak [Arguments] ${DenyRedirectadd} [Documentation] 调用次关键字前需要添加必填参数:${DenyRedirectadd}是个字典,字典中的数据为下 ... ${QType}:填入A或AAAA ... ${Avalue}:根据${QType}填入IPV4或IPV6的值 ... ${Attl}:根据${QType}填入A的ttl值或AAAA的ttl值 ... ${CNAMEvalue}:根据${QType}填入A的CNAME的域名值或AAAA的CNAME域名值 ... ${CNAMEttl}:根据${QType}填入A的CNAME的ttl值或AAAA的CNAME的ttl值 ... 新建Redirect ${return} ${QType} Run Keyword And Ignore Error Get From Dictionary ${DenyRedirectadd} QType ${QType} Run Keyword If "${return}"=="FAIL" or "${QType}"=="${EMPTY}" set variable null ... ELSE set variable ${QType} ${return} ${Avalue} Run Keyword And Ignore Error Get From Dictionary ${DenyRedirectadd} Avalue ${Avalue} Run Keyword If "${return}"=="FAIL" or "${Avalue}"=="${EMPTY}" set variable null ... ELSE set variable ${Avalue} ${return} ${Attl} Run Keyword And Ignore Error Get From Dictionary ${DenyRedirectadd} Attl ${Attl} Run Keyword If "${return}"=="FAIL" or "${Attl}"=="${EMPTY}" set variable null ... ELSE set variable ${Attl} ${return} ${CNAMEvalue} Run Keyword And Ignore Error Get From Dictionary ${DenyRedirectadd} CNAMEvalue ${CNAMEvalue} Run Keyword If "${return}"=="FAIL" or "${CNAMEvalue}"=="${EMPTY}" set variable null ... ELSE set variable ${CNAMEvalue} ${return} ${CNAMEttl} Run Keyword And Ignore Error Get From Dictionary ${DenyRedirectadd} CNAMEttl ${CNAMEttl} Run Keyword If "${return}"=="FAIL" or "${CNAMEttl}"=="${EMPTY}" set variable null ... ELSE set variable ${CNAMEttl} sleep ${sleep} click element id=interceptionadd_add_filter sleep ${sleep} run keyword if "${QType}"=="A" run keywords sleep ${sleep} ... AND input text id=A00 ${Avalue} ... AND sleep ${sleep} ... AND input text id=ttl00 ${Attl} ... AND sleep ${sleep} ... AND click element id=interceptionadd_addForm ... AND sleep ${sleep} ... AND input text id=Cname01 ${CNAMEvalue} ... AND sleep ${sleep} ... AND input text id=ttl01 ${CNAMEttl} run keyword if "${QType}"=="AAAA" run keywords sleep ${sleep} ... AND click element id=dns_qtype_radio01 ... AND input text id=AAAA00 ${Avalue} ... AND sleep ${sleep} ... AND input text id=ttl00 ${Attl} ... AND sleep ${sleep} ... AND click element id=interceptionadd_addForm ... AND sleep ${sleep} ... AND input text id=Cname01 ${CNAMEvalue} ... AND sleep ${sleep} ... AND input text id=ttl01 ${CNAMEttl} sleep ${sleep} click element id=interceptionadd_shezhidns Replace-Action-Parameters-for1 [Arguments] ${ReplaceActionParameters} [Documentation] 调用次关键字前需要添加必填参数:${ReplaceActionParameters}是个字典,字典中的数据为下 ... ${ParametersType}:列表格式,Search 下拉框中内容 ... ${xxxFind}:是Find输入框输入的值 ... ${XXXReplacewith} :是 Replacewith输入框中输入的值 ${return} ${ParametersType} Run Keyword And Ignore Error Get From Dictionary ${ReplaceActionParameters} ParametersType ${ParametersType} Run Keyword If "${return}"=="FAIL" or "${ParametersType}"=="${EMPTY}" set variable null ... ELSE set variable ${ParametersType} ${return} ${RequestURIFind} Run Keyword And Ignore Error Get From Dictionary ${ReplaceActionParameters} RequestURIFind ${RequestURIFind} Run Keyword If "${return}"=="FAIL" or "${RequestURIFind}"=="${EMPTY}" set variable null ... ELSE set variable ${RequestURIFind} ${return} ${RequestURIReplacewith} Run Keyword And Ignore Error Get From Dictionary ${ReplaceActionParameters} RequestURIReplacewith ${RequestURIReplacewith} Run Keyword If "${return}"=="FAIL" or "${RequestURIReplacewith}"=="${EMPTY}" set variable null ... ELSE set variable ${RequestURIReplacewith} ${return} ${RequestBodyFind} Run Keyword And Ignore Error Get From Dictionary ${ReplaceActionParameters} RequestBodyFind ${RequestBodyFind} Run Keyword If "${return}"=="FAIL" or "${RequestBodyFind}"=="${EMPTY}" set variable null ... ELSE set variable ${RequestBodyFind} ${return} ${RequestBodyReplacewith} Run Keyword And Ignore Error Get From Dictionary ${ReplaceActionParameters} RequestBodyReplacewith ${RequestBodyReplacewith} Run Keyword If "${return}"=="FAIL" or "${RequestBodyReplacewith}"=="${EMPTY}" set variable null ... ELSE set variable ${RequestBodyReplacewith} ${return} ${ResponseBodyFind} Run Keyword And Ignore Error Get From Dictionary ${ReplaceActionParameters} ResponseBodyFind ${ResponseBodyFind} Run Keyword If "${return}"=="FAIL" or "${ResponseBodyFind}"=="${EMPTY}" set variable null ... ELSE set variable ${ResponseBodyFind} ${return} ${ResponseBodyReplacewith} Run Keyword And Ignore Error Get From Dictionary ${ReplaceActionParameters} ResponseBodyReplacewith ${ResponseBodyReplacewith} Run Keyword If "${return}"=="FAIL" or "${ResponseBodyReplacewith}"=="${EMPTY}" set variable null ... ELSE set variable ${ResponseBodyReplacewith} ${return} ${RequestHeaderFind} Run Keyword And Ignore Error Get From Dictionary ${ReplaceActionParameters} RequestHeaderFind ${RequestHeaderFind} Run Keyword If "${return}"=="FAIL" or "${RequestHeaderFind}"=="${EMPTY}" set variable null ... ELSE set variable ${RequestHeaderFind} ${return} ${RequestHeaderReplacewith} Run Keyword And Ignore Error Get From Dictionary ${ReplaceActionParameters} RequestHeaderReplacewith ${RequestHeaderReplacewith} Run Keyword If "${return}"=="FAIL" or "${RequestHeaderReplacewith}"=="${EMPTY}" set variable null ... ELSE set variable ${RequestHeaderReplacewith} ${return} ${ResponseHeaderFind} Run Keyword And Ignore Error Get From Dictionary ${ReplaceActionParameters} ResponseHeaderFind ${ResponseHeaderFind} Run Keyword If "${return}"=="FAIL" or "${ResponseHeaderFind}"=="${EMPTY}" set variable null ... ELSE set variable ${ResponseHeaderFind} ${return} ${ResponseHeaderReplacewith} Run Keyword And Ignore Error Get From Dictionary ${ReplaceActionParameters} ResponseHeaderReplacewith ${ResponseHeaderReplacewith} Run Keyword If "${return}"=="FAIL" or "${ResponseHeaderReplacewith}"=="${EMPTY}" set variable null ... ELSE set variable ${ResponseHeaderReplacewith} ${len} Get Length ${ParametersType} ${len1} evaluate ${len}+1 FOR ${i} IN RANGE 1 ${len1} Replace-Action-Parameters-for2 ${ParametersType} ${i} ${RequestURIFind} ${RequestURIReplacewith} ${RequestBodyFind} ${RequestBodyReplacewith} ${ResponseBodyFind} ... ${ResponseBodyReplacewith} ${RequestHeaderFind} ${RequestHeaderReplacewith} ${ResponseHeaderFind} ${ResponseHeaderReplacewith} sleep ${sleep} run keyword if "${len}"!="1" run keywords sleep ${sleep} ... AND clcik element id=replaceadd_btn ... AND sleep ${sleep} END sleep ${sleep} Replace-Action-Parameters-for2 [Arguments] ${ParametersType} ${i} ${RequestURIFind} ${RequestURIReplacewith} ${RequestBodyFind} ${RequestBodyReplacewith} ${ResponseBodyFind} ... ${ResponseBodyReplacewith} ${RequestHeaderFind} ${RequestHeaderReplacewith} ${ResponseHeaderFind} ${ResponseHeaderReplacewith} [Documentation] 调用次关键字前需要添加必填参数: ... ${ParametersType}:列表格式,Search 下拉框中内容 ... ${i}:索引值 ... ${xxxFind}:是Find输入框输入的值 ... ${XXXReplacewith} :是 Replacewith输入框中输入的值 FOR ${j} IN @{ParametersType} run keyword if "${j}"=="RequestURI" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="policy_paper_left"]/div[12]/div/div/form/div[3]/ul/li[${i}]/div[1]/div/div/div[1]/input ... AND sleep ${sleep} ... AND input text xpath=//*[@id="policy_paper_left"]/div[12]/div/div/form/div[3]/ul/li[${i}]/div[2]/div/div/input ${RequestURIFind} ... AND sleep ${sleep} ... AND input text xpath=//*[@id="policy_paper_left"]/div[12]/div/div/form/div[3]/ul/li[${i}]/div[3]/div/div/input ${RequestURIReplacewith} ... AND sleep ${sleep} run keyword if "${j}"=="RequestBody" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="policy_paper_left"]/div[12]/div/div/form/div[3]/ul/li[${i}]/div[1]/div/div/div[1]/input ... AND sleep ${sleep} ... AND input text xpath=//*[@id="policy_paper_left"]/div[12]/div/div/form/div[3]/ul/li[${i}]/div[2]/div/div/input ${RequestBodyFind} ... AND sleep ${sleep} ... AND input text xpath=//*[@id="policy_paper_left"]/div[12]/div/div/form/div[3]/ul/li[${i}]/div[3]/div/div/input ${RequestBodyReplacewith} ... AND sleep ${sleep} run keyword if "${j}"=="ResponseBody" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="policy_paper_left"]/div[12]/div/div/form/div[3]/ul/li[${i}]/div[1]/div/div/div[1]/input ... AND sleep ${sleep} ... AND input text xpath=//*[@id="policy_paper_left"]/div[12]/div/div/form/div[3]/ul/li[${i}]/div[2]/div/div/input ${ResponseBodyFind} ... AND sleep ${sleep} ... AND input text xpath=//*[@id="policy_paper_left"]/div[12]/div/div/form/div[3]/ul/li[${i}]/div[3]/div/div/input ${ResponseBodyReplacewith} ... AND sleep ${sleep} run keyword if "${j}"=="RequestHeader" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="policy_paper_left"]/div[12]/div/div/form/div[3]/ul/li[${i}]/div[1]/div/div/div[1]/input ... AND sleep ${sleep} ... AND input text xpath=//*[@id="policy_paper_left"]/div[12]/div/div/form/div[3]/ul/li[${i}]/div[2]/div/div/input ${RequestHeaderFind} ... AND sleep ${sleep} ... AND input text xpath=//*[@id="policy_paper_left"]/div[12]/div/div/form/div[3]/ul/li[${i}]/div[3]/div/div/input ${RequestHeaderReplacewith} ... AND sleep ${sleep} run keyword if "${j}"=="ResponseHeader" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="policy_paper_left"]/div[12]/div/div/form/div[3]/ul/li[${i}]/div[1]/div/div/div[1]/input ... AND sleep ${sleep} ... AND input text xpath=//*[@id="policy_paper_left"]/div[12]/div/div/form/div[3]/ul/li[${i}]/div[2]/div/div/input ${ResponseHeaderFind} ... AND sleep ${sleep} ... AND input text xpath=//*[@id="policy_paper_left"]/div[12]/div/div/form/div[3]/ul/li[${i}]/div[3]/div/div/input ${ResponseHeaderReplacewith} ... AND sleep ${sleep} END HijackFile-SearchorCreate [Arguments] ${HijackFileadd} [Documentation] 调用次关键字前需要添加必填参数:${HijackFileadd}是个字典,字典中的数据为下 ... ${SearchorCreate}:填入Search或Create ... ${Hijackname}:填入新建hijack的name ... ${Hijackfile}:填入新建hijack文件的路径 ... ${DowName}:根据情况填入close或open或其他 ... ${Input};填入shuru或其他 ... ${Hijacktype}:填入选择文件类型的元素 ... 判断是新建还是搜索HijackFile ${return} ${SearchorCreate} Run Keyword And Ignore Error Get From Dictionary ${HijackFileadd} SearchorCreate ${SearchorCreate} Run Keyword If "${return}"=="FAIL" or "${SearchorCreate}"=="${EMPTY}" set variable null ... ELSE set variable ${SearchorCreate} ${return} ${Hijackname} Run Keyword And Ignore Error Get From Dictionary ${HijackFileadd} Hijackname ${Hijackname} Run Keyword If "${return}"=="FAIL" or "${Hijackname}"=="${EMPTY}" set variable null ... ELSE set variable ${Hijackname} ${return} ${Hijackfile} Run Keyword And Ignore Error Get From Dictionary ${HijackFileadd} Hijackfile ${Hijackfile} Run Keyword If "${return}"=="FAIL" or "${Hijackfile}"=="${EMPTY}" set variable null ... ELSE set variable ${Hijackfile} ${return} ${DowName} Run Keyword And Ignore Error Get From Dictionary ${HijackFileadd} DowName ${DowName} Run Keyword If "${return}"=="FAIL" or "${DowName}"=="${EMPTY}" set variable null ... ELSE set variable ${DowName} ${return} ${Input} Run Keyword And Ignore Error Get From Dictionary ${HijackFileadd} Input ${Input} Run Keyword If "${return}"=="FAIL" or "${Input}"=="${EMPTY}" set variable null ... ELSE set variable ${Input} ${return} ${Hijacktype} Run Keyword And Ignore Error Get From Dictionary ${HijackFileadd} Hijacktype ${Hijacktype} Run Keyword If "${return}"=="FAIL" or "${Hijacktype}"=="${EMPTY}" set variable null ... ELSE set variable ${Hijacktype} sleep ${sleep} click element xpath=//*[@id="policy_paper_left"]/div[12]/div/div/form/div[4]/div/div/div/div sleep ${sleep} run keyword if "${SearchorCreate}"=="Search" run keywords sleep ${sleep} ... AND input text xapth=/html/body/div/div[1]/div[1]/ul/div[1]/div/input ${Hijackname} ... AND sleep ${sleep} ... AND press keys xapth=/html/body/div/div[1]/div[1]/ul/div[1]/div/input ENTER ... AND sleep ${sleep} ... AND click element xpath=/html/body/div/div[1]/div[1]/ul/div[2]/div/li[1] ... AND sleep ${sleep} ... ELSE IF "${SearchorCreate}"=="Create" run keywords sleep ${sleep} ... AND click element xpath=/html/body/div/div[1]/div[1]/ul/div[1]/div/div/button ... AND sleep ${sleep} ... AND HijackFile-Create ${Hijackname} ${Hijackfile} ${DowName} ${Input} ${Hijackname} ${Hijacktype} ... ELSE log 传入参数错误 HijackFile-Create [Arguments] ${Hijackfile} ${DowName} ${Input} ${Hijackname} ${Hijacktype} [Documentation] 调用次关键字前需要添加必填参数: ... ${Hijackname}:填入新建hijack的name ... ${Hijackfile}:填入新建hijack文件的路径 ... ${DowName}:根据情况填入close或open或其他 ... ${Input};填入shuru或其他 ... ${Hijacktype}:填入选择文件类型的元素 ... 新建hijack sleep ${sleep} input id=hijack_profileName ${Hijackname} #输入name sleep ${sleep} Choose File xpath=//*[@id="proxy"]/div[11]/div/div[1]/div[2]/form/div[2]/div/div/div[1]/input ${Hijackfile} #上传文件 sleep ${sleep} run keyword if "${DowName}"=="close" and "${Input}"=="shuru" run keywords sleep ${sleep} ... AND input text id=hijack_contentName ${Hijackname} ... ELSE IF "${DowName}"=="open" click element xpath=//*[@id="contentNameChoose"]/div[1]/span[2] sleep ${sleep} click element id=hijackAddContentType #点击+ 打开侧滑窗口 sleep ${sleep} click element ${Hijacktype} #选择文件类型 sleep ${sleep} click element id=hijackAddOk1 #点击OK InsertScript-SearchorCreate [Arguments] ${InsertScript} [Documentation] 调用次关键字前需要添加必填参数:${InsertScript}是个字典,字典中的数据为下 ... ${SearchorCreate}:填入Search或Create ... ${Insertname}:填入新建insert的name ... ${Insertfile}:填入新建insert文件的路径 ... ${Inserttype}:根据情况填入css或js ... ${Insertjstype};填入Before Page Load或After Page Load ... 判断是新建还是搜索insert ${return} ${SearchorCreate} Run Keyword And Ignore Error Get From Dictionary ${InsertScript} SearchorCreate ${SearchorCreate} Run Keyword If "${return}"=="FAIL" or "${SearchorCreate}"=="${EMPTY}" set variable null ... ELSE set variable ${SearchorCreate} ${return} ${Insertname} Run Keyword And Ignore Error Get From Dictionary ${InsertScript} Insertname ${Insertname} Run Keyword If "${return}"=="FAIL" or "${Insertname}"=="${EMPTY}" set variable null ... ELSE set variable ${Insertname} ${return} ${Insertfile} Run Keyword And Ignore Error Get From Dictionary ${InsertScript} Insertfile ${Insertfile} Run Keyword If "${return}"=="FAIL" or "${Insertfile}"=="${EMPTY}" set variable null ... ELSE set variable ${Insertfile} ${return} ${Inserttype} Run Keyword And Ignore Error Get From Dictionary ${InsertScript} Inserttype ${Inserttype} Run Keyword If "${return}"=="FAIL" or "${Inserttype}"=="${EMPTY}" set variable null ... ELSE set variable ${Inserttype} ${return} ${Insertjstype} Run Keyword And Ignore Error Get From Dictionary ${InsertScript} Insertjstype ${Insertjstype} Run Keyword If "${return}"=="FAIL" or "${Insertjstype}"=="${EMPTY}" set variable null ... ELSE set variable ${Insertjstype} sleep ${sleep} click element id=manipulation_select_insetScript sleep ${sleep} run keyword if "${SearchorCreate}"=="Search" run keywords sleep ${sleep} ... AND input text xapth=/html/body/div/div[1]/div[1]/ul/div[1]/div/input ${Insertname} ... AND sleep ${sleep} ... AND press keys xapth=/html/body/div/div[1]/div[1]/ul/div[1]/div/input ENTER ... AND sleep ${sleep} ... AND click element xpath=/html/body/div/div[1]/div[1]/ul/div[2]/div/li[1] ... AND sleep ${sleep} ... ELSE IF "${SearchorCreate}"=="Create" run keywords sleep ${sleep} ... AND click element xpath=/html/body/div/div[1]/div[1]/ul/div[1]/div/div/button ... AND sleep ${sleep} ... AND InsertScript-Create ${Insertname} ${Insertfile} ${Inserttype} ${Insertjstype} ... ELSE log 传入参数错误 InsertScript-Create [Arguments] ${Insertname} ${Insertfile} ${Inserttype} ${Insertjstype} [Documentation] 调用次关键字前需要添加必填参数: ... ${Insertname}:填入新建insert的name ... ${Insertfile}:填入新建insert文件的路径 ... ${Inserttype}:根据情况填入css或js ... ${Insertjstype};填入Before Page Load或After Page Load ... 新建insert sleep ${sleep} input id=insert_profileName ${Insertname} #输入name sleep ${sleep} Choose File xpath=//*[@id="insertAddUpload"]/div[1]/input ${Insertfile} #上传文件 sleep ${sleep} clcik element id=insert_select_format sleep ${sleep} run keyword if "${Inserttype}"=="css" run keywords sleep ${sleep} ... AND click element //span[.="${Inserttype}"] #选择css run keyword if "${Inserttype}"=="js" run keywords sleep ${sleep} ... AND click element //span[.="${Inserttype}"] ... AND sleep ${sleep} ... AND click element id=insert_select_insertOn #点击下拉框 ... AND sleep ${sleep} ... AND click element //span[.="${Insertjstype}"] sleep ${sleep} click element id=insertAddOk1 #点击OK ProxyLogSession [Arguments] ${LogSession} [Documentation] 调用次关键字前需要添加必填参数: ... ${LogSession}:填入clcos或其他 run keyword if "${LogSession}"=="close" run keywords sleep ${sleep} ... AND click element id=manipulationSwitch0 ... ELSE log 开启日志 ProxyLogOptions [Arguments] ${LogOptions} [Documentation] 调用次关键字前需要添加必填参数: ... ${LogOptions}:填入All或其他 run keyword if "${LogOptions}"=="All" run keywords sleep ${sleep} ... AND click element id=logtype1 ... ELSE log 选择Metadata only ProxyEnabled [Arguments] ${Enabled} [Documentation] 调用次关键字前需要添加必填参数: ... ${Enabled}:填入open或其他 run keyword if "${Enabled}"=="open" run keywords sleep ${sleep} ... AND click element xpath=//*[@id="proxyManipulationUse"]/label[contains(text(), "Enabled")]/following-sibling::div/div ... AND sleep ${sleep} ... AND click element xpath=/html/body/div/div/div[3]/button[2] ... ELSE log 策略生效 Proxy-Policies-OK sleep ${sleep} click element id=proxyManipulationSuccess sleep ${sleep} PoliciesDelete sleep ${sleep} click element id=appDel sleep ${sleep} click element xpath=/html/body/div/div/div[3]/button[2] sleep ${sleep}