java - How to do login into Before annotated method using Graphene? -


i'm learning graphene , created page objects login page , welcome page.

loginpage

@location("myurl/login.xhtml") public class loginpage {    @drone   private webdriver driver;    @findby(id = "username")   private webelement txtusername;    @findby(id = "password")   private webelement txtpassword;    @findby(id = "loginbutton")   private webelement btnlogin;    public webelement txtusername() {     return txtusername;   }    public webelement gettxtpassword() {     return txtpassword;   }    public webelement getbtnlogin() {     return btnlogin;   }    public void login(string username, string password) {     this.txtusername().clear();     this.gettxtpassword().clear();     this.txtusername().sendkeys(username);     this.gettxtpassword().sendkeys(password);      // submit form , redirect welcome page     graphene.guardhttp(this.getbtnlogin()).click();   } } 

welcome page:

@location("myurl/") public class welcomepage {    @drone   private webdriver driver;    @findby(tagname = "nav")   navigationfragment navigation;    @findby(id = "version")   webelement labelversion;    public webelement getlabelversion() {     return labelversion;   }    public navigationfragment getnavigation() {     return navigation;   }  }     

as can see page objects using @location annotation. created 2 test classes, 1 each page:

test of login page. try login , check element of following (welcome) page.

public class loginpagetest {    @drone   protected webdriver browser;    @arquillianresource   protected url baseurl;    @test   public void testlogin(@initialpage loginpage page) {      // login page     page.login("username", "password");      // check version label showing correct version     webelement versionlabel = browser.findelement(by.id("version"));     assert.assertequals("wrong version", "version 0.2.4", versionlabel.gettext());   }  } 

test welcome page.

public class welcomepagetest {    @drone   protected webdriver browser;    @arquillianresource   protected url baseurl;    @page   private welcomepage page;    @test   public void testversion(@initialpage loginpage loginpage) {        // login page       loginpage.login("username", "password");          // check version label showing correct version       assert.assertequals("versionslabel falsch", "version 0.2.4", page.getlabelversion().gettext());    }    @test   public void testsomethingelse(@initialpage loginpage loginpage) {        // login page       loginpage.login("username", "password");          // check else    }       } 

this works, extract redudant login testcase, got 1 place it's needs maintained. tutorials , wiki articles read in past few hours login on , on again in each test method. avoid that, tried extract @before method this:

public class beforewelcomepagetest {    @drone   protected webdriver browser;    @arquillianresource   protected url baseurl;    @page   private welcomepage page;    @before   public void login(@initialpage loginpage loginpage) {     // load loginpage via @initialpage , login     loginpage.login("username", "password");   }          @test   public void testversion() {      // login should done via @before - method      // check version label showing correct version     assert.assertequals("versionslabel falsch", "version 0.2.4", page.getlabelversion().gettext());   }  }   

but gives me following illegalargumentexception exception:

java.lang.illegalargumentexception: wrong number of arguments

so think method annotated @before must not contain arguments.

i tried write @before-method manually open login page, similar suggestions in several (older) selenium questions this one. created following class struggled on opening url of login page, login , "land" on welcome page.

public class secondbeforewelcomepagetest {    @drone   protected webdriver browser;    @arquillianresource   protected url baseurl;    @page   private loginpage loginpage;    @page   private welcomepage page;    @before   public void login() {     // load loginpage via browser     browser.get(baseurl + "myurl/");      // same     // graphene.goto(loginpage.class)      // login     loginpage.login("username", "password");   }          @test   public void testversion() {      // login should done via @before - method      // check version label showing correct version     assert.assertequals("versionslabel falsch", "version 0.2.4", page.getlabelversion().gettext());   }  }  

but brings 2 problems: first url of page object hard coded in test (maybe [using reflection api in question] workaround. second problem is: not work welcomepage page not opened , therefore version label isn't found.

org.openqa.selenium.nosuchelementexception: unable locate element id: label

does knows solution extract login non redunant method, executed before each @test , provide valid objects?


Comments

Popular posts from this blog

Is there a better way to structure post methods in Class Based Views -

performance - Why is XCHG reg, reg a 3 micro-op instruction on modern Intel architectures? -

jquery - Responsive Navbar with Sub Navbar -