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
Post a Comment