Запускать / запускать ранее взаимодействие в Selenium WebDriver - PullRequest
0 голосов
/ 14 ноября 2018

Я хочу добиться следующего процесса.Сценарии написаны на каталоне, но это не важно.Селенового подхода достаточно.

Я тестирую внешний вид двух элементов в диалоговом окне.Если появится текстовое сообщение, второй элемент не появится, и диалоговое окно закроется.Если первый элемент (сообщение) не отображается, нажимается кнопка, которая отображается через определенное время.

Я хотел бы продолжить и избегать использования ожидания, пока элемент не станет видимым / невидимым.Я не знаю, как это сделать, но любое действие инициируется первым, оно пройдет через это.

Проблема в том, что тест ожидает сообщение в течение определенного времени, и, если оно не отображается в течение (скажем, 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) 

, и как только первый или второй будет оценен, он продолжится.Нет причин ждать одного, а потом другого.

...