存储定位器的最佳方式



我正在遵循Selenium自动化的页面对象设计模式,我可以猜测许多人将定位器存储在.properties文件中并在代码中访问它们。将定位器放在单独的位置似乎很棒。

由于我没有参与任何关于Selenium自动化的大项目,我想知道以下想法,以便我可以避免将来可能出现的问题:

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

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

    b) 如果有帮助,如果采取哪些预防措施使工作更容易?

  2. 与属性文件相比,将定位器存储在页面类本身中是最佳方法吗?
我认为将

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

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

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

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

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

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

有两种基本方法:

1) 使用 FindBy 注释

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

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

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

我完全同意@Saifur和@MasterSlave。

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

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

我正在研究类似的策略,我需要决定哪种定位器策略是最好的。存储定位器的最佳位置是什么。

对于代码/属性文件,我有以下缺点:

  • 更改单个定位器的值非常耗时
  • 代码中具有过时的定位器/元素
  • 使代码体积庞大
  • 使用不同的定位器在预生产和生产环境中运行测试,导致分支的创建和代码的重复。

但是,我更倾向于将定位器存储在单独的数据库中,并通过仪表板启用其使用。我也觉得这对您的自动化框架的设置方式非常主观。对于具有 1000 多个测试的大型框架,将它们分开更有意义。

最新更新