存储定位器的最佳方式

Best way to store locators

我正在遵循 Selenium 自动化的页面对象设计模式,我猜想很多人将定位器存储在 .properties 文件中并在代码中访问它们。将定位器放在不同的地方似乎很棒。

因为我没有从事任何Selenium自动化的大项目,我想知道以下想法,以避免将来可能出现的问题:

  1. 在大型项目(测试用例超过 1000 个左右)中将定位器存储在属性文件中是否有用?

    a) 如果在大项目中没有帮助,那么我们不将定位器存储在属性文件中的困难是什么?

    b) 如果有帮助,采取哪些预防措施可以使工作更轻松?

  2. 与属性文件相比,在页面 class 中存储定位器本身是最好的方法吗?

我认为将文件存储在页面 class 本身中。从属性文件加载会产生额外的开销或解析大文件。维护这样的文件也将更加困难,即使有良好的工具支持,您也将被迫更多地使用 CTRL + F。

即使在更概念化的层面上也感觉不对。非常适合存储在属性文件中的是可配置参数,尤其是那些适合在运行时进行调整的参数。

定位器没有这种性质。如果您寻求的好处是在中央位置声明,您应该改用专用常量 class,这将为您提供更好的重构选项。

我绝对同意@Master Slave。 selenium 的主要目的是使 UI 测试更容易。将 locators 存储在 property 文件中是很麻烦的,额外的开销加上重构的噩梦。 PageObject 流行的主要原因之一是因为它能够以非常直观的方式映射元素

@FindBy(name="q")
private WebElement searchField;

@FindBy(name="btnG")
private WebElement searchButton;

它不仅更具可读性,而且在重构和调试时也更容易。而且,当页面出现问题或更改时,有一个 KNOWN 地方,您可以去更改并且知道它在哪里!

有两种基本方法:

1) 使用 FindBy 注解

@FindBy(xpath = "//*[@class = 'Whosebug']")
private WebElement question;

2) 在方法结构中使用By / WebElement class

By Whosebug = By.xpath("//*[@class = 'Whosebug']");
WebElement WhosebugElement = getDriver().findElement(Whosebug);

我完全同意@Saifur 和@MasterSlave 的观点。

我同意具有一个 运行 环境的小型项目。假设我们让项目在测试和生产等两个环境中运行。假设在测试中更改了定位器,那么如果您想更改在这两种情况下都能正常工作的代码,您应该转到分支。如果定位器放在 属性 文件中,您只需更改文件属于环境。

我不反对以任何格式存储定位器——属性、INI、XML 或 xls,只要每个文件很小且易于管理即可。 我认为,当我们谈论 1000 个或更多的测试用例时,对于仅使用一次的全局变量 [如 URL、端口号、用户名、密码、电子邮件 ],应存储在单独的 global_variables 文件。每个页面的定位符可以存储在单独的文件中。如果为每一页维护一个文件,那么定位器是可管理的。页面将只导入需要的文件。 很明显,这种方法创建的属性文件数量与页数一样多。这可以通过为相关模块或功能页面创建单个文件来改善。无论如何,作为用户,我们需要在较少但庞大的定位器文件或更多但较小的可管理定位器文件之间取得平衡。