当前位置: 首页 > 知识库问答 >
问题:

Selenium-页面对象模型vs定义公共静态最终

郝乐心
2023-03-14

在Selenium中,我们可以将对象存储库维护为页面对象模型。但是我们可以通过将变量定义为publicstaticfinal来维护或通过一个单独的类,并在需要时在其他类中使用。

对于例如。

package ObjectRepository;

public class OR_SFStandard 
{ 
   public static final String NewBtn = "//a[@title='New']";
}

并在代码中使用与

package common;
import ObjectRepository;

public class Deal 
{
    public void newDeal(WebDriver driver)
    {
    driver.findElement(By.xpath(ObjectRepository.NewBtn)).click();
    }
}

有人能帮我理解区别吗?什么是更好的方法?

共有2个答案

燕正卿
2023-03-14

我想说,这是偏好的问题。我喜欢将所有相关数据放在一个POP类中。Others更愿意使用与这些文件不同的文件。

有些人可能认为,存储库允许他们重用跨不同页面共享的元素,从而限制了重复。但事实并非如此。如果您必须在POM之间共享元素,这意味着您以错误的方式实现了它。即使涉及到页脚、菜单等元素。

在这种情况下,您应该考虑特征对象模式,并在那里实现所有操作。

田焕
2023-03-14

根据你的问题,根据我的经验,我使用了这两种方法。我建议使用POM的标准实践。POM的主要特点是易于维护。

你在页面对象上有定位器,这样你就可以在页面上看到它们,并在任何问题的情况下进行修复。公共定位器是基本页对象的一部分,因此您可以在基本页对象上获取所有公共定位器。

如果OR管理在单独的类那么

假设您有200个测试用例,40-50个页面对象,并且您将所有定位器(比如500个)都保存在一个类中,那么管理和调试以修复该问题将非常困难。这也会造成混乱。

 类似资料:
  • 我已经看过很多带有页面对象模型的示例Selenium框架,它们通常显示: 如果内容(方法,web元素)在页面对象类中是静态的,并且它们被暴露在驱动程序类的实例中,那么它看起来像: 我看不到通过创建页面对象类的实例得到了什么。后一种方法看起来更干净,它消除了测试中的大量噪音,并且更容易培训缺乏编程技能的无经验自动化测试人员。 在使用后一种方法时是否有任何固有的缺点?我想不出有什么办法,但似乎没有任何

  • 问题内容: 我一直想知道Java中的单例。按照惯例,单例设置如下: 最近,我切换到使用以下内容: 由于没有空检查,因此它更短,更快捷,而且打字对我来说比打字好。有什么理由不能使第二种方法成为主流呢? 问题答案: 第一个版本在第一次实际需要时创建实例,而第二个版本(较短的版本)在初始化类后立即运行构造函数 类或接口类型T将在以下任何一种首次出现之前立即初始化: T是一个类,并创建T的实例。 T是一个

  • 我从0开始开发我的项目已经1年了。我的框架和测试已经达到了一定的“维护”水平。然而,每天我都在怀疑我是否在我的项目中使用了良好的实践。如果有经验的人能回答我的几个问题就好了。我主要对页面对象模式和页面工厂有疑问。 简要说明: 我的项目是一个基于一页的应用程序,用C#,angular编写。js,javascript。驱动程序是一个静态实例,它有很多额外的方法(在下面的代码中,我只展示了2)。每个页面

  • 我们如何等待IWebElement(重新)连接到DOM?我的场景是这样的,我从dropdown1中选择一个值,然后单击dropdown2上的数据绑定。所以当我的测试像从Dd1中选择“foo”,然后从Dd2中选择“bar”- 但是我真的不想把定位器字符串(“foo”)带到我的测试逻辑中,因为它似乎破坏了使用页面对象模型的意义。使用页面对象模型时,我已经有了IWebElement实例 那么,您知道隐式

  • 问题内容: 和之间有什么区别? 例如 : 要么 问题答案: 尽管您 确实 希望遵守约定,但在功能上没有什么区别(字节码将 完全相同 ),请访问JLS-8.3.1。场修饰符: __ 这将是奇怪的,看.. 我也建议您访问checkstyle。 编辑: 从同一页面链接到该部分: http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls

  • 在Java页面对象模型中创建步骤时实例化对象的最佳方法是什么? 有人知道Cucumber脚本是如何编译的吗? 我想,如果一切都建成并符合要求,下面的第二个或第三个选项可能是最好的方法。 如果只编译与正在执行的测试相关的步骤,那么我想这将是第一个。 我举了以下例子: 以上所有步骤(在同一个LoginSteps.java类中加上更多)从以下开始 这是最好的方法,还是创建单个实例更好? 或者在Login