java - Am I doing correct with page object model in Selenium? -


i'm trying automate prestashop test cases selenium webdriver. doing correct, page object model?

this homepagepom class:

package pageobjects; import org.openqa.selenium.by; import org.openqa.selenium.webdriver; import org.openqa.selenium.webelement; import org.openqa.selenium.alert;  public class homepagepom {     private static webelement element = null;     private static webdriver driver = null;     public static string correctlogin = "aaaa";      public static void enterpage(webdriver driver) {         driver.get("http://website.com");     }      public static webelement homelogo(webdriver driver) {         element = driver.findelement(by.id("header_logo"));         return element;     }      public static webelement searchbar(webdriver driver) {         element = driver.findelement(by.id("search_query_top"));         return element;     }      public static webelement searchbarbutton(webdriver driver) {         element = driver.findelement(by.name("submit_search"));         return element;     }      public static webelement contactus(webdriver driver) {         element = driver.findelement(by.id("contact-link"));         return element;     }      public static webelement signin(webdriver driver) {         element = driver.findelement(by.classname("header_user_info"));         return element;     }  } 

this loginpagepom class:

package pageobjects;  import org.openqa.selenium.by; import org.openqa.selenium.webdriver; import org.openqa.selenium.webelement;  public class loginpagepom {     private static webelement element = null;     private static webdriver driver = null;     public static string correctlogin = "client";     public static string incorrectlogin = "client_incorrect";     public static string correctpassword = "pass_correct";     public static string incorrectpassword = "pass_incorrect";      public static webelement createaccountfield(webdriver driver) {         element = driver.findelement(by.id("email_create"));         return element;     }     public static webelement registeredemailfield(webdriver driver) {         element = driver.findelement(by.id("email"));         return element;     }     public static webelement registeredpasswordfield(webdriver driver) {         element = driver.findelement(by.id("passwd"));         return element;     }     public static webelement registeredsubmitbutton(webdriver driver) {         element = driver.findelement(by.id("submitlogin"));         return element;     }     public static webelement createaccountbutton(webdriver driver) {         element = driver.findelement(by.id("submitcreate"));         return element;     } } 

and loginpagecorrectlogin class, execute 1 single test case - correct login prestashop website:

package testcases; import pageobjects.homepagepom; import pageobjects.loginpagepom; import org.openqa.selenium.by; import org.openqa.selenium.webdriver; import org.openqa.selenium.webelement; import org.openqa.selenium.firefox.firefoxdriver;  public class loginpagecorrectlogin {     public static webdriver driver = null;     public static webelement element = null;     public static void main(string[] args) {         driver = new firefoxdriver();          homepagepom.enterpage(driver); //enter home site         homepagepom.signin(driver).click(); //find sign in option , click         loginpagepom.registeredemailfield(driver).sendkeys(loginpagepom.correctlogin); // input correct login field         loginpagepom.registeredpasswordfield(driver).sendkeys(loginpagepom.correctpassword); //input correct password field         loginpagepom.registeredsubmitbutton(driver).click(); // click on submit button     }  } 

i'm begginer @ selenium, want using best practises. correct? example create other classes loginpagecorrectpassword, loginpageincorrectlogin , loginpageincorrectpassword.
advice page model object helpful.

as open ended question, here general pointers:

  1. you won't want multiple pages correct password, incorrect password, etc aren't different pages.
  2. move strings, url , usernames/passwords string-table/resource-file/config-file/something. having them set in code means forced edit code if, instance, password changes; there many other negatives well.
  3. make general actions page object. simple example:
    loginpagepom.login(username, password, isvalidlogin) way won't have login code repeated everywhere, easier understand, , you'll have change 1 spot if/when login page chan

Comments