我有一个简单的问题。我相信我们中的很多人可能会遇到同样的情况。我正在使用页面对象模式。以下是我沿着导航进行的步骤。selenium页面出厂处理不同用户对同一页面的不同元素对于不同的用户
- 以一种类型的用户身份登录我的应用程序。
- 点击链接进入表格页面。
- 在形式页面上,填充字段和提交
- 注销
在3)的形式的对象页面显示了一些不同的输入字段取决于用户,这我需要与之交互的类型。那么我如何在同一个页面对象中处理它呢?有没有人进入相同的情况,并找到了一些体面的方式来做到这一点?
我有一个简单的问题。我相信我们中的很多人可能会遇到同样的情况。我正在使用页面对象模式。以下是我沿着导航进行的步骤。selenium页面出厂处理不同用户对同一页面的不同元素对于不同的用户
在3)的形式的对象页面显示了一些不同的输入字段取决于用户,这我需要与之交互的类型。那么我如何在同一个页面对象中处理它呢?有没有人进入相同的情况,并找到了一些体面的方式来做到这一点?
我知道这一个简单的自动化脚本,我们应该使用所有OOPS概念,但我仍然会用下面去不是一个Java项目:
创建包含公共WebElements和方法父页面类。
使用特定于该客户的元素和方法创建子类。
在测试中,传递一个指定客户类型的参数并调用相应的子类。
如果你不想要任何这种继承的东西,你也可以尝试以下。
为所有类型的客户创建一个包含元素的页面类。
创建通用方法,可以接受参数customerType并执行操作,如果customerType == 1执行这些操作,否则执行这些操作。
假设某个特定客户的所有领域都是强制性的,我脑海中浮现的另一个解决方案如下。
为所有元素创建一个通用类。
在条件之后的页面类中创建一个通用方法,如果该元素存在,则输入值。
我更喜欢继承部分。但是我有一个问题。假设有25个团队(将来会有更多团队),我最终会为每个恐惧组编写25个子类;)。我在想如果我们可以为特定页面动态地提供元素定位器。 – 2014-12-27 20:47:08
我不知道如何提供动态值元素定位器是可能的。但我增加了另一种解决方案。 – Sighil 2014-12-27 21:00:41
如果你理解了页面对象模型的概念,那么这个问题将更加清晰。是的,继承是一个很重要的因素。我建议你阅读this来看看一个真正的页面对象模型应该如何工作。而且,#3问题的解决方案与UI映射一样简单。类似
@FindBy(how = How.NAME, using = "q")
private WebElement searchBox;
对于每个元素或类似的实现。
对于完整的页面对象,您应该映射所有不依赖于用户的所有elements
。原因是,每次调用该类时,它都将被实例化,并且所有映射的元素也将被实例化。没有必要动态加载元素如果页面上没有使用或隐藏任何元素,那么这些元素将可用并且您将不会使用它们
我同意你说,当实例化页面对象时,它不应该依赖于用户,但我想我可能还需要在我的fillform函数中检查它是否显示元素,否则我将得到元素未找到异常元素为一个用户而不是另一个用户。 – 2014-12-30 22:04:52
你完全错过了我的观点!假设用户'manager'应该看到'filedA'和'fieldB',用户'employee'只能看到'fieldA'。你仍然需要映射'filedA'和'filedB'。如果您以管理员身份登录并使用这两个字段,您将不会收到任何以'employee'身份登录的异常,如果您尝试访问'filedA',您将会得到例外。您在这里不需要任何额外的支票。 – Saifur 2014-12-30 23:50:33
会有一些类型的客户,对不对?例如,金牌特权,银牌特权,铜牌......等等。 – Sighil 2014-12-27 18:34:03
是的,用户(或客户)属于区分它们的不同组。 – 2014-12-27 20:03:49