Dave-Evers, message helped me. Thanks Dave! Execute Javascript Alert Disappears
Hi there,
So finally is there a trick to “fix” the WebUI.verifyalertpresent ? I’ve the same trouble.
My script is mostly based on alert present or not in a loop to catch the alert if true and move to next iteration.
It’s broken since december. I try to fix using old version of firefox (94) but it’s not very stable.
I understand that this is due to Chrome update not Katalon but i really appreciate help on that purpose.
My code is basically :
if WebUI.verifyAlertPresent is true then gettext and move to next i
else “do that”
The following works for me:
KSE 8.2.0
Windows 10 Enterprise (64-bit)
Chrome: 97.0.4692.71 (Official Build) (64-bit)
import static com.kms.katalon.core.testobject.ObjectRepository.findTestObject
import com.kms.katalon.core.model.FailureHandling as FailureHandling
import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI
WebUI.openBrowser('http://demo.automationtesting.in/Alerts.html')
//Record the AlertBtn object or
//Create a manual AlertBtn object with XPath = //button[@onclick='alertbox()']
WebUI.waitForElementVisible(findTestObject('0.1 AlertChecks/AlertBtn'), 30, FailureHandling.OPTIONAL)
WebUI.click(findTestObject('0.1 AlertChecks/AlertBtn'), FailureHandling.OPTIONAL)
if (WebUI.verifyAlertPresent(30)) {
println('Alert is present')
}
I tried your code with KS v8.2.0 + Chrome 97.0.4692.71 on macOS 12.1. The Alert dialog disappeared instantly, and after 30 seconds the test case failed.
With Firefox 96.0.1 also failed.
With Safari 15.2 passed. I expected it to pass as reported previously.
I though the point is resolved by adding Chrome capabilities UnexpectedAlertBehaviour=IGNORE
no trouble since 2 days at last.
Don’t know if it will work for you all folks.
Cheers.
You just need to add this option in Desired Capabilities in your project settings.
Almost 1 week without trouble since i add this.
Sadly the desired Capabilities solution did not work for me.
However, I did notice an interesting quirk, which I managed to take advantage of. In this situation I’m automating the keypress of the delete button on my form. The alert flashed on and then off. If I now manually pressed the delete button the Alert appeared and stayed. So with that in mind, I wrote this, which works. it’s not pretty, please let me know if there’s a nicer way.
So the delete button is effectively pressed twice
WebUI.click(findTestObject(‘the_delete_button’))
try { WebUI.delay(2)
WebUI.verifyAlertPresent(1)
}
catch(Exception ex) {
WebUI.switchToDefaultContent()
WebUI.click(findTestObject('the_delete_button))
}
WebUI.waitForAlert(5)
WebUI.verifyAlertPresent(5)
WebUI.acceptAlert()
Thank you, this also help me. Very creative solution!
Interesting take. Here’s my take:
Your code may be suffering from “compensating errors” and, luckily for you, you coded it in such a way (try-catch) that the final compensation “works”. The problem with compensating errors is this:
When you fix one of the errors, the other error then appears.
My guess is, you don’t need the try-catch. You merely need to…
WebUI.click(...)
WebUI.waitForAlert(5) // that's a LONG time!
WebUI.acceptAlert()
Of course, you may need to tinker with the timeouts, but I’d be surprised if you truly need anything else. And frankly, I couldn’t live with a try-catch like that – it’s just waiting to bite me.
Hi all,
From my Experience, we see that Katalon opened API to get running driver, based on that, we can interact with alert
Below is example:
import static com.kms.katalon.core.testobject.ObjectRepository.findTestObject
import org.openqa.selenium.WebDriver
import com.kms.katalon.core.webui.driver.DriverFactory
import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI
//Open browser
WebUI.openBrowser(’’)
//Navigate to your page
WebUI.navigateToUrl(‘https://demo.guru99.com/test/delete_customer.php’)
//Get running Driver
WebDriver myDriver = DriverFactory.getWebDriver()
//Trigger alert
WebUI.setText(findTestObject(“Object Repository/New Test Object”), “aaaa”)
WebUI.click(findTestObject(‘Object Repository/Page_Delete Customer/input_Customer ID_submit’))
//Accept alert
myDriver.switchTo().alert().accept();
Reference:
Thank you, it works for me
I came up with this, it works fine but at the end Test case fails with no Alert Found message. What is wrong here @kazurayam @Russ_Thomas @loc.nguyen @Dave_Evers @Matthew_Loo
public static boolean verifyAlertPresent(TestObject to) {
WebUI.delay(3)
KeywordUtil.logInfo("Inside While")
while(!WebUI.verifyAlertPresent(3)) {
KeywordUtil.logInfo("Alert Not Present")
KeywordUtil.logInfo("Clicking Element")
WebUI.enhancedClick(to)
WebUI.delay(3)
}
}
You’re relaying on WebUI.verifyAlertPresent(3) to return a Boolean, which it does when the alert is there, but when it isn’t, it raises an exception. This seems to be the nature of most the WebUI functions that are suppose to return a Boolean.
It would have been nice if it just return a Boolean and let you decide how you want to handle it, but it doesn’t.
I have heard that if you put in the FailureHandling parameter onto the statement:
while (!WebUI.verifyAlertPresent(3, FailureHandling.OPTIONAL))
or FailureHandling.CONTINUE_ON_FAILURE
that it should return the boolean instead of faulting.
And maybe
Also, just a note that you do not return a boolean with your method, although you have indicated you want to. You need to indicate the boolean with a return statement. Currently, it should be
public static void verifyAlertPresent(TestObject to)
or
public static verifyAlertPresent(TestObject to)
Also, how do you prevent an infinite loop with your while statement. Perhaps you should just have it as an if statement or add some reference for how many times you want it to search for your Alert before it gives up.
OMG, this issue is so annoying, guys. I got the same trying to refresh the page and need to accept the alert for not saving changes. I could not work around with delete button pressing.
I can try different steps to avoid this alert but again, this alert thing pisses me off