gpt4 book ai didi

ruby-on-rails - Capybara 无法找到带有文本的隐藏元素

转载 作者:行者123 更新时间:2023-12-04 05:54:11 25 4
gpt4 key购买 nike

在我的应用程序中,我有一个页面会弹出一个模式,该页面将更新其中的一些内容并在不确定的时间后自行关闭(并变得不可见)。在我的规范中,我试图等到模式解除。我的策略是让 Capybara 等待模态上的内容变得不可见

expect(page).to have_css('.hidden-element', visible: :hidden, text: 'Hidden Content')

但是,看起来 Capybara 将无法获取隐藏元素的文本,并且我收到错误消息:
expected to find css ".hidden-element" with text "Hidden Content" but there were no matches. Also found "", which matched the selector but not all filters.

如果我这样做会通过 :allfalse ,但这不是我想要的:

expect(page).to have_css('.hidden-element', visible: :all, text: 'Hidden Content')

鉴于我无法更改我的应用程序,我想知道为什么这不起作用,或者在这种情况下实现这一目标的最佳方法是什么。谢谢!

我正在使用 RSpec、Capybara、Capybara-webkit。

最佳答案

如果元素实际上在页面上变得不可见,而不是从页面中完全删除,则主要区别在于,当可见时,文本与应用了 CSS(文本转换等)的可见文本相匹配。因此,如果 HTML 中的元素文本实际上是“隐藏内容”但具有 text-transform: capitalize在可见时应用于它,您需要在检查不可见元素时针对 HTML 表单进行测试

expect(page).to have_css('.hidden-element', visible: :hidden, text: 'hidden content')

另一方面,如果 HTML 中的文本与您显示的一样,并且该元素实际上已从页面中删除(而不仅仅是隐藏),您可以执行以下操作
expect(page).not_to have_css('.hidden-element', visible: :hidden, text: 'Hidden Content')

等待它被删除。

更新:使用 visible: :hidden 时,Capybara < 2.11.0 存在限制文本无法匹配的选项。你可以通过做类似的事情来解决它
element = page.find('.hidden-element', visible: :all, text: 'hidden content')
expect(element).to match_css('.hidden-element', visible: :hidden)

关于ruby-on-rails - Capybara 无法找到带有文本的隐藏元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40580605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com