Я хочу добиться следующего процесса.Сценарии написаны на каталоне, но это не важно.Селенового подхода достаточно.
Я тестирую внешний вид двух элементов в диалоговом окне.Если появится текстовое сообщение, второй элемент не появится, и диалоговое окно закроется.Если первый элемент (сообщение) не отображается, нажимается кнопка, которая отображается через определенное время.
Я хотел бы продолжить и избегать использования ожидания, пока элемент не станет видимым / невидимым.Я не знаю, как это сделать, но любое действие инициируется первым, оно пройдет через это.
Проблема в том, что тест ожидает сообщение в течение определенного времени, и, если оно не отображается в течение (скажем, 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
равна статусу конкретного элемента (видимый или нет) и ждет временито есть в переменной GlobalVariable.DOWNLOAD_BTN
= 20 сек.Проблема здесь в том, что если эта переменная имеет значение false, это означает, что она ждала определенное количество времени, а затем продолжает работу в ветви else.Дело в том, что если кнопка появляется раньше, ей не нужно ждать, чтобы увидеть, видима ли statusMsgFilesDownloadEl
или нет.Я просто хочу использовать это:
WebUI.waitForElementVisible(statusMsgFilesDownloadEl, GlobalVariable.DOWNLOAD_BTN, FailureHandling.OPTIONAL)
и
WebUI.waitForElementClickable(btnEl, GlobalVariable.TIMEOUT_ELEMENT)
, и как только первый или второй будет оценен, он продолжится.Нет причин ждать одного, а потом другого.