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

selenium页面工厂为不同用户处理同一页面的不同元素,selenium,pageobjects,Selenium,Pageobjects,我有一个简单的问题。我相信我们中的许多人可能也遇到过同样的情况。我使用的是页面对象模式。下面是我在导航过程中执行的步骤 作为一种类型的用户登录到我的应用程序。 点击一些链接进入表单页面。 在表单页面上,填写字段并提交 注销 在3上,表单对象页面根据需要与之交互的用户类型显示一些不同的输入字段。那么我如何在同一个页面对象中处理它呢。有没有人遇到过同样的情况,并且找到了一些体面的方法 我知道这是一个简单的自动化脚本,不是一个我们应该使用所有oops概念的Java项目,但我仍然会使用以下内容: 创建包

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

作为一种类型的用户登录到我的应用程序。 点击一些链接进入表单页面。 在表单页面上,填写字段并提交 注销
在3上,表单对象页面根据需要与之交互的用户类型显示一些不同的输入字段。那么我如何在同一个页面对象中处理它呢。有没有人遇到过同样的情况,并且找到了一些体面的方法

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

创建包含常用WebElements和方法的父页面类

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

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

如果你不想要这些继承的东西,你也可以试试下面的方法

为所有类型的客户创建包含元素的页面类

创建泛型方法,该方法可以接受参数customerType并执行类似于如果customerType==1则执行这些操作,否则执行这些操作

我想到的另一个解决方案是,假设特定客户的所有字段都是必填字段,如下所示

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

在page类中创建一个符合条件的泛型方法,如果存在此元素,则输入value


如果您理解页面对象模型的概念,那么这个问题对您来说就会更清楚。是的,继承在这里是一个重要因素。我建议您通读一遍,看看真正的页面对象模型应该如何工作。而且,这3个问题的解决方案和UI映射一样简单。差不多

@FindBy(how = How.NAME, using = "q")
private WebElement searchBox;
对于每个元素或类似的实现


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

会有一些类型的客户,对吗?例如,黄金特权、白银特权、青铜特权。。。。等等。是的,用户或客户属于不同的群体,这使他们有所不同。我更喜欢继承部分。但我有个问题。假设将来有25个或更多的小组,我会为每个我害怕的小组写25个子类;。我在想我们是否可以为那个特定的页面动态地提供元素定位器。我不知道如何为元素定位器提供动态值。但是我添加了另一个解决方案。我同意你的观点,当实例化页面对象时,它不应该依赖于用户,但我认为如果元素是否显示,我可能仍然需要在我的fillform函数中检查它,否则,对于一个用户而不是另一个用户的元素,我将得到元素未找到异常。你完全没有领会我的意思!假设用户经理应该看到filedA和fieldB,而用户员工应该只看到fieldA。您仍然需要映射filedA和filedB。如果您以经理身份登录并使用这两个字段,您将不会得到任何异常,其中以员工身份登录如果您尝试访问filedA,您将得到异常。在这里你不需要额外的支票。