Selenium Python Small Sample Project | Page Object Model POM

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
hello and welcome to this session today we are going to learn how to create a very simple sample project in selenium Python and we will learn how to implement unit testing page object model and HTML reporting in our selenium Python project so this is going to be very easy and very very interesting and if you are a complete beginner in page object model or unit testing or HTML reporting do not worry I am going to start from scratch and we will go very basic step-by-step and learn how to create a simple login test how to implement unit testing in our project how to implement page object model and we will also learn how to separate our test scripts from the web objects we will also learn how to create our locators class or a separate class where we can store all our web element locators we will learn how we can run our project from command line and ultimately we will add some HTML reports in our projects so some prerequisites are you should already be having Python on your system and I already have a session on that I will also provide the links to that session in the description section of this video so you can see the description and then you should have some IDE where we will create the project so I am going to use pycharm and you can use pycharm or some other ID and then the python libraries that I am going to use are selenium for our web automation and then I'm going to use HTML test runner for our reporting so let's get started and I will go to my PI charm and before that let me also show you the libraries that I have I am going to my command line and I will say whip freeze and you can run this command only once you have Python and pip installed so if you run this you can see I have this selenium library and I have this HTML test owner library as well so you can say pip install selenium if you do not have this library you can just install it so this is pip install selenium and if you do not have it it will die load and install in my case it is saying requirement already satisfied and similarly you can say flip install HTML test runner so this will again install HTML test owner library in my case it is already there so if I run this command let me just run this again yes it is running and here it is saying requirement already satisfied now also one thing that you should you can check is you can run pip freeze or you can also run pip list to check the list of libraries that you have for your Python and if you want to check some particular library for example I want to check selenium you can say pip show selenium and it will give you all the summary of this library so you can check the name version summary author and so on and if you want to check if there are any broken requirements you can say pip check and the library name so I will say pip check selenium and it is saying no broken requirements found so this is how you can check your libraries and also let me give you some links so you can install selenium and here is the link so I will go to this page and also you will say if install HTML test runner and let me give you the link for this as well so here are these two web pages this is for selenium which shows us how to install selenium this is pip install selenium and if you want to read some documentation you can go here and it is available for Python 2.7 and 3.4 plus versions and then this is for HTML test runner also you can see some documentation I will copy this and paste it in the notes so that all these nodes are available for you and similarly I will copy this as well and paste it here and all this will be available in the nodes or description section below the video so now let's get started now I already have a project you can create a new project so I'm not going to create a new project here this I have already covered what I will directly do is inside my project I am going to I have a sample projects folder here so I'm going to create a new directory inside the sample project so I will do a right-click new directory and I will say this is form demo so this is page object model project or I will say form project demo and say ok now here because we are going to create a page object model project so I am going to create two folders inside the directory so I will right click new directory so the first is pages I will have all the page classes inside this folder and in a moment you will come to know why I am doing this and then I will create another folder called tests and I will have all my test classes inside this folder so this was an earlier project let me just delete this so I am deleting this so you can see this is the project structure so I have created a two folders pages and tests here and now I can start creating the tests so the very first thing is I have to create a simple login test so inside the test folder I will create a new python file and i will say this is login and you can see this is the file so the very first thing is i will say from selenium import webdriver and then I will create a variable called driver and say this is equals to webdriver dot and I will use the Chrome browser and in the brackets I have to give the executable path for my chrome driver exe so you can see I have copied and stored the chrome driver exe here and this I have covered in the earlier session so you can watch it there it is just that you have to download the chrome driver exe and we're it is you can provide the location so I will right-click and copy the path and provide it here and also make sure that you change these back slashes in the path to a single forward slash now if you are on Windows double backslash will also work for you but it is always recommended that you use single forward slashes so that it will work on Windows as well as other operating systems like Mac and Linux as well so you can follow this on Mac or Linux as well so here now I have said driver equals to web driver and I have used Chrome driver Chrome browser and given the chrome driver exe path I will then say driver dot and I will set implicit wait so I will say implicit wait and I will make this equals to 10 and then I can also say a driver dot maximized window so it will maximize my window during testing and now I have to go to the URL so here I am going to use a demo application which is this open source demo orange HRM so here you can see this is a login page and you can use the username admin and password admin 1-2-3 to login so I'm going to use this and here let me copy this URL and make it available in the notes again so that you can refer it from here so I will say driver dot get and the URL which is this and then after this I have to add a username or enter a username so I will do a right click on this username text box and go to inspect to check the properties or the locators available and here if I inspect this you can see we have this properties available we have name available and as well as we have ID available so it is always good if you have ID you can use ID I will copy this and I will say driver dot find element now you can see you have lots of chance to find the element find element by expert find element by link text by name by ID so I'm going to use ID and I will give the ID here and then the action is I have to send keys and I have to add the user name which is admin and after this I have to add the password so I will again inspect the password and you can see we again have ID available for password text box as well so I will take this ID and here I will say driver dot find element by ID and I will give the ID here and say dot send keys and the password is admin one two three and then I have to click on the login button so I will inspect the login button now and again here I can see the ID is available so we have ID for login button as well I will copy this and say driver dot find element by ID and this is the ID and here I have to say dot click so this will click on the login button and after this what I will do is let me manually login so once I log in to the application I will go to the home page and there is some problem let me just check so I will give the user name and password and login yes now it's logged in and once I go to the home page I will click on this welcome link and after I click on the Welcome link I will click on logout so let me inspect the Welcome link here and this is welcome and I can see we again have ID available so in case you do not have IDs on your objects you can use X paths or any other locator so here I am saying driver dot find element by ID and this is the ID and I will say dot click and then again I have two inspector logout link so again I will check for logout and here you can see we don't have any properties however this is a link so we can use this link text logout so I'm going to copy this and in Python selenium we have a function called find element by link text and find element by partial link text so I'm going to use this find element by link text I am giving the text here and I will say dot click and once this is done I will close the browser so I will say driver dot close and Driver dot quit to quit the browser and then I will print test completed and also I will add some wait time after this action so that you can see this running and it is not very fast so for that I will import that time module and here I can say time dot sleep for two seconds so that you can see what is happening on the screen and now I can run this so this is my simple test I will do a right click and say run so it will open the chrome browser maximize the window and go to orange each RM and locks in and locks out and now you can see the screen and that's it it completed and it is there writing here on the console test completed so we have done the very first step which was to create a simple login test and now we have to implement unit testing so there are certain unit testing frameworks so what I'm going to use here is the Python inbuilt unit test module so I will say import unit test and here I will say I will create a class so I will say class and I will say this is login test and here in the brackets you have to say unit test dot test case so we are inheriting from the unit test test case class so that you can use the unit testing functions so now I will create the functions here so I will say def and I will create a setup function to do the setup now there are two setup functions available one a setup which will run before every test method and then we have setup class this will run only once before all the test methods so for doing the browser setup we just want to run it once so I am going to use setup class here and I am going to take these three statements for setup cut it from here and add it inside this function now here in Python are be very careful of the identity and you can see from the start of this function there is a tabbed space or five spaces so whatever will be present as a tab space from here will be a part of this function so I dentition is important in Python and let me put everything in a single line here yeah so here also you can see there is a variable class so we have to say here CLS dot driver and CLS tour driver here as well and here as well so you can name it anything it is not necessary to name it CLS but then you have to use CLS dot and then the driver name so this is setup function I will now create our test function so I will say def now for test function always start with the word test and I will say login and I will say valid and it is always useful to give some meaningful names to your function so that you can see I have given login valid and I can figure out that this is a test for a valid login and now I will add the statements here so all these test statements I am going to add in the function so I will cut it from here and I will add inside the function here and again make sure of take care of the identity and here it is using a variable self so I have to say self dot driver and also you can name it anything so I am going with the default name which is self and I have to change all the driver with self dot driver so here now I am done with this so our test function is steady and now we have to do that teardown so I will create a function for teardown and again we have two functions available teardown will run after every test and teardown class will run only once after all the tests are completed so I will use this teardown class because I will be closing the browser only once after all the tests are completed and these statements I will cut it from here and add inside the teardown class function and of course you have to use this variable CLS so I will say CLS store driver and here as well and you can see our tests are complete now our unit testing is done one thing that you should take care is for when you are using the class functions always provide the annotation at class method so this is a class function I have to provide the Enbridge in a class method and then similarly for teardown as well this is our class function so I will say at class method now this is ready I should be able to run this I can say and do a right click and here I should get an option to run the unit test from this login but I am not getting it so for that I will go to run and I will go to edit configurations and you can see this login is coming inside Python but it is not there inside Python tests and this login is not the one that we are going to run it is something different so I can actually delete it from here inside the Python configuration and I can click on this Add button and I can say Python tests and here I will go to unit tests and I will create a new configuration so I will say this is login tests and I will select the module name so let me select this login test from here sample project spawn project demo I will say ok and in the Python interpreter I can use the project default and apply and okay and now if I do a right click you can see I am getting the option run unit unit test from this module so I will now run this and it is open the Chrome browser maximizing the window and doing the login so it was I think very fast and you can see it has completed everything is successful and now if you want you can run it from command line as well to run it from command line you can go to the location of this login dot P Y file so I will copy the location and go to the command line so I'm going to my Windows command line if you are on Mac you can go to terminal and very first thing is we have to change the location to the folder where the login where the file is python palettes and then you have to say python and the file name so if you run this it is not running or normally trans the python file but because this is unit test it is not running it for that you can save python - m unit test and the file name and if i run this now you can see it is now running it so it is running our test logging and log out and then so here you can see ran one test in nine point three seconds now if you do not want to use the - m unit test flag at the end of your file you can add this condition so at the end you can add if underscore underscore name equals equals underscore underscore main then unit tests unit test dot main so if you do this now if I go to my command line and even if I do not use the - M unit test flag and I just say Python and the file name and I run this it will still run your unit tests so it is now on logging in and log out so logout is sometimes very fast it is not even able to show on the screen but you can see it is passing and everything is successful so we have also added our unit testing now we have to implement page object model now what page object model is let me go to the go to Google and search for page object model and here I will go to the images and let us see some images so you can see this image and here you can see the difference so if you do not increment page object model in normal cases what we will do is we will have a single class and inside the class we will write our entire test scripts which will have the web element locators their methods and the test methods everything in the same class however when you implement page object model then we have a separate class for web elements and the action methods on those elements and the test methods are stored separately in a separate class also if you look at this image this also shows the same thing here we have a different package or a separate folder called pages and for every web page there is a separate class for example login page has a separate class here the home page has a separate class here and then the the result separate folder for test or a separate package and all the test goes inside this folder so this is very useful when you want to create your entire framework so that it will help you in easy maintenance and it will make the framework very efficient we will see how to do that in a very simple way so the very first thing is when you want to implement page object model we have to create a class for every page so for example we we are interacting with two pages here one is the login page and then the home page so here on the login page I will create a separate class for login page and in the class I will have the locators for the elements I am going to interact so on login page we have three locators or three objects the user name text box the password text box and the login button so all the locators will go inside that class and also the action so here we are doing reactions and they username enter password and click on login button so let us see what to do and how to do so inside the pages I will create a new python file I will right click new python file and say this is login page and here so you can see the python file is here here I will create a class called I can name it anything I will say login page and inside the class the first thing we have to do is we have to create a constructor and in Python we create a constructor by giving the keyword def and then underscore underscore in it so this is the constructor in Python and this constructor is called every time when you create a object for this class now if you are finding a little bit difficulty in understanding this do not worry you just follow me and you will come to know why we are doing this so you can create this constructor and in the constructor I will take an argument for driver and you will come to know why I am doing this so for now I am just taking an argument called driver and inside the constructor I am saying self dot driver equals driver so I am making whatever is coming inside this constructor as a driver instance I'm making this equal to self dot driver and now what I will do is I will add the objects so here we have three objects username password and login button so I will say self dot username and I can say this is our text box and also the locator I am going to use this ID so this is very useful if you give some intuitive names so somebody who will read this can come to know that this is our username object or a username element which is of the type text boss text box so this is text box and the locator we are going to use is ID and I will make this equal to the locator or the ID that we have found earlier so I will take it from here and here it is so this is the ID we are using I will copy it from here and provide it here and then similarly I will say self dot password this is again a text box and we are using ID as the locator and I will copy this again from here this is the ID and I will provide it here and similarly the login button so this is a button and again we are using ID and here again I will give the ID for the login button which is this one so now I am done with the three objects so make sure in page object model you create a class for every page I can add the objects for the home page as well here but I am NOT doing this because that will be against the pure page object model principle now what I will do is I will create the functions so functions or the action method so here we have to enter user name so I will create a function called enter user name and in the arguments I am going to take argument for user name so whatever it will be given to this function will be used as the user name and inside the function now I can say this which I was using in my test class I will copy this from here and add it here self dot driver dot find element by so this I will change with this self dot user name textbox ID so this user name text box ID and the value is whatever is coming as a input to this function which is this user name so I will add this here user name and also this is a good practice whenever you are working with any text objects you can first clear them so I am going to first clear this I will copy this again and I will say first dot clear and then add the user name and the same thing will be done for password so I will create another function deff enter password and again I will be taking a parameter called password you can name this anything and the same thing goes here I will copy these two statements and I will paste it here and here I have to change this to password text box ID and similarly this I will change so this is self dot password text box ID and the value is whatever we are taking as an input which is this variable password and then the next method is click login so we have to click on login button of course we do not need any input here we just have to click so I will just use self tour driver dot find element by ID and the ID is self dot login button ID and the option is click so now you can see we now have this very simple page class for login page and similarly we will create a class for home page as well so here in the class we have created a constructor and we have added all the objects on that page and all the actions that will be done on that objects so I will now create another Python file and this is for the home page so I will say this is home page and here I will say class home page and the same thing I will be doing here the first thing is we have to create a constructor and inside the constructor I will take an argument or the instance for driver and I will say self dot driver equals to driver and now I will add the object so if you go to the home page I am doing a manual login here so here in the home page we have two objects that we are interacting with the Welcome link and the logout link so I will say self dot welcome which is unlink and the locator we are using is ID and this the ID is equal to let me copy from my test script this is the ID I will copy it here and similarly we have the logout which is again our link and we are using link text as the locator this is link text and again I will copy it from here and provide it here so that's it and now the actions so we are doing just two actions here I will create methods for that the first one is click on welcome and we don't need any arguments to be passed to this function we just have to click so I will just say I will copy it from here itself and I will say here self dot driver dot find element and here I have to use the variable that I have created here which is self dot welcome link ID and that's it and then the next function is click on logout and again I will provide it this statement will copy it from here and add it here and change this locator to self dot logout link link text so you can see now we have created a page for our homepage as well and now we will use this into our test which is here login so now what I will do is you can comment all this out or you can delete everything I am just going to comment this out for now and now what I'm going to do is I will be creating objects for the login page and the home page and I will be using the functions here so for that the first thing you have to do is you have to import the login page and home page so what you can say is from and I will have to go to the parent folder which is sample project so I will say from sample projects and dot pom project demo dot pages dot the file which is login page login which is the file name and import the class which is login page and similarly for home page I will say from sample projects dot pom project demo dot pages dot homepage import homepage so this is the class home page and now I can use the class and I can create the object for the class so in the test function or the very first thing I am doing going to do is I will create a variable driver and I will make this equal to self dot driver and this I am doing just because I don't want to use self tour driver everywhere I can directly use now driver so I can directly say this driver dot get and then after this what I am going to do is I will create an object so I will say I'm going to use any variable I will say login equals to now I can create object for login page and of course I have to pass the driver instance from here because in the login page whenever we create the constructor whenever we create our object this constructor will be called and this constructor is accepting a driver or here so I'm going to pass the driver instance from here and now I can use this variable login to access all the functions from that login page class so I can say login dot and now you can see we are getting all the functions and variables from this class login page so I am going to first call enter user name and I will give the user name that is admin and now I will call the function enter password and pass the password from here and then login dot click login and that's it so you can see how easy and clear and clean this is looking similarly I will now create a object for home page class so I will say home page equals home page and again I have to pass the driver instance and now I can use this variable home page to access all the functions so I can say home page dot click welcome and home page dot click logout so that's it and I can just remove these earlier statements so I am just going to remove all this and also you can now see how clean our test is looking and it is very understandable and the other advantage of page object model is you don't have to now change or maintain all these objects and functions at multiple locations for example let us take this username so in real world this object or this locator username might be used in hundreds of test cases now if there is any change or any maintenance required you don't need to change it at hundreds of places you just need to change it here and similarly this goes for the action methods for example enter user name might be used in hundreds of test cases whenever there is any change you just have to come here to the class or to the page login page class and just make the changes here and it will be referenced from here in all the tests so this is the main advantage of using page object model and let us now check it I will do a right click and run this let us run this and let us see yes it is opening the Chrome browser maximizing the window and doing the log in and doing the logout and everything is running fine and you can see here we are getting the status everything is completed successfully so we have implemented page object model we have also separated our test scripts from the objects so you can see now the objects are located in their own classes and the test scripts are separate and this is what we saw in this images as well now we have a separate folder called pages and all the web pages have a separate class inside this folder and for tests we have a separate folder and this is similar what we saw earlier we have a separate classes for add objects their methods and the test methods now let us also see how to create a separate document or class for locators now page object model can be implemented in slightly different way as well there are different ways I have told you the most easiest and straightforward way now some people also prefer that all these objects like we have user name textbox or password text box and login button and here we have for home page all these can be stored in a single separate location and we can refer all of the objects from a single page so let us see how to do that I am going to now create our third folder and I will name this as locators so you can see the locators folder here and inside the locators folder I am going to create another Python file called locators and here in the python file i will create a class and i can name this anything i will name this as locators and now inside the class i am going to add all the objects and their locators so all the objects of the application in our we have our login page so login page objects and we have our home page so here will come the home page objects so let me just take the login page objects from here and copy it and provide it in the locators class here and similarly for the home page I will take these two objects and provide them here and of course because these are class variables there is no need to use self I am just deleting all the self variables here so let me delete all the self variables and yes so you can see here we have all the objects and similarly you can keep on adding all the objects and their locators in this file so it can be become a very long document having all the objects of your entire application now how to refer this so you can go to the page for that for the web page you can go to the class and here the first thing is we will have to import the locators class so here I will say at the top I will have to say from I will have to go to the root folder which is sample projects and then go to the child folder of just bomb project demo and again the child folder which is locators and the file name which is locators and i have to import the class which is locators and now the class is imported and now you can refer the variable so for example for the user name text-box ID i can here instead of hard-coding I can refer it from locators I can say locators dot and username textbox ID so it will be referenced from the locators class also you can directly use it here as well so here also you can say something like where you are giving your functions you can directly use it I can say locators dot user name text-box Heidi you can do this as well but it is always recommended that you use this first way so that you get a list of all the objects you are using in this class at the top and then you can refer it in your functions so this is what you will have to do and our test will still run fine let us try to run our test again and see I'm doing it at lick and run unit tests and it is going to Chrome browser and yes it is adding the username password and logging out so this is running fine and now we have done this also see how to run from command line so now if I go and run from command line let me go to the command line and you can see we had already tried it earlier but if I try to run this now I'm saying I'm going to the location of the folder where our test file is so this is under test folder I have gone to the location here and then I am saying login dot P Y Python space the file name which is login dot P Y and if I run this now you can see we are finding this error no module named sample projects so this is something that you will get when you have a nested structure of folders and you are importing classes from other folders it will give you some problem while running from the command line it will run fine from the ID PyCharm but from command line it will have some issues so one thing that you can do is you can add this to your imports before importing that classes so this is I will provide in the notes as well so here just before you have imports for these classes like the login page and home page just before this you can give this here let me uncomment it so I am pressing ctrl and /on my keyboard to uncomment and here I'm importing says import OS and then I am saying since dot path dot append and this statement and these dots will depend on the nested structure so if you have three nested folders you can give three dots here or if you have two you can give - so let me try this out if I go back to my command line and try to run this so it is still not able to find the sample projects so for that what you can do is if this does not work for you what you can do is you can go to the parent folder so in my case the parent folder is sample project so I will go to the parent folder and you can see now I am on sample projects and now here you can say Python and you can use the - M flag okay Python - M and then you will go to the child folder which is here pom project demo so I will say form project demo and dot then again the child folder where my file is so this is tests so I will say tests and then again now you will say the file name so in my case this is login so now if I run this I am still getting this error so let me again go to a higher folder which is selenium and now I will say python - m and i will go to the sample projects dot i have to go to palm project demo dot i have to go to tests dot login so this is the file name and i will try to run now and you can see this is now running fine and i will tell you the reason why it is not able to run from command line so this is running fine now and yes you can see this is all running fine and then test one in 11.75 seconds so the problem here is you can see we are importing from some different folders or some parent folders now this is not able to resolve at the command line so in the command line wherever you start from so now I am starting from this folder sample projects over whatever is the import within the sample projects will be resolved now earlier I was directly starting from test folder so it was only resolving the imports which are within test folder and any imports which are outside test folder like this pages it was not able to resolve so this is how you can run from command line and now let us see how to add the HTML reports so we have already added the HTML test owner library and you can again see if I say pip install HTML - test runner you can see this is already there so now I can import in it in my project I will say import HTML tester now and that's it now you do not have to make any changes in the test at the end where we have given this condition if name equals equals main in the brackets here I will say test Runner equals HTML tester now dot HTML tester now and in the brackets I will say output equals so here I have to give a folder where I want to save my reports so you can see I have already created a folder called our reports here I will copy the location and provide it here so I'm just going to provide this here and make sure you change the backslash with a single forward slash and if you're on Windows double backslash will also work but always recommend it to use a single forward slash which will work on all operating systems and this will run our tests and create the reports and I have to run it from the command line so I will now just run this and let us try to see okay so let me run this now so this is opening the Chrome browser and running our test and once the test is done we should get the report so you can see it is in generating HTML reports and now if I go to my reports folder you can see there is a report created here I will do a right-click and save open in browser and go to Chrome and you can see the report here everything is passed let us also test it with the failure so I'm going to create and just copy this test case the test case that I already have so here I am going to just copy this and I am going to paste it again and I will say this is login test login valid let me say this as two and here what I'm going to do is let me do a wrong login or a invalid login I will use something like all wrong username like admin one and a twin one two three is the password and I will say login and it will show me this invalid credentials so I'm going to test this so I will name this as test login invalid username and Here I am going to say Eggman one and of course I do not need anything from the home page and then after this I need to check the message which is invalid login so if I inspect this I will just see I can just inspect this so there are no direct properties available so I can always use some tools so like crow path is one tool is it is a plugin for Chrome and here if I select the relative path I am getting this so what I'm going to do is I will copy this and in the login page itself now I am going to create another locator for invalid username and this is message and I am using XPath here and equals to this and then I have to say for example I have to use a function deff check invalid username message so here I will also get the message it's the input and here I have to say so I can say what I have to say is driver dot find element by XPath and whatever is the XPath then I will have to get the text value out of this so this is what I will be using I will cut it from here and paste it here so the XPath is self dot invalid username message XPath and I will get the text and then I will assert so I will say here I have to use self dot driver here I have to say self dot driver and I have to get the text so I am getting it in such variable and then I will say self dot I can say assert let me use that equals so let me do one thing I will just return this I am NOT going to store it here I am just going to return it so whatever is will become I will return the message and in the test here so this particular function will return something and I will store it in a message here and then I will say self dot assert equals message and this should equal to this thing invalid credentials so let me just copy this and I will say this should be equal to invalid credentials and I'm actually checking it with something wrong invalid credentials one two three so this should fail and show in the report so let us try to run this let us see if this runs fine I am going to my command line and I will run this again and let us see what happens so here it is running the test and actually it ran the very it ran the invalid test at the first instance itself so for that what I can do is I can give some numbering here I can say test this is 0-1 and then underscore login valid and I can say this the other one is test zero to underscore and this is logon in welts you username so this will now run in alphabetic order in sequence and let me now run this again so they should first run the valid login test and yes this is running the valid login test now logging out and now it is running the invalid credential test and it is generating the HTML report here and here it is so now let me try to see the report I will do a right-click open in browser Chrome and here you can see the second one there is actually a error so if you view this it is not able to locate with the XPath expression so it's not able to look at the XPath expression so here there was some error however the idea was whenever there is an error or a failure it should be shown in the report which we are now getting it so you can troubleshoot this why it was not able to get the XPath and if I go and see in my login page so this is the XPath I am using and you can try with some other experts as well so this is the error it was showing but the thing was we are able to get the error as well as the failure we are able to get in the reports so we have done this add HTML reports as well and we have completed all the steps of creating a small sample project using palm unit testing and HTML reports now if you find any difficulty you can check this video and you can see the video two or three times so that you get all the concepts if you are a complete beginner and you have if you have any issues or you faced any difficulties always try to troubleshoot first and take some online help and still if you are not getting to resolve some of the doubts you can always message me and I will try to help you as soon as I can I hope this was very useful for you thank you for watching
Info
Channel: Automation Step by Step
Views: 123,978
Rating: 4.9047036 out of 5
Keywords: selenium python sample project, selenium python automation framework for beginners, selenium python test automation framework step by step, selnium python beginner tutorials, selenium python for beginners, selenium python project, selenium python how to create html reports, selenium python page object model, how to create page object model pom in selenium python, selenium python automation framework from scratch
Id: BURK7wMcCwU
Channel Id: undefined
Length: 54min 5sec (3245 seconds)
Published: Mon Sep 24 2018
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.