utkarshs utkarshs - 2 months ago 13
Ruby Question

Using Page Objects vs Config Files in Selenium

I've been using Ruby Selenium-Webdriver for one of the automation scripts I'm developing and I'm being asked to use Page Objects, we use page objects a lot however for this application I am using CSV file instead, I have defined all the xpaths that I'm using in my application in a CSV file and I'm parsing that CSV file in my script to refer to those objects, I would like to know is there much of a difference in using a class for defining Page Objects or using a CSV file instead apart from performance concern? I believe using a CSV file will be an addon for us from configuration standpoint and will make it much easier to maintain, any suggestions on this?

Edit - In our use case, we're actually automating applications built on a cloud based tool, so basically all the applications share same design structure from HTML standpoint so we define xpath patterns in CSV and then we pass certain parameters to some custom methods that we've developed to generate xpath's automatically using the CSV instead of finding those manually as its overhead for us because we already know that all the applications will share similar xpath pattern for all elements.

Thanks

Answer

It completely depends on the application and the type of test you might perform.

Since it is an automated test script, you do not have to really worry about the performance of the script (it might take few more milli seconds to parse, which should be OK).

Maintaining all the elements identification properties & corresponding actions in a CSV file will make the maintenance easier and make the framework application independent which are nice. But maintaining your framework is bit difficult to make it more robust. Both approaches have its own pros and cons.

Refer to below posts [examples are in java - but you will get the idea]:

  1. Keyword driven framework
  2. Advanced Page Objects

Update:

If you like both, you can comeup with your implementation to easily integrate these too.

@ObjectRepository(src="/login.csv")
public class LoginPage{

    private Map<String, WebElement> elements; 

    public void login(){
        elements.get("username").sendKeys('');
        elements.get("password").sendKeys('');
        elements.get("signin").click();
    }
}

Ie, define all the elements in a config file like csv/json etc. Let the page object refer to the class for the page elements. All the methods will be part of the page class.