初始化页面对象 - Arquillian - Selenium

Initialize Page Objects - Arquillian - Selenium

我是 Selenium 和 Arquillian 框架的新手。我正在尝试实现页面对象模型。 Webdriver 浏览器功能保存在 arquillian xml 文件中。

我正在使用 TestNG 并创建了以下 类:

public class Test{
  @Drone
  Webdriver driver;
  @Page
  Login login;
  @Page
  Home home;
  public void createOrderTest(){
    login.navigateURL();
    login.setcredentials();
    home.createOrder();
  }
}

public class Login{
  // Webelements needed in methods below are declared here
  public void navigateURL(){
     driver.get("//url/login.aspx");
  }
  public void setCredentials(){
     // code to enter username, password and click login 
     Graphene.waitAjax().until().element(signIn).is().not().visible();
  }
}

public class Home{
  // Webelements needed in methods below are declared here
  public void createOrder(){
     // code to create order
  }
}

问题陈述: 我不确定如何在代码中的 LoginHome 页面之间导航。一旦用户使用 Login 页面方法登录,Webdriver 如何使用 Home 页面方法继续测试?

错误:

使用 navigateURLsetcredentials 方法测试运行良好。但是,测试无法访问 createOrder 方法,如下所示:

WARNING: Argument 1 for UpdateTestResultBeforeAfter.update is null. It won't be invoked.
FAILED CONFIGURATION: @BeforeMethod arquillianBeforeTest(public void Test.createOrder() throws javax.mail.MessagingException,java.io.IOException,java.security.GeneralSecurityException)
org.jboss.arquillian.graphene.enricher.exception.PageObjectInitializationException: Can not instantiate Page Object class Home

请指导我。谢谢。

首页是静态页面吗?我假设您不应该将登录页面重定向到主页。这应该由应用程序本身完成。也就是说,最终用户将使用 url 访问登录页面。毕竟所有导航都应该由应用程序本身完成。

@RunAsClient
public class Test extends Arquillian{

  @Drone
  Webdriver driver;

  @Page
  Login login;

  @Page
  Home home;

  public void createOrderTest(){
    login.navigateURL();
    login.setcredentials();

    //you do not need this
    //home = Graphene.goTo(Home.class)

    //use graphene fluent wait API to wait for the page load
    home.createOrder();
  }
}