我想实现以下过程。这些脚本是用Katalon编写的,但这并不重要。硒方法就足够了。
我测试对话框窗口中两个元素的外观。如果出现文本消息,则第二个元素将不会出现,并且对话框窗口将关闭。如果未显示第一个元素(消息),则单击在一定时间后显示的按钮。
我想继续,避免使用等待元素可见/不可见的方法。我不知道该怎么做,但是首先触发任何动作,它将通过它。
问题是测试等待消息一定时间,如果消息未显示(例如30秒),则单击按钮。我要避免等到可见为止,而不要等到立即单击按钮。因此,目标是跟踪两个并行动作(不是硒动作),并且首先触发哪个动作。有什么办法吗?也许使用任务?
代码如下:
TestObject dialogWinEl = findTestObject("Object Repository/FinacDocAndPayments/dialogWindow/div_dialogWin")
WebUI.waitForElementVisible(dialogWinEl, GlobalVariable.TIMEOUT_ELEMENT, FailureHandling.OPTIONAL)
TestObject statusMsgFilesDownloadEl = findTestObject("Object Repository/InvoiceDetailPage/div_dialogWin/span_noDocFoundStatus")
boolean noDownloadFiles = WebUI.waitForElementVisible(statusMsgFilesDownloadEl, GlobalVariable.DOWNLOAD_BTN, FailureHandling.OPTIONAL)
if(noDownloadFiles){
KeywordUtil.markPassed("No files found to download. Closing dialog")
}
else{
KeywordUtil.markPassed("Files found. Click on Download files")
TestObject btnEl = findTestObject('Object Repository/InvoicesAndPayments_Global/btn_generic', [('btn_text'):btnName])
WebUI.waitForElementClickable(btnEl, GlobalVariable.TIMEOUT_ELEMENT)
WebUI.click(btnEl)
KeywordUtil.markPassed("File downloaded. Closing dialog window")
}
TestObject xBtn = findTestObject('Object Repository/InvoicesAndPayments_Global/confDialog/div_closeBtn')
WebUI.waitForElementClickable(xBtn, GlobalVariable.TIMEOUT_ELEMENT)
WebUI.click(xBtn)
KeywordUtil.markPassed("Dialog window has been closed")
基本上,变量noDownloadFiles
等于特定元素的状态(可见或不可见),它等待var GlobalVariable.DOWNLOAD_BTN
= 20sec内的时间。这里的问题是,如果此变量为false,则意味着它等待了特定的时间,然后在else分支中继续。关键是,如果按钮较早出现,则不必等待statusMsgFilesDownloadEl
是否可见。
我只想使用这个:
WebUI.waitForElementVisible(statusMsgFilesDownloadEl, GlobalVariable.DOWNLOAD_BTN, FailureHandling.OPTIONAL)
和
WebUI.waitForElementClickable(btnEl, GlobalVariable.TIMEOUT_ELEMENT)
,一旦计算出第一或第二,它将继续。没有理由等待一个,然后再等待另一个。