269: Automation Using Selenide with Hima Bindu Peteti
8 Dec 2025 · 30 min
Hima Bindu Peteti explains why her teams switched from HP UFT to Selenide, a Selenium wrapper that cuts boilerplate code and improves test stability. She covers setup, page-object patterns, configuration options, and why Selenide works well for Angular and React but only runs on Java.
Questions this episode answers
269
September 8, 2019
5.2.3
Chapters
Five, four, three, two, one.
Drop that.
Welcome to the Test Guild Automation Podcast. We're all getting together to learn more about software testing and automation with your host, Joe Calantonio.
Hey, it's Joe. And welcome to another episode of the Test Guild Automation Podcast. Today, him and Benji Patetti shares her experience with Selenite. Selenite is an open source library that makes a huge impact in accelerating your automation software delivery by introducing a concise API, shorter expressions and many other capabilities. So listen up and discover key features of Selenoid that you can use to make your automation and code simpler, easy to read and more maintainable. You don't want to miss this episode. Check it out. And I just want to let you know that the audio quality of this interview is not to the standards that I would like, but the content is really awesome. So just wanted to apologize up front for that. Long story is that I'm building a new house in Tennessee with a dedicated studio and I've been doing this for almost a year. The house is still not done and the house we were leasing while we were building, the lease was up. So now we're going between Airbnbs. I don't have all my equipment, all my studio equipment is not available, so the quality is a little off. I'm hoping in a few more weeks the house will finally be done and my studio will be up and running. So until then, the audio quality of the interviews might be a little bit off and I apologize for that up front. But like I said, the content is still awesome. So just wanted to let you know. The Test Guild Automation Podcast is sponsored by the fantastic folks at Sauce Labs. Their cloud based test platform helps ensure your favorite mobile apps and websites work flawlessly on every browser, operating system and device. Get a free trial trial. Visit test skill.comsourcelabs and click on the exclusive sponsor section to try it for free for 14 days. Check it out.
Hey Bindu, welcome to the show.
Hey Joe, thank you so much.
It's great to have you on the show. I actually caught one of your sessions at saucecon this year and I believe it was your first time talking. I was really impressed. I love the topic. It was on BDD and Selenide and I thought that would make a great episode. So that's what we're going to talk about for today. But before we get into it, can you just tell us a little bit more about yourself?
Explain me a little bit about me. I am Hima Bindu Pateti and I have almost 14 to 15 years of experience in software development. So I was a developer and also a test automation engineer. I have experience in building test automation frameworks and currently I'm working as a customer kind of an advocate role in test automation coaching. So many different portfolios in our organization and.
In all best practices when it comes to test automation strategies. And also what are the latest technology that is available in the market and rolling out the project teams if it is.
A right tool, building some new tools if it is needed for the organization. So that is where I am right now.
So Bindu, I love your background. One thing I really liked about the session also was you gave some business reasons why you chose your solution before you actually jumped into the tech of it. So I was curious to know why did you choose the tech stack you're using now at your company.
So when it comes to any kind of new things in technology, what I observed is people start using it and completely forgets about the final goal that they have to reach. And I've seen couple of problems in different areas in a similar fashion. So in my view adopting new technology is not important thing. The first important thing is reaching out the correct goal that we are looking for. And so when we were working with Selenium and other test automation frameworks, we were happy with the goals, but we have to add lot of.
Libraries, a lot of utilities, we have to create a lot of utilities. For example, let me give you a scenario. So I have been there in the company where people started using the HP QTP tool. So I worked very hard in migrating all those scripts to Selenium Test automation. And we call that as Greenfield automation because we can do CICD and we can do nightly regressions and it's not heavily rely on any particular machine. So we made a lot of these kinds of improvements and over the period of time we observed that even we are using Selenium. But there is a lot of code, redundant boilerplate code that we are ending up doing this because Selenium is not designed for text automation. The main purpose the Selenium is designed for doing lot of browser activities and we are indirectly using it for text automation. And in the process of doing that we are ending up writing lot of boilerplate code. For example, in one of the projects that I'm working in, they have in the portfolio they have like 10 different projects and each project has a couple of different scrum teams. And for example, if they have to make a condition that create a screenshot if something fails, if they have to write that utility, each each project has to do the same thing. And if we scale this problem up in the complete organization, so many people are ending up writing these many utilities just for the sake of automation. So as a team we thought maybe we should create some additional utilities on top of what we are writing Java code and the people should focus only on the business logic versus writing this redundant boilerplate code. So our team created a set of utilities which will take care of these kinds of things. And as part of my research I was going through other libraries and my manager suggested maybe there is a good library in the market. So he suggested me to take a look into Selenite. And after looking into Selenite I really fell in love with automation code because.
The capabilities that Selenite is giving is exactly what I have been thinking on top of my head, what I have created some of the utilities that can be useful for the whole company. Selenite is giving everything. So I thought maybe this is the better library and this will help lot of things. So I started looking more into it and after knowing all the benefits, we started rolling out to different teams there. So we can, with Selenide you can concentrate only on the business logic. You don't need to write lot of redundant boilerplate code. And we ended up writing concise code and our reliability in the script has increased as well.
You know, you're a developer, you have 12 years experience. To you it probably was not an issue. But I love how you thought about your team and other people on your team scrum teams having to write tests and choosing the right solution. So now you mentioned, and I think you're definitely correct, Selenium is just an API and you have to write all the boilerplate code. So Selenoid, was it just a library you import into Java and then it gives you. Is it like a BDD type syntax? Like how do you get a business like syntax that anyone is able to then create tests for?
Yeah, Selenoid, it's very easy. It has bunch of different libraries that comes with Selenide. So it's dependency. So even if it is a maven gradle or any kind of build tool that you are using, it supports the dependency. Once you add the dependency to your project, you can start using the Selenide right away. So the syntax looks pretty much similar, like the BDD style. For example, the BDD says given when you do this, when this particular condition occurs, then what is the expected outcome? Right? Selenite test also it looks completely similar like that. So you can write a precondition and then the actions are like for example, open this particular browser, when.
You navigate to this particular portion, then make sure that this particular element is present on the screen. So Selenide internally it has this hand crest matchers. So there are a couple of situations like where you have to say this should be available on this particular page and they should not be there. So instead of writing junit asserts again over there you can start writing, you can find that element and next to that element you can put a period and then there are bunch of.
Methods that are available saying should have, should not have, should be there, should not be there. These are inbuilt methods that are available in Selenite. So that makes your code look most like a business code which fits very good into bdd.
Cool. So Bindu, what I thought was interesting though is QTP UFT has what I thought is a user friendly type syntax and you actually went from that to Selenium and then Selenium used Selenite. So I guess I forgot to ask the question. Why did you move from HP UFT to Selenium? How would you compare the two?
So that's a very good question and there are a bunch of reasons for that. So first of all.
It'S not a greenfield automation. When we are doing it with qtp, what that means is it relies on HP or some other tools heavily. We wanted to move out to open source tools so we have to pay a lot of money to the hp. And also the text of flaky.
It looks into the object properties.
So when you start a UI and if the element is currently not there, the script will fail. So in Selenium you have to find your own object locator and there are different ways to find the locators and integrating it to continuous integration tools like CICD and do the daily regression, nightly regression whenever you want. And you can scale up your test execution and you can do parallel execution and you can build lot of things on top of the test automation framework which makes your test execution easy. And also you'll end up writing, you'll have more control on what you are doing. But.
But the challenging thing is.
As you mentioned before, people who are coming from the dev background, maybe they can easily jump in and do it. But people who are coming from the manual testing or background, they have to obviously spend a lot of time in understanding the coding practices and doing it in a better way. But in my experience, switching from code QTP or manual testing to Selenium versus if we have a robust Selenide kind of framework, switching it to the Selenide is much more easier for them because in Selenium, as I said, in order to find whether an element is particular element is present on the web page or not, these people have to understand they have to import a JNIT library and then they have to indirectly create an assertion and then they have to say whether that particular element is there or not in a coding fashion. But if they are doing it in Selenide, as long as they have that subject matter expert in their mind and as long as they know what to test and where to test, Selenide is very easy. So it says okay, whether they simply find that element like how they usually do in identifying elements, and then they can simply write an assertion which is inbuilt on top in the Selenide framework. So switching from QTP to Selenide is much more easier.
So I guess the proof is in the pudding. So you work for a very large company. You said you have multiple Sprint teams. How's it working? Are there actually people that you would not normally associate with being able to write a automated test? Able actually to write automated tests at a business level?
Yeah. So it really depends on the team and it really depends on the skill set, Joe. So.
I observed that in many of the companies, even in our company, there is a wave that is coming in. We are all following agile practice and people are saying there should not be a specific role to your test team or a specific role to your dev team, the person. So we are, we are going into the wave of cross functional role where everyone has to do everything. So we all have subject matter in our, on top of our head. So we all know what to do, what to implement it. And obviously we have to think about texting at the right level and at the right stage. So we have, we provided a lot of trainings to the people who are willing to learn test automation and people who are coming from the manual testing background and many of them are up to speed and then they are slowly picking up very small stories and then they, right now they are doing great. So it's been like a couple of years of journey for our company and most of them are doing great and some of them are surviving. It really depends on the individual person and their capability. But from management perspective we are actually providing a lot of trainings and we are continuously supporting by providing workshop, in, in house workshops and other stuff.
Very nice. One of the main questions I get asked a lot is, hey Joe, how do I get into automation? So it sounds like if someone used Selenite.
This, this might be a good place to start. Like do you have any steps that you would give to someone that's asking how can I get into automation? Like a five step process that could help help them get along in using Solenoid?
Yeah, sure Joe. So people who are willing to use Selenite so it's very easy, first of all they should understand.
The little bit of coding practices like object oriented principles. Everyone has to understand if they have to work on programming languages like Java or any, any C Sharp or any other things. So once they are comfortable with the object oriented programming principles and some of the Java related stuff, there is a lot of documentation that is available on Selenide website itself.
So they can download the source code of Selenide and it is easy to go through those examples and I and I have couple of my slides also available in saucecon and other places so they can go through that documentation and couple of examples on YouTube as well. How to start, get get started with Selenide. So I'll explain them in terms of a project. So if they are using Maven project they have to import Selenide library. Right now the Latest one is 5.2.3. You can go into the Selenite site and check for the upd.
Once the project is imported, run a Maven build or a Gradle build or whatever the build tool is and they just have to say import. They just have to import the open.
Open library from the Selenite. And then if they have, if they have something in their mind about what, what is the website that they want to the application that they want to play around with, they can start writing code by looking into the source code documentation or any other documentation around Selenide.
Awesome. But you also mentioned in your session and just now you mentioned something about they need to know some sort of coding best practices. In your session you mentioned some test automation design patterns that you can do with Selenide. Can you go over a few of those that you think were helpful that everyone should know for effective test automation?
So when it comes to UI text automation. So the main, the main design pattern that we usually think of is page object design pattern. So writing page objects. So what is a page object design pattern first of all? So it's about, for example, if you are dealing with a web application and if there are multiple pages that are involved in the web application and if you're writing end to end user journeys or end to end scenarios for your application, there are very good chances that.
You have to deal with couple of elements every now and then. For example, let's take a Gmail application. If you have to verify what is there in your inbox, you have to log in. And if you have to verify what is there in your draft or some other places again in your user journey, you have to log in. So couple of different places you are getting these login scenario. So.
All these repeated items that you are getting in. If you abstract all these items out and put at a different.
Java class or a different place and.
Retrieve it from that Java place versus creating at different different places in order to eliminate the problem of.
For example, if something changes on the ui, today it might be ID and tomorrow it might be something else username. So if you, if you don't abstract this and put it in a different place and use it from that location, you will end up writing lot of different, lot of.
Changes in different different areas. So that's the main theme of phase objects. So your objects will be at a central location and your test code will read it from a different location. So in Selenium you have to create a page factory where to instantiate all the elements from different pages and retrieve it. But in Selenite it's just there are three different levels of encapsulation that you can do. They call it as a simple to medium to large encapsulation. So I don't think that is all needed. So in my view it's just you put everything at a different place and the login or any other, you call that as a common base page. And in your text code you retrieve that element from the base page. That's it. It's that simple. You don't need to create a driver instance in any very different places. You don't need to create page factory and all these different different things. So it's very simple, very nice.
So does it also give any extra options for running and reporting besides making tests easy to write?
Oh yeah. So by default, if you are using Selenium, if something goes wrong, obviously we need certain evidence, like what went wrong in which location it went wrong and what is the screenshot or any evidence that is available. So if you are starting a new project with Selenium, you have to build all these things into your framework. So someone who has very good design skills or someone who has very good coding skills are definitely needed in order to solve all these problems.
But in Selenide by default, the library takes care of all these things. So there is a. If you are using Selenide if you run a test and if it is not able to, if the locator that you specified is not available by some reason, the screenshot will be automatically captured and it actually writes the screenshot to a different your target folder at some location and what is correct and what is expected and what is actual. The logs and all will also be automatically displayed in your console by the library. And if you have to modify the location of the screenshots that the tool is providing. And it is also very easy. The Selenite has a thing called configuration class called Configuration if you import that configuration class.
At the setup level. So if you have to do it at the test case level or a test suite level, wherever it is in the setup method, you just call the static configuration class with configuration and you put a period over there and then you can find lot of options saying that screenshots, folder logs, folder timeouts. There are so many other things that you can provide in the configuration level.
And another good thing about Selenide is.
All these configuration parameters. You can send it through Jenkins as well or Jenkins or any other CI tool with the D parameter. And then.
If your screenshots are evidences folder, if it has to be different in different environments or different in different projects, you don't need to configure it in the code you can configure as part of your build parameters.
That is a very good benefit that I've seen in Selenite.
I'm looking through my notes, I took notes during this session. I don't know why I have this. Maybe you'll know sets up all Angular based applications and other advanced Java libraries. So does it support, does it have any extra support for applications like React or Angular based applications?
Yes Joe, so in fact Selenite has been recognized as the top five automation libraries. In their post they also clearly mentioned that one of the main advantages of using Selenide is support for Angular libraries.
So if you are using Selenium, so there are a couple of you might have experienced this already. There is a synchronization problem when you are dealing with Angular applications and Selenium. So people started using Protractor which is a JS binding which sits on top of Selenium, but it is much more designed for.
Angular applications. So even in our organization there are some things that already started working on Protractor. But the biggest problem with that is the Protractor only supports JS bindings and they have huge automation project that is already built on Selenium. And just for the sake of.
Angular, it's very hard to switch to maintain two different kinds of.
Libraries like JS bindings and the Java bindings. So we were doing some kind of research around different libraries and then we encountered NG WebDriver, which is developed by Paul Hemant in ThoughtWorks. So we worked on that library as well. But Selenide is.
Everything. It's on top of everything, basically. So it also supports Angular libraries, not only Angular react and also jQuery selectors and all. So how Selenide works is it has additional locators that you can find. So instead of going only with IDxPath or CSS or whatever it is, it has this additional. So you can whatever locator that you are looking for. For example, in the Angular it says NG something, right? So you can provide NG button or NGID whatever ID is there in the parenthesis. And you put a dollar on dollar before that. Then that's how, if you put a dollar, that's how you actually, you are. You're asking Selenite to find an element. If you put a dollar and then you put whatever is the Angular locator, Selenite finds it. And by default, every statement that you are writing, every locator that you are writing in Selenite, it automatically waits for four seconds with explicit conditions. So it waits until that particular element appears on the screen or that particular element is present in the DOM or something like that. So if you are dealing with Selenium, you, if you have to do that same thing, you have to write, you have to import that explicit weight and then you have to write that particular expected conditions with kind of things. So by default it handles all the synchronization. And again, if you have to modify that synchronization today, it is four seconds. And if you know that in a different environment, we need eight seconds or something, again, you can parameterize it at the build level or at one particular place. You don't need to worry about changing the code at different places. That increases stability.
So Pindu, we talked about all the things that Selenite does support. Is there anything that you don't think it supports or you wouldn't recommend if someone was using a certain type of technology?
So that's a very good question, Joe. And so while I was giving this talk and some of the people, some of them asked this question, and so it is only support Java binding. So people who are working with dotnet or any other Python or any other language bindings.
There is no alternative for this. Selena is one thing In Python, I guess. So that's one alternative and that's the only thing. Other than that.
I don't see any problems.
I was just curious why more people don't use this. Because when I saw it, when you see your session, it's like, wow, this is pretty slick. Did you know how popular it is? Is it a good community? Is it?
So I have that question as well, Joe, and I'm completely.
With you on that. So we I came to know about this library, as I said, one of my managers, actually he was the one who suggested me to look into this at that time, it's like three to four years ago and there is nothing of anything about Selenide in the market. I'm not sure why this is not popular, but in my view, based on the experience that I have in different tools, this is one of the excellent tools. But nothing. There was no recognition for this. But lately people start realizing the benefits of it and I have seen the statistics that are provided by Selenide by the people and the download statistics has been.
Going up, growing up lately for this library. I think there is no good documentation about this anywhere. So I think that might be the reason.
Okay Bindu, before we go, is there one piece of actual advice you can give someone to help improve their test automation efforts and let us know the best way to find or contact you.
So.
If you are trying to reach your test automation goal, we always have to focus on the end goals of the business. Our test automation goals should be actually in line with what the business is looking for. End of the day. The business value is what makes any project successful. So if you are into too much of coding and if you're.
Making your test pass, everything, if it fails some random way, don't think about some random ways to actually make it work. So if the test is failing, if the test is unreliable, remove it, it's not a test anymore and recreate it. So in my experience that's the thing I usually follow every time I'm available on LinkedIn, people can search me with my name himabindu pateti in LinkedIn so I'll be available there.
Thank you Bindu for your Selenide automation awesomeness. For the seventh inner value we covered in this episode, head on over to test guild.comalakeautomation a269 and while you're there, make sure to click on that. Try it for a free trial link under the Powered by Sauce Lab section to learn all about Sauce Labs awesome products and services. So that's it for this episode of the Test Guild Automation Podcast. I'm Joe and my mission is to help you succeed with creating automation awesomeness. As always, test everything and keep the good. Cheers.
Thanks for listening to the Test Guild Automation Podcast. Head on over to testguild.com for full show notes, amazing blog articles and online testing conferences. Make sure to subscribe to join the Guild and continue your testing journey. This has been a Joe Calantonio production.
More from JoeBot
Automation Testing Podcast 2026: New Schedule, Events, Discounts with Joe Colantonio
Automation Guild Kickoff, AWS Nova, Karate v2, and AI Testing Reality and more TGNS177