0

我想知道一些关于将选择器提取为常量的最佳实践。作为一般规则,通常建议将幻数和字符串文字提取到常量中,以便它们可以重用,但我不确定这在处理 Capybara 中的选择器时是否真的是一个好方法。

目前,我有一个名为“selectors.rb”的文件,其中包含我使用的选择器。这是其中的一部分:

SELECTORS = {
   checkout: {
        checkbox_agreement: 'input#agreement-1',
        input_billing_city: 'input#billing\:city',
        input_billing_company: 'input#billing\:company',
        input_billing_country: 'input#billing\:country_id',
        input_billing_firstname: 'input#billing\:firstname',
        input_billing_lastname: 'input#billing\:lastname',
        input_billing_postcode: 'input#billing\:postcode',
        input_billing_region: 'input#billing\:region_id',
        input_billing_street1: 'input#billing\:street1',
    ....
}

理论上,我把我的选择器放在这个文件中,然后我可以做这样的事情:

find(SELECTORS[:checkout][:input_billing_city]).click

这有几个问题:

  • 如果我想知道使用的选择器,我必须查找它
  • 如果我在 selectors.rb 中更改名称,我可能会忘记在文件中的其他位置更改它,这将导致find(nil).click
  • 对于上面的示例,我不能将此选择器与 一起使用fill_in(SELECTORS[:checkout][:input_billing_city]),因为它需要 ID、名称或标签

可能还有一些问题,所以我正在考虑摆脱常量。有没有人在类似的地方?有什么好的方法来处理这种情况?

4

1 回答 1

0

有人向我提到了 SitePrism gem:https ://github.com/natritmeyer/site_prism

Capybara 的页面对象模型 DSL

SitePrism 为您提供了一个简单、干净和语义化的 DSL,用于使用页面对象模型模式来描述您的站点,以便在自动验收测试中与 Capybara 一起使用。

这在这方面非常有帮助,我已经相应地调整了我的代码。

于 2013-08-16T10:25:55.230 回答