*Summary
It is not possible to authenticate a url which contains a port number (which happens often when running on localhost)
*Steps to reproduce
Try running this piece of code:
WebUI.authenticate("http://localhost:3000", "username", "password")
This fails, because the AuthenticateKeyword.getAuthenticatedUrl
functions transforms this url into: http://username:password@localhost
instead of http://username:password@localhost:3000
and therefore fails to navigate to the page and authenticate.
*Expected Results
Navigating to the page and authenticate it with the given credentials
This should fix the issue:
private String getAuthenticatedUrl(URL url, String userName, String password) {
StringBuilder getAuthenticatedUrl = new StringBuilder()
getAuthenticatedUrl.append(url.getProtocol())
getAuthenticatedUrl.append("://")
getAuthenticatedUrl.append(userName)
getAuthenticatedUrl.append(":")
getAuthenticatedUrl.append(password)
getAuthenticatedUrl.append("@")
getAuthenticatedUrl.append(url.getHost())
getAuthenticatedUrl.append(url.getPort())
getAuthenticatedUrl.append(url.getPath())
return getAuthenticatedUrl.toString()
}
*Actual Results
Throwing an error.
*Screenshots / Videos
(please attach screenshots or videos if necessary to reproduce the issue)
*Blocker?
Yes
Number of affected users?
5
*Operating System
Windows 11
*Katalon Studio version
version 9.7.4
Environment (for Web Testing)
Chrome 133
1 Like
Hi @peridos-team,
Welcome to our community. Thank you for letting us know this. I will check with my team and back to you soon the update on this.
You may try basic authentication URL string.
Instead of:
WebUI.authenticate("http://localhost:3000", "username", "password")
you could try:
String basicAuthUrl = "http://" +"<username>"+":"+"<password>"+"@localhost:3000"
`WebUI.navigateToUrl(basicAuthUrl)`
Hope it helps!
1 Like
@peridos-team
I tried to reproduce your problem. I made a Test Case:
/**
*
*/
String getAuthenticatedUrl(URL url, String userName, String password) {
StringBuilder getAuthenticatedUrl = new StringBuilder()
getAuthenticatedUrl.append(url.getProtocol())
getAuthenticatedUrl.append("://")
getAuthenticatedUrl.append(userName)
getAuthenticatedUrl.append(":")
getAuthenticatedUrl.append(password)
getAuthenticatedUrl.append("@")
println "url.getHost()=\'${url.getHost()}\'"
println "url.getPort()=\'${url.getPort()}\'"
println "url.getPath()=\'${url.getPath()}\'"
getAuthenticatedUrl.append(url.getHost())
getAuthenticatedUrl.append(":")
getAuthenticatedUrl.append(url.getPort())
getAuthenticatedUrl.append(url.getPath())
return getAuthenticatedUrl.toString()
}
URL url = new URL("http://localhost:3000")
String newUrl = getAuthenticatedUrl(url, "username", "password")
println newUrl
assert newUrl == "http://username:password@localhost:3000"
When I ran this, I got the output:
2月 18, 2025 7:00:51 午前 com.kms.katalon.core.logging.KeywordLogger startTest
情報: --------------------
2月 18, 2025 7:00:51 午前 com.kms.katalon.core.logging.KeywordLogger startTest
情報: START Test Cases/peridos-team
url.getHost()='localhost'
url.getPort()='3000'
url.getPath()=''
http://username:password@localhost3000
2月 18, 2025 7:00:52 午前 com.kms.katalon.core.logging.KeywordLogger log
重大: ❌ Test Cases/peridos-team FAILED.
Reason:
Assertion failed:
assert newUrl == "http://username:password@localhost:3000"
| |
| false
'http://username:password@localhost3000'
at peridos-team.run(peridos-team:24)
at com.kms.katalon.core.main.ScriptEngine.run(ScriptEngine.java:194)
at com.kms.katalon.core.main.ScriptEngine.runScriptAsRawText(ScriptEngine.java:119)
at com.kms.katalon.core.main.TestCaseExecutor.runScript(TestCaseExecutor.java:448)
at com.kms.katalon.core.main.TestCaseExecutor.doExecute(TestCaseExecutor.java:439)
at com.kms.katalon.core.main.TestCaseExecutor.processExecutionPhase(TestCaseExecutor.java:418)
at com.kms.katalon.core.main.TestCaseExecutor.accessMainPhase(TestCaseExecutor.java:410)
at com.kms.katalon.core.main.TestCaseExecutor.execute(TestCaseExecutor.java:285)
at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:137)
at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:125)
at TempTestCase1739829645836.run(TempTestCase1739829645836.groovy:25)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2月 18, 2025 7:00:52 午前 com.kms.katalon.core.logging.KeywordLogger log
重大: ❌ Test Cases/peridos-team FAILED.
Reason:
Assertion failed:
assert newUrl == "http://username:password@localhost:3000"
| |
| false
'http://username:password@localhost3000'
at peridos-team.run(peridos-team:24)
at com.kms.katalon.core.main.ScriptEngine.run(ScriptEngine.java:194)
at com.kms.katalon.core.main.ScriptEngine.runScriptAsRawText(ScriptEngine.java:119)
at com.kms.katalon.core.main.TestCaseExecutor.runScript(TestCaseExecutor.java:448)
at com.kms.katalon.core.main.TestCaseExecutor.doExecute(TestCaseExecutor.java:439)
at com.kms.katalon.core.main.TestCaseExecutor.processExecutionPhase(TestCaseExecutor.java:418)
at com.kms.katalon.core.main.TestCaseExecutor.accessMainPhase(TestCaseExecutor.java:410)
at com.kms.katalon.core.main.TestCaseExecutor.execute(TestCaseExecutor.java:285)
at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:137)
at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:125)
at TempTestCase1739829645836.run(TempTestCase1739829645836.groovy:25)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2月 18, 2025 7:00:52 午前 com.kms.katalon.core.logging.KeywordLogger endTest
情報: END Test Cases/peridos-team
The code has an obvious mistake.
You should rather write:
getAuthenticatedUrl.append(url.getHost())
getAuthenticatedUrl.append(":") // INSERT THIS!
getAuthenticatedUrl.append(url.getPort())
Hi @peridos-team,
WebUI.authenticate()
really does not work with localhost:port
, our team will review this for improvement in the future.
For now, I would like to suggest the sample here:
import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI
WebUI.openBrowser('')
// Instead of using WebUI.authenticate("http://localhost:5000", 'admin', 'password123', 12)
WebUI.navigateToUrl('http://admin:password123@localhost:5000')
WebUI.closeBrowser()
Hope this can help
I examined this.
I wrote a Test Case.
import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI
WebUI.authenticate("http://localhost:5000", 'admin', 'password123', 12)
When I ran this, the test case failed. I got the following output in the Console tab.
2月 22, 2025 6:36:24 午前 com.kms.katalon.core.logging.KeywordLogger logFailed
重大: ❌ Unable to navigate to authenticated page (Root cause: com.kms.katalon.core.exception.StepFailedException: Unable to navigate to authenticated page
at com.kms.katalon.core.webui.keyword.internal.WebUIKeywordMain.stepFailed(WebUIKeywordMain.groovy:117)
at com.kms.katalon.core.webui.keyword.internal.WebUIKeywordMain.runKeyword(WebUIKeywordMain.groovy:43)
at com.kms.katalon.core.webui.keyword.builtin.AuthenticateKeyword.authenticate(AuthenticateKeyword.groovy:51)
at com.kms.katalon.core.webui.keyword.builtin.AuthenticateKeyword.execute(AuthenticateKeyword.groovy:44)
at com.kms.katalon.core.keyword.internal.KeywordExecutor.executeKeywordForPlatform(KeywordExecutor.groovy:74)
at com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords.authenticate(WebUiBuiltInKeywords.groovy:2793)
at TC1.run(TC1:20)
...
In the Console tab, I pointed the portion of AuthenticateKeyword.groovy:51
in the stacktrace message, and I clicked it with the mouse pointer; then Katalon Studio opened the source code of com.kms.katalon.core.webui.keyword.builtin.AuthenticateKeyword
.
In there I found the the implementation of the getAuthenticatedUrl
method:
private String getAuthenticatedUrl(URL url, String userName, String password) {
StringBuilder getAuthenticatedUrl = new StringBuilder()
getAuthenticatedUrl.append(url.getProtocol())
getAuthenticatedUrl.append("://")
getAuthenticatedUrl.append(userName)
getAuthenticatedUrl.append(":")
getAuthenticatedUrl.append(password)
getAuthenticatedUrl.append("@")
getAuthenticatedUrl.append(url.getHost())
// OBVIOUS MISTAKE HERE
getAuthenticatedUrl.append(url.getPath())
return getAuthenticatedUrl.toString()
}
The getAuthenticatedUrl
has an obvious mistake: the port number is missing. Therefore the WebUI.authenticate()
keyword wont work.
1 Like