2014-12-27 66 views
-2

我有一个简单的问题。我相信我们中的很多人可能会遇到同样的情况。我正在使用页面对象模式。以下是我沿着导航进行的步骤。selenium页面出厂处理不同用户对同一页面的不同元素对于不同的用户

  1. 以一种类型的用户身份登录我的应用程序。
  2. 点击链接进入表格页面。
  3. 在形式页面上,填充字段和提交
  4. 注销

在3)的形式的对象页面显示了一些不同的输入字段取决于用户,这我需要与之交互的类型。那么我如何在同一个页面对象中处理它呢?有没有人进入相同的情况,并找到了一些体面的方式来做到这一点?

+0

会有一些类型的客户,对不对?例如,金牌特权,银牌特权,铜牌......等等。 – Sighil 2014-12-27 18:34:03

+0

是的,用户(或客户)属于区分它们的不同组。 – 2014-12-27 20:03:49

回答

0

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

  1. 创建包含公共WebElements和方法父页面类。

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

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

如果你不想要任何这种继承的东西,你也可以尝试以下。

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

  2. 创建通用方法,可以接受参数customerType并执行操作,如果customerType == 1执行这些操作,否则执行这些操作。

假设某个特定客户的所有领域都是强制性的,我脑海中浮现的另一个解决方案如下。

  1. 为所有元素创建一个通用类。

  2. 在条件之后的页面类中创建一个通用方法,如果该元素存在,则输入值。

+0

我更喜欢继承部分。但是我有一个问题。假设有25个团队(将来会有更多团队),我最终会为每个恐惧组编写25个子类;)。我在想如果我们可以为特定页面动态地提供元素定位器。 – 2014-12-27 20:47:08

+0

我不知道如何提供动态值元素定位器是可能的。但我增加了另一种解决方案。 – Sighil 2014-12-27 21:00:41

0

如果你理解了页面对象模型的概念,那么这个问题将更加清晰。是的,继承是一个很重要的因素。我建议你阅读this来看看一个真正的页面对象模型应该如何工作。而且,#3问题的解决方案与UI映射一样简单。类似

@FindBy(how = How.NAME, using = "q") 
private WebElement searchBox; 

对于每个元素或类似的实现。

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

+0

我同意你说,当实例化页面对象时,它不应该依赖于用户,但我想我可能还需要在我的fillform函数中检查它是否显示元素,否则我将得到元素未找到异常元素为一个用户而不是另一个用户。 – 2014-12-30 22:04:52

+0

你完全错过了我的观点!假设用户'manager'应该看到'filedA'和'fieldB',用户'employee'只能看到'fieldA'。你仍然需要映射'filedA'和'filedB'。如果您以管理员身份登录并使用这两个字段,您将不会收到任何以'employee'身份登录的异常,如果您尝试访问'filedA',您将会得到例外。您在这里不需要任何额外的支票。 – Saifur 2014-12-30 23:50:33

相关问题