首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要使用Capybara/RSpec计算字符串中的电子邮件数量

需要使用Capybara/RSpec计算字符串中的电子邮件数量
EN

Stack Overflow用户
提问于 2018-01-31 06:54:31
回答 1查看 241关注 0票数 0

所以我有一个应用程序,其中包含多个条目,这些条目是逗号分隔的电子邮件字符串。字符串位于文本区域元素中,可以在其中进行修改。应用程序使用JavaScript来修改这些字符串,我需要使用Capybara来观察验证目标字符串是否包含正确数量的电子邮件。为了说明我的意思,这里是my Cucumber (假设目标列表以5个电子邮件字符串开头):

代码语言:javascript
复制
When I remove the 3rd email under list one
Then I should see 4 emails under list one
When I click the "Cancel" button for list one
Then I should see 5 emails under list one

我可以很容易地用Capybara抓取字符串,如下所示:

代码语言:javascript
复制
expect(page).to have_css(".css-selectors textarea")

但我不知道从那里该做什么。我需要能够断言,字符串中的电子邮件数量实际上正在更改为所需的数量。我需要拆分字符串并计算电子邮件的数量,以查看它们是否与目标数量匹配,但我尝试的所有操作都会导致竞争条件,Capybara会在JS完成更新之前检查该值。我已经研究过将过滤器块传递给have_css调用,但我找不到关于它如何工作的文档,或者这是否是正确的策略。所以我在这里没有想法了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-31 08:17:58

因为所有的电子邮件都在一个元素中,所以你倾向于使用过滤器块是完全正确的。过滤器块接收与初始选择器匹配的每个元素,并需要返回它是否与您希望执行的任何额外过滤匹配(true/false)。因此,要检查元素是否有一个包含4个逗号分隔项的字符串(值不是文本,因为它是一个表单字段),应该是这样的

代码语言:javascript
复制
expect(page).to have_css(".css-selectors textarea"){ |ta|
  ta.value.split(',').size == 4
}

这将使用水豚等待/重试行为,同时还执行额外的步骤,检查元素文本中以逗号分隔的匹配数量的项目,从而绕过竞争条件。

也可以使用字段选择器的with选项的正则表达式来执行检查,如下所示

代码语言:javascript
复制
expect(page).to have_field(type: 'textarea', with: /^[^,]+,[^,]+,[^,]+,[^,]+$/)

或fillable_field选择器

代码语言:javascript
复制
expect(page).to have_selector(:fillable_field, type: 'textarea', with: /^[^,]+,[^,]+,[^,]+,[^,]+$/)

这些方法目前并不适用于.css-selectors元素,但您可以使用within或链式查找来实现。您还可以通过传递元素的id/name/label文本来确保元素是唯一的。显然,如果您想要实际验证文本字符串是电子邮件等,那么可以使正则表达式变得更加复杂。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48531816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档