selenium页面工厂为不同的用户处理同一页面的不同元素

时间:2014-12-27 17:50:18

标签: selenium pageobjects

我有一个简单的问题。我相信我们中的许多人可能会遇到同样的情况。我正在使用页面对象模式。以下是我在导航中执行的步骤。

  1. 以一种用户身份登录我的应用程序。
  2. 点击一些链接转到表单页面。
  3. 在表单页面上填写字段并提交
  4. 注销
  5. 在3)表单对象页面显示一些不同的输入字段,具体取决于我需要与之交互的用户类型。那么我如何在同一页面对象中处理它。有没有人陷入同样的​​境地,并找到了一些体面的方式来做到这一点?

2 个答案:

答案 0 :(得分:0)

我知道这是一个简单的自动化脚本而不是Java项目,我们应该使用所有oops概念,但我仍然会使用以下内容:

  1. 创建包含常用Web元素和方法的父页面类。

  2. 使用特定于该客户的元素和方法创建子类。

  3. 在测试中,传递一个指定客户类型的参数并调用相应的子类。

  4. 如果您不想要任何此类继承内容,您还可以尝试以下操作。

    1. 创建一个包含所有类型客户元素的页面类。

    2. 创建可以采用参数customerType并执行操作的泛型方法,例如,如果customerType == 1,则执行这些操作。

    3. 假设特定客户的所有字段都是强制性的,我脑海中浮现出另一种解决方案如下:

      1. 为所有元素创建一个公共类。

      2. 在页面类中创建一个遵循条件的泛型方法,如果该元素存在则输入值。

答案 1 :(得分:0)

如果你理解了Page对象模型的概念,那么这个问题对你来说会更清楚。是的,继承是这里的一个重要因素。我建议你通读this来了解真正的页面对象模型应该如何工作。并且,#3问题的解决方案就像UI映射一样简单。像

这样的东西
@FindBy(how = How.NAME, using = "q")
private WebElement searchBox;

每个元素或类似的实现。

对于完整的网页对象,您应该映射所有elements ,而不是取决于用户。原因是,每次调用该类时,它都将被实例化,并且所有映射的元素也将被实例化。不需要动态加载元素如果页面上没有使用或隐藏任何元素,那么这些元素将无法使用,无论如何都不会使用它们