Katalon Analytics (beta) – Bringing new insights into test reports. Learn more!

Using variables in Test Objects

Is it possible to use a variable or test data within a Test Object?

For instance, I want to create an event in our events management system that pulls the title "Event 1" from test data (or a variable). Then, in second test case, I want to find the Event to edit it by locating and clicking the link element on that page whose label matches that same variable/test data.

Thanks in advance!

Comments

  • This case is quite complicated, and you can use groovy scripts to make this happen.

    Assign variable's value to the test object , which is link element in your example. This test object should have one unique property such as "text()" to demonstrate event's label

    After an event is created, change "text()" property's value to be new value and use it in your test step.

    Example:

    import static com.kms.katalon.core.checkpoint.CheckpointFactory.findCheckpoint
    import static com.kms.katalon.core.testcase.TestCaseFactory.findTestCase
    import static com.kms.katalon.core.testdata.TestDataFactory.findTestData
    import static com.kms.katalon.core.testobject.ObjectRepository.findTestObject
    import com.kms.katalon.core.checkpoint.Checkpoint as Checkpoint
    import com.kms.katalon.core.checkpoint.CheckpointFactory as CheckpointFactory
    import com.kms.katalon.core.mobile.keyword.MobileBuiltInKeywords as MobileBuiltInKeywords
    import com.kms.katalon.core.model.FailureHandling as FailureHandling
    import com.kms.katalon.core.testcase.TestCase as TestCase
    import com.kms.katalon.core.testcase.TestCaseFactory as TestCaseFactory
    import com.kms.katalon.core.testdata.TestData as TestData
    import com.kms.katalon.core.testdata.TestDataFactory as TestDataFactory
    import com.kms.katalon.core.testobject.ObjectRepository as ObjectRepository
    import com.kms.katalon.core.testobject.TestObject as TestObject
    import com.kms.katalon.core.webservice.keyword.WSBuiltInKeywords as WSBuiltInKeywords
    import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUiBuiltInKeywords
    import internal.GlobalVariable as GlobalVariable
    import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI
    import com.kms.katalon.core.mobile.keyword.MobileBuiltInKeywords as Mobile
    import com.kms.katalon.core.webservice.keyword.WSBuiltInKeywords as WS


    // Create test object's variable
    lnk_EditEvent = findTestObject('Page_EventManagement/btn_SearchEvent')

    // Change test object's property and set its active to use this property for finding object
    lnk_EditEvent.findProperty('text()').setValue(createdEventName)
    lnk_EditEvent.findProperty('text()').setActive(true)

    // Click on the changed link element
    WebUI.click(lnk_EditEvent)
  • There's no way to simply reference a variable as a property on the Test Object so I can "find object by"?

    For example:

    text=[variable]
  • Hi Dean

    I'm also interested to find out if there is a simple way to reference a variable. Did you ever find a way?

    Thanks
  • It is a good question, as we also would be interested in knowing how to solve it. In our case we have unique transactions that need to be verified, to be more precise their content is to be verified.

    Create a new transaction
    Store the transaction 'Date/Time' as a variable
    Open the list of transactions
    Find the last transaction by using the unique 'Date/Time' variable stored earlier
    Open the exact transaction
    Verify the content

    Please help us implement this scenario!

    Thanks!
  • Suppose below is your xpath for specific row in the table

    html/body/div[1]/section[2]/div[1]/section/aside/div[2]/aside/aside[2]/div[2]/div/div/div[1]/table/tbody/tr[1]/td[3]/a

    in this case you want to change the row dynamically i.e. tr[1] to be changed to tr[2], tr[3] ...and so on

    You can declare int i=1 and use the same if want to increase/ decrease its value

    xpath for the same will change

    html/body/div[1]/section[2]/div[1]/section/aside/div[2]/aside/aside[2]/div[2]/div/div/div[1]/table/tbody/tr["+i+"]/td[3]/a

  • @Dean Hicks said:
    Is it possible to use a variable or test data within a Test Object?

    For instance, I want to create an event in our events management system that pulls the title "Event 1" from test data (or a variable). Then, in second test case, I want to find the Event to edit it by locating and clicking the link element on that page whose label matches that same variable/test data.

    Thanks in advance!

    You can use object property wherein your "title" contains value "Event 1"

  • @Dean Hicks said:
    Is it possible to use a variable or test data within a Test Object?

    For instance, I want to create an event in our events management system that pulls the title "Event 1" from test data (or a variable). Then, in second test case, I want to find the Event to edit it by locating and clicking the link element on that page whose label matches that same variable/test data.

    Thanks in advance!

    I am still new to Katalon, but from what I have seen this would not be possible, once a test is completed and a second test is run it would have to have fresh values or pre-stored variables. I do not know of a way to edit test data from running a test...

    With that being said if you mean in a single test case to grab it and then use it for a dynamic value. yes you could do that.

    I would do something like this:
    eventOne = WebUI.getText(findTestObject('objectEvent'))

    linkElement = WebUI.modifyObjectProperty(findTestObject('objectLink'), 'xpath', 'equals', '//*[@type=\"button\"][@text()="' + eventOne + '"]', false)

    WebUI.click(linkElement)

    obviously you would want to modify the property modification based upon what you need. What this will do is create a new variable, based upon an object you predefined and add in the data pulled from event.

    notice I have a " with a follow ' this is closing off the first part and adding in the value from eventOne then follows with "] to close it off.

    Is that what you where looking for?

Sign In or Register to comment.