如何确认Ruby中的部分文本行

时间:2014-07-07 09:31:50

标签: ruby-on-rails ruby csv selenium

我正在编写测试以确认csv文件已经点击了我的下载文件夹。由于csv文件的标题设置为包含下载的日期和时间,因此不断更改我的功能中文件的名称是不切实际的。示例文件名:fleet_123456_20140707_103015.csv

我可以在我的ruby代码中包含一些只会确认" fleet_123456"是否存在,因为它是每次下载时出现的名称的唯一通用部分?

目前我有:

Then /^I should get a download with the filename "(.*?)"$/ do |file_name|
  page.response_headers['Content-Disposition'].should include("filename=\"#{file_name}\"")
    end

我认为"#{file_name}\"")需要tweeking,只是不确定在哪里。

任何帮助都会很棒,谢谢

1 个答案:

答案 0 :(得分:1)

你问:

  

我可以在我的ruby代码中包含一些只会确认“fleet_123456”存在的内容,因为它是每次下载时出现的名称的唯一通用部分吗?

是的,你可以。一种方法是用基于正则表达式的匹配器替换包含匹配器。例如,而不是

page.response_headers['Content-Disposition'].should include("filename=\"#{file_name}\"")
你可以写

page.response_headers['Content-Disposition'].should match(/filename="fleet_[\d_]+.csv"/)

,它将匹配“fleet_123456”,后跟数字和下划线的任意组合,后跟“.csv”。另一种可能性,如果你想更具体一点,是

page.response_headers['Content-Disposition'].should match(/filename="fleet_123456_\d+_\d+.csv"/)

匹配由下划线分隔的数字组的特定排列。您可以在Ruby here中阅读有关正则表达式的内容,并使用它们here