Search code examples
javaseleniumselenium-webdrivercucumberbdd

Call same step with different type of argument in BDD


I'm writing testcases using BDD. I have a scenario where I'm stuck

I'm generating random data using below step

When generate random data for registration form

There is Bean class which have some fields like fname, lname, email, pass while i call above step it generates random data and filled in that bean class

Now it returns that bean class object and I'm storing that in formdata variable

And store into 'formdata'

Now i want to send that to my username field like below

And enter firstname as '${formdata}'

code step for same :

@QAFTestStep(stepName = "enterFirstName", description = "enter firstname as {0}")
public void enterFirstName(Map<String, Object> data) {
    sendKeys(data.get("firstname").toString(), element);
}

Its working fine but suppose in some case i have to send only string as below

And enter firstname as 'Narendra'

Step would be :

@QAFTestStep(stepName = "enterFirstName", description = "enter firstname as {0}")
public void enterFirstName(String fname) {

    sendKeys(fname, element);

}

Then how do i manage these 2 code as single method ?


Solution

  • I tried below solution which helped me to do the same as i expecting:

    @QAFTestStep(stepName = "enterFirstName", description = "enter firstname as {0}")
    public void enterFirstName(Object obj) {
    
        if (obj instanceof LinkedTreeMap) {
            Map<String, Object> map = (Map<String, Object>) obj;
            sendKeys(map.get("firstname").toString(), "regpage.firstname.textbox");
    
        } else if (obj instanceof String) {
            sendKeys(obj.toString(), "regpage.firstname.textbox");
        } else if (obj instanceof RandomRegisterDataGenerator) {
            RandomRegisterDataGenerator data = (RandomRegisterDataGenerator) obj;
            sendKeys(data.getFirstname(), "regpage.firstname.textbox");
        }
    
    }