WebDriver PageObjects的代码生成

Or *_*ith 2 selenium xpath

我试图在WebDriver中为Page Object创建某种代码生成.

我读到了它,并观看下一个讲座:http: //www.youtube.com/watch?v = mSCFsUOgPpw

我还看到了一些为我的应用程序中的每个新页面创建页面对象的工具,所以我知道如何识别和创建与我相关的WebElement(通过ID或XPath),并创建一个新的页面对象.

但我有两个主要问题:

  1. 我怎么知道这些元素应该怎么做?其中一些需要点击,一些需要发送密钥,一些需要点击然后按ENTER键等.
  2. 导航 - 在我的测试代码中,我想在页面之间导航(这是关于页面模式的全部内容).我怎么知道我的页面对象之间的连接?

Alg*_*giz 5

为每个小部件创建一个(可重用的)页面对象(widget = button,combobox,textfield,...).窗口小部件的构造函数接受WebElement或By对象.每个页面对象都应该使用可重用的页面对象.以下是简单登录页面的示例.

public class MyLoginPage {
  private TextField mUsername;
  private TextField mPassword;
  private Button mSignon;

  ...

  // getter
  public TextField getUsername() {
    return mUsername;
  }

}
Run Code Online (Sandbox Code Playgroud)

通过使用一些启发式算法,您应该能够选择要使用的正确小部件.这应该回答你的第一个问题.

对于第二个问题.您可以在页面对象上实现特定的方法,返回另一个页面对象.像这样的东西:

public MyHomePage clickSignon() {
  this.mSignon.click();
  return new MyHomePage(...);
}
Run Code Online (Sandbox Code Playgroud)

您还可以将按钮实现为泛型类.该方法单击Button小部件:

public <T extends Widget> T click() {
   ... // coe that makes the click
   return new T(...);
}
Run Code Online (Sandbox Code Playgroud)

登录页面内的成员声明:

private Button mSignon<MyHomePage>;
Run Code Online (Sandbox Code Playgroud)

所以你可以写:

MyHomePage hp = loginPage.getSignon().click();
Run Code Online (Sandbox Code Playgroud)

要么实现页面对象的工厂.工厂能够确定屏幕的当前状态,并返回与您看到的匹配的页面对象.您可以通过尝试在屏幕上查找某些特定元素来确定(即登录按钮仅出现在登录页面上).

根本不是一个明确的答案,但我希望它已经给你指路.不要犹豫,在评论中发表问题,我会更新这个答案.