Dean Hicks
Katalon Apprentice
11/11/2016

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!

Upvote
Quote

Comments

  • Vinh Nguyen
    Katalon Expert
    11/14/2016
    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)
    Upvote
    Quote
  • Dean Hicks
    Katalon Apprentice
    11/15/2016
    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]
    Upvote
    Quote
  • Roxanne Frankland
    Katalon Apprentice
    05/16/2017
    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
    Upvote
    Quote
  • Alex Brohin
    Katalon Apprentice
    05/26/2017
    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!
    Upvote
    Quote
  • Sandip Toradmal
    Katalon Apprentice
    09/07/2017

    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

    Upvote
    Quote
  • Sandip Toradmal
    Katalon Apprentice
    09/07/2017

    @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"

    Upvote
    Quote
  • B L
    Katalon Apprentice
    10/24/2017

    @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?

    Upvote
    Quote
  • Shamji Jinjala
    Katalon Apprentice
    03/06/2018
    Hi,
    Can any one please provide me the piece of code for the below scenario.
    - There are multiple Roles available e.g. Admin, Manger, Engineer etc, I want to identify this roles as soon as user gets logged in and based on Rights module appears for the respective logged in user. Now I want to check all the modules available and clickable after logged in with any user based on the role.
    e.g. Admin User ( can access Sys Admin and Sys admin contains module A,B and C) and Rest of the Modules like Setup, Configuration etc.
    Engineer User (Can't see the Sys Admin Module, hence will not be able to click or open this) and Rest of the modules like Setup, Configuration etc. available

    Manager User (Can't access the Sys Admin and Setup Module, hence will not be able to click or open this) and Rest of the modules like Report, Configuration etc available.

    Can any one please help me with the piece of code for the same. I am struggling with this have tried many things but still not got the proper solution. JFI I have created the Keyword for this and making user login and then trying to fetch and save the Role in variable so that I can use it for the module role access..


    Upvote
    Quote
Sign In or Register to comment.