Unable to save a text string into a variable array

I’m trying to loop through a bunch of URL’s and then save the discussion title and discussion body to a variable.

If I use this, it works fine:

GlobalVariable.firstPostTitle = WebUI.getText(findTestObject('Page_bbc_discussions_page/h1_discussion_title'))

However, if I try to save it as an array like below, I get an error.

GlobalVariable.firstPostTitle[r] = WebUI.getText(findTestObject('Page_bbc_discussions_page/h1_discussion_title'))

Here’s my code:

int r = 0

for (def url : list) {

if (url.contains('discussions/building-better-courses')) {

    WebUI.navigateToUrl(url)

    WebUI.waitForPageLoad(30)

r++

    WebUI.delay(5)

GlobalVariable.firstPostTitle[r] = WebUI.getText(findTestObject(‘Page_bbc_discussions_page/h1_discussion_title’))

GlobalVariable.firstPostBody[r] = WebUI.getText(findTestObject(‘Page_bbc_discussions_page/div_discussion_body’))

}

}

Error:

Test Cases/Get All Links Test 101818 FAILED because (of) (Stack trace: groovy.lang.MissingMethodException: No signature of method: java.lang.String.putAt() is applicable for argument types: (java.lang.Integer, java.lang.String) values: [1, Announcing Articulate 360]

Possible solutions: putAt(java.lang.String, java.lang.Object), getAt(int), getAt(int), getAt(java.lang.String), getAt(groovy.lang.Range), getAt(groovy.lang.Range)

at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:58)

at org.codehaus.groovy.runtime.callsite.PojoMetaClassSite.call(PojoMetaClassSite.java:49)

at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)

at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)

at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)

at Script1539873854414.run(Script1539873854414.groovy:48)

at com.kms.katalon.core.main.ScriptEngine.run(ScriptEngine.java:183)

at com.kms.katalon.core.main.ScriptEngine.runScriptAsRawText(ScriptEngine.java:108)

at com.kms.katalon.core.main.TestCaseExecutor.runScript(TestCaseExecutor.java:294)

at com.kms.katalon.core.main.TestCaseExecutor.doExecute(TestCaseExecutor.java:285)

at com.kms.katalon.core.main.TestCaseExecutor.processExecutionPhase(TestCaseExecutor.java:264)

at com.kms.katalon.core.main.TestCaseExecutor.accessMainPhase(TestCaseExecutor.java:256)

at com.kms.katalon.core.main.TestCaseExecutor.execute(TestCaseExecutor.java:200)

at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:99)

at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:90)

at com.kms.katalon.core.main.TestCaseMain$runTestCase$0.call(Unknown Source)

at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)

at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)

at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:149)

at TempTestCase1539880368706.run(TempTestCase1539880368706.groovy:22)

at groovy.lang.GroovyShell.runScriptOrMainOrTestOrRunnable(GroovyShell.java:263)

at groovy.lang.GroovyShell.run(GroovyShell.java:518)

at groovy.lang.GroovyShell.run(GroovyShell.java:507)

at groovy.ui.GroovyMain.processOnce(GroovyMain.java:653)

at groovy.ui.GroovyMain.run(GroovyMain.java:384)

at groovy.ui.GroovyMain.process(GroovyMain.java:370)

at groovy.ui.GroovyMain.processArgs(GroovyMain.java:129)

at groovy.ui.GroovyMain.main(GroovyMain.java:109)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at org.codehaus.groovy.tools.GroovyStarter.rootLoader(GroovyStarter.java:109)

at org.codehaus.groovy.tools.GroovyStarter.main(GroovyStarter.java:131)

)

hi, how is defined GlobalVariable.firstPostTitle? as an String?

Brian,

First, you should define GlobalVariable.Posts as List.

Second, you need to cast GlobalVariable.Posts to java.util.List explicitly before calling its add(x) method.

for (def url : list) {    ...    List posts = (List)GlobalVariable.Posts
    String titleStr = WebUI.getText(findTestObject('Page_bbc_discussions_page/h1_discussion_title'))
    String bodyStr  = WebUI.getText( ... )    Map post = ['title':titleStr, 'body':bodyStr]    posts.add(post)}
1 Like