首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebDriver PageObjects的代码生成

WebDriver PageObjects的代码生成
EN

Stack Overflow用户
提问于 2014-02-09 15:59:14
回答 2查看 3.2K关注 0票数 2

我试图在WebDriver中为Page对象创建某种代码生成。

我读了这篇文章,看了下一节课:http://www.youtube.com/watch?v=mSCFsUOgPpw

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

但我有两个主要问题:

  1. 我怎么知道该怎么处理这些元素?其中一些需要点击,有些需要发送键,有些需要单击,然后按回车,等等。
  2. 导航--在我的测试代码中,我想在by页面之间导航(这都是关于页面模式的)。如何知道页面对象之间的连接?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-10 08:09:18

为每个小部件创建一个(可重用的)页面对象(widget=按钮、组合框、textfield、.)。小部件的构造函数接受WebElement或By对象。每个页面对象都应该使用可重用的页面对象。下面是一个简单的登录页面的示例。

代码语言:javascript
复制
public class MyLoginPage {
  private TextField mUsername;
  private TextField mPassword;
  private Button mSignon;

  ...

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

}

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

关于第二个问题。要么在页面对象上实现返回另一个页面对象的特定方法。就像这样:

代码语言:javascript
复制
public MyHomePage clickSignon() {
  this.mSignon.click();
  return new MyHomePage(...);
}

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

代码语言:javascript
复制
public <T extends Widget> T click() {
   ... // coe that makes the click
   return new T(...);
}

登录页面中的成员声明:

代码语言:javascript
复制
private Button mSignon<MyHomePage>;

所以你可以写:

代码语言:javascript
复制
MyHomePage hp = loginPage.getSignon().click();

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

不是一个明确的答案,但我希望它已经给了你方向。不要犹豫,在评论中发布一个问题,我会更新这个答案。

票数 5
EN

Stack Overflow用户

发布于 2014-05-11 22:24:11

我也受到了这个讲座的启发,在对这个主题进行了一段时间的探索之后,我会说:这种自动生成页面对象的方法对于某些web应用程序是可能的:例如,.NET/ASPX页面上的默认重要控件将具有id: ctxWebPageName_Container1_Panel1_btnLogin。

您可以轻松地解析id并获取所有所需的信息。

然而,在一般情况下,自动生成页面对象是不可能或非常困难的,需要一些人工智能。

这就是为什么我构建了自己的工具社署网页记录器,用于半自动手动创建页面对象类的枯燥过程。

该工具允许:

  • 从浏览器页面中添加新元素
  • 编辑和调试已记录的web元素:测试和更改定位器
  • 生成页面对象类文件

为了显示全貌,我正在进行另一个项目,一个使用PageObjects的简单框架:

SWD.Starter,它为PageObjects引入了以下规则:

每个页面都可以进行自我测试:

框架中的每个PageObject都有一个通用测试,它打开页面并要求PageObject对其元素进行自我测试。

这些测试是作为一个小烟幕测试套件实现的。首先,他们测试应用程序,但另一方面,他们也检查页面对象声明内的代码仍然对应于真实的页面。

面向服务的体系结构

Page1的web元素不能在Page1类之外访问。当测试代码或其他页面想在Page1上执行一些操作时,他们应该调用在Page1中声明的方法。Page1中的所有web元素都是用私有或受保护的修饰符声明的。

通过遵循这些规则,我简化了我的生活:

  • 社署网页记录器记录新页面和生成PageObject代码的过程变得更快、更有趣。
  • 当PageObjects与实际页面不相对应时,烟雾测试套件很快就会失败。
  • 为了修复页面对象,我需要用SWD页面记录器手动记录一些元素,或者手动修改。正如我已经说过的,不允许直接使用给定pageObject之外的web元素;因此,修复只需要在破损的pageObject中应用。其他几页

参考资料

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21661320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档