水豚:我应该摆脱提取的常数还是保留它们?

时间:2013-08-01 11:27:28

标签: cucumber capybara constants

我想知道有关将选择器提取到常量的一些最佳实践。作为一般规则,通常建议将幻数和字符串文字提取到常量,以便可以重复使用,但我不确定在处理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,名称或标签

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

1 个答案:

答案 0 :(得分:0)

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

  

Capybara的页面对象模型DSL

     

SitePrism为您提供了一个简单,干净和语义的DSL来描述   您的网站使用Page Object Model模式,与Capybara一起使用   在自动验收测试中。

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