QAF has configuration manager that loads configuration provided using xml or properties file. It expects application.properties available under resources directory under project root. If application.properties not provided under default location, you can specify location using system property named application.properties.file. You can provide properties used by the framework or your test code.

To load other resource, env.resource prope

System properties

Any property with system prefix will be added into system properties. For example:

system.webdriver.gecko.driver=/drivers/geckodriver

this will set system property webdriver.gecko.driver.

Parameter Interpolation

Parameters (like ${token}) in property value(s) are automatically resolved when you retrieve property. Here is an example (properties file in this example, but xml configuration file work the same way)

env.name=sit
env.resources=resources/common;resources/${env.name}

The general syntax of a parameter is ${prefix:name}. The prefix tells Configuration manager that the parameter is to be evaluated in a certain context. The context is the current configuration instance if the prefix is missing. The following other prefix names are supported by default:

Prefix Description
rnd generates random based on provided format. Format uses a for alphabet and 9 for digit in resulting value
expr evaluates expression

Parameter Examples with prefix:

${rnd:aaa-aaa-aaa}
${rnd:99999}
${expr:java.time.Instant.now()}
${expr:java.lang.System.currentTimeMillis()}
${expr:java.util.UUID.randomUUID()}
${expr:com.qmetry.qaf.automation.util.DateUtil.getDate(0, 'MM/dd/yyyy')}

When you retrieve property with parameter, If a parameter cannot be resolved, e.g. because the property with name not available or an unknown prefix is used, it won’t be replaced, but is returned as is including the dollar sign and the curly braces.

parameter within parameter

In case you want to place parameter inside parameter you can use <% %>. For example:

a=c
a.b=${a}b 
c.b=cb
z.b=zb
target=${<%a%>.b} #in this case where a=c it should be ${c.b} results in cb

start.date=${expr:com.qmetry.qaf.automation.util.DateUtil.getDate(1, 'MM/dd/yyyy')} #tomorrow in MM/dd/yyyy format
start.date=${expr:com.qmetry.qaf.automation.util.DateUtil.getDate(<%rnd:9%>, 'MM/dd/yyyy')} #random date from 10 days from today in MM/dd/yyyy format

Accessing properties

In Java

To access any properties in code you can use getBundle() method of ConfigurationManager.

import static com.qmetry.qaf.automation.core.ConfigurationManager.getBundle();

...

String myString = getBundle().getString("my.stringprop");
int myInt = getBundle().getInt("my.intprop");

In BDD

To access any properties in BDD file, you can provide parameter in step call or meta-data. For example:

Given user login with '${admin.user.name}' and '${admin.user.pwd}'