qaf icon indicating copy to clipboard operation
qaf copied to clipboard

QAF Report should display description for locator instead of locator key

Open amitbhoraniya opened this issue 9 years ago • 2 comments

For locator arguments in BDD scenario currently it display locator key in report, it should display locator description for more readability. Currently its like

click on 'btn.search.loc'

If user has provided description for this key then it should be like

click on 'Search Button'

amitbhoraniya avatar Jan 04 '17 05:01 amitbhoraniya

Hi, In qmetry report it is showing locator key instead of descriptions of the locator. I am using BDD2 and CommonStep.sendkeys("","")

Could you please let me know if there is any workaround of this?

nikhilpuniyani27 avatar Jan 06 '20 14:01 nikhilpuniyani27

Hi Nikhil,

Below code snippet is a quick workaround for it.

  1. Create a TestStepListener
package com.infostretch.steps;

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

import java.util.Map;

import com.google.gson.Gson;
import com.qmetry.qaf.automation.step.QAFTestStepAdapter;
import com.qmetry.qaf.automation.step.StepExecutionTracker;
import com.qmetry.qaf.automation.step.TestStep;
import com.qmetry.qaf.automation.step.client.text.BDDDefinitionHelper.ParamType;
import com.qmetry.qaf.automation.util.StringUtil;

public class StepListener extends QAFTestStepAdapter {

	@Override
	public void afterExecute(StepExecutionTracker stepExecutionTracker) {
		stepExecutionTracker.getStep().setDescription(processArgs(stepExecutionTracker.getStep()));
	}

	private String processArgs(TestStep step) {
		Object[] actualArgs = step.getActualArgs();
		String description = step.getDescription();
		if (null == actualArgs || actualArgs.length <= 0)
			return description;
		for (int i = 0; i < actualArgs.length; i++) {
			if ((actualArgs[i] instanceof String)) {
				description = StringUtil.replace(description, String.valueOf(actualArgs[i]),
						getParam((String) actualArgs[i]), 1);
			}
		}
		return description;
	}

	private String getParam(String text) {
		String result = getBundle().getSubstitutor().replace(text);
		String value = String.valueOf(getBundle().getObject(result));
		ParamType ptype = ParamType.getType(value);
		if (ptype.equals(ParamType.MAP)) {
			Map<String, Object> kv = new Gson().fromJson(value, Map.class);
			if (kv.containsKey("desc")) {
				value = String.valueOf(kv.get("desc"));
			} else if (kv.containsKey("description")) {
				value = String.valueOf(kv.get("description"));
			}
			return value;
		}
		return result;
	}

}
  1. Register TestStepListener using below property.
qaf.listeners=com.infostretch.steps.StepListener

amitbhoraniya avatar Jan 07 '20 09:01 amitbhoraniya