If statement 如果在AutoIt中,请避免嵌套
下面是我的AutoIt代码。我想减少这段代码,避免在。。。其他的函数中的EndIf构造 我该怎么做If statement 如果在AutoIt中,请避免嵌套,if-statement,nested,autoit,If Statement,Nested,Autoit,下面是我的AutoIt代码。我想减少这段代码,避免在。。。其他的函数中的EndIf构造 我该怎么做 Func launchTestsCC($partenaire, $projet) If $CometEnv = "DEV" Or $CometEnv = "VAL" Then initDossierFormConfig($partenaire) initPartenaireWin($partenaire) Sleep(500)
Func launchTestsCC($partenaire, $projet)
If $CometEnv = "DEV" Or $CometEnv = "VAL" Then
initDossierFormConfig($partenaire)
initPartenaireWin($partenaire)
Sleep(500)
For $i = 2 To 8 Step 1
$ouvrirDossier = ouvrirDossier($configDossier[2], $configDossier[3], "ADI,C", $configDossier[4], $configDossier[5], False)
ConsoleWrite("$ouvrirDossier ==> " & $ouvrirDossier & @CRLF)
If $ouvrirDossier = 1 Then
Sleep(1000)
jabSetCombo("", "FRAIS MEDICAUX", 3)
jabSetCombo("", $listsContrats[$i], 4)
ConsoleWrite("$listsContrats[" & $i & "] ==> " & $listsContrats[$i] & @CRLF)
jabSetText("", $currentDate, 5)
jabSetCombo("", $configDossier[6], 5)
jabSetCombo("", $configDossier[7], 6)
jabSetText("", "19549", 7)
$valider = jabClicBouton("Valider")
If $valider = 1 Then
If getWinError() = 1 Then
ConsoleWrite("getWinError() $valider ==> 1" & @CRLF)
setTestResult($openSheet, $CalcResult, $partenaire, $listsContrats[$i], "Dossier créer", "TEST OK")
$benef = jabClicBouton("ADI,FM,B")
If $benef = 1 Then
If getWinError() = 1 Then
$ajouter = jabClicBouton("Ajouter")
$searchTextbenef = searchTextInPageTimeOut("jabGetLabel", "Appliquer à :", 5)
If $ajouter = 1 And $searchTextbenef = 1 Then
selectCheckBox("", 3)
$x4 = 0
$y4 = 0
$checkBoxS3P3 = rechercheImage("Benef_S3P3.bmp", 5, 1, $x4, $y4, "")
If $checkBoxS3P3 = 1 Then
$codeRetour = cliqueSur("Benef_S3P3.bmp", -65, 0)
If $codeRetour = 0 Then
ConsoleWrite("Erreur en séléctionant S3P3" & @CR)
setTestResult($openSheet, $CalcResult, $partenaire, $listsContrats[$i], "Erreur en séléctionant S3P3", "TEST KO")
Else
$valider = jabClicBouton("Valider")
If $valider = 1 Then
If getWinError() = 1 Then
$retour = jabClicBouton("Retour")
EndIf
EndIf
EndIf
EndIf
Else
setTestResult($openSheet, $CalcResult, $partenaire, $listsContrats[$i], "Probleme au clic sur ajouter benef", "TEST OK")
EndIf
Else
ConsoleWrite("getWinError() $benef ==> 0" & @CRLF)
setTestResult($openSheet, $CalcResult, $partenaire, $listsContrats[$i], "Impossible d'ajouter des bénéf", "TEST KO")
ContinueLoop
EndIf
EndIf
Else
ConsoleWrite("getWinError() $valider ==> 0" & @CRLF)
$suiteConfig = "Cadence de recouvrement : " & $configDossier[8] & @CR & "Mode de recouvrement : " & $configDossier[9]
$disConfig = "Paramètres du dossier : " & $configDossier[2] & " | " & $configDossier[3] & " | " & $configDossier[4] & " | " & $configDossier[5] & @CR & $suiteConfig
setTestResult($openSheet, $CalcResult, $partenaire, $listsContrats[$i], "Message d'erreur ou Warning" & @CR & $disConfig, "TEST KO")
EndIf
EndIf
Else
ConsoleWriteError("Erreur ouverture dossier " & $partenaire & @CRLF)
$suiteConfig = "Cadence de recouvrement : " & $configDossier[8] & @CR & "Mode de recouvrement : " & $configDossier[9]
$disConfig = "Paramètres du dossier : " & $configDossier[2] & " | " & $configDossier[3] & " | " & $configDossier[4] & " | " & $configDossier[5] & @CR & $suiteConfig
setTestResult($openSheet, $CalcResult, $partenaire, $listsContrats[$i], "Erreur ouverture dossier/Temps dépassé pour ouvrir le dossier" & @CR & $disConfig, "TEST KO")
ContinueLoop
EndIf
Next
EndIf
EndFunc ;==>launchTestsCC
让if语句具有多个条件而不是定义多个if语句可能会对您有所帮助。如AutoIt帮助文件中所述: 表达式可以包含AND、OR、OR或NOT的布尔运算符,也可以包含逻辑运算符=、=、=,并在需要时用括号分组 下面是一个例子:
if $myValue = 1 AND $yourValue = 2 Then
...
EndIf
将它分成多个函数并调用第一个函数,每个函数中的函数调用下一个函数。例如,如果要创建和装饰窗,步骤如下:
- Create the window
- Decorate the window
您可以编写2个对应于2个步骤的函数和1个隐藏实现的函数,如下所示:假设_CreateWindow返回已创建窗口的句柄,如果无法创建窗口,则返回Null;如果未发生错误,则返回布尔值True;如果无法装饰窗口,则返回布尔值False
Func _createDecoratedWindow()
Local $hwnd
Switch _createDecoratedWindow__createWindow($hwnd)
Case 'createWindow' ; A failure occurs at createWindow step
; Do something on failure, e.g: write an error message to log file
Case 'decorateWindow' ; A failure occurs at decorateWindow step
; Code to execute when the step decorateWindow failed
EndSwitch
Return $hwnd
EndFunc
Func _createDecoratedWindow__createWindow(ByRef $hwnd)
$hwnd = _CreateWindow(...)
If $hwnd <> Null Then ; Check whether the operation is success
; Do something on success before proceed to the next step
Return _createDecoratedWindow__decorateWindow($hwnd) ; Next step
Else
; You can add some code to execute everytime the operation is failed here
Return 'createWindow' ; Return name of the step at which the chain is broken
EndIf
EndFunc
Func _createDecoratedWindow__decorateWindow(ByRef $hwnd)
Local $decorateSuccess = _DecorateWindow($hwnd)
If $decorateSuccess Then
Return ; No error occur
Else
; Do something when error occurs at this step
Return 'decorateWindow'
EndIf
EndFunc
并将上一步更改为调用此步骤,而不是_createDecoratedWindow u decorateWindow
然后写一个包装
Func operationName(...)
...
Switch CallTheFirstStep()
Case 'firstStep'
AdditionalActionsToHandleError()
...
EndIf
...
EndFunc
注意:为了避免名称冲突,我的示例中的函数名称都很难看。使用switch:或select:语句来处理此问题。
Func _createDecoratedWindow__createWindow(ByRef $hwnd)
$hwnd = _CreateWindow(...)
If $hwnd <> Null Then
; On success code
; Just change the line below and you're done
Return _createDecoratedWindow__resizeWindow($hwnd)
Else
; On failure code
Return 'createWindow'
EndIf
EndFunc
Func stepName(...)
PerformTheOperation()
If TheOperationIsSuccess() Then
OnSuccess()
Return NextStep() ; if any
Else
OnFailure()
Return 'stepName'
EndIf
EndFunc
Func operationName(...)
...
Switch CallTheFirstStep()
Case 'firstStep'
AdditionalActionsToHandleError()
...
EndIf
...
EndFunc