ste*_*eel 6 rspec capybara poltergeist
我有一个模式,当它的覆盖 div 被点击时关闭。覆盖层延伸到整个页面,但在模态本身之下。我想在我的测试中关闭这个模态,当点击覆盖时它关闭很重要。
# modal, simplified
<div class="modal-container" id="modal">
<div class="overlay"></div>
<div class="content">Content</div>
</div>
Run Code Online (Sandbox Code Playgroud)
当模态关闭时,其样式标签显示为“display: none”
# modal, closed
<div class="modal-container" id="modal" style="display:none;">
<div class="overlay"></div>
<div class="content">Content</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我无法在 Capybara 中关闭此模式。我试过了:
1. page.execute_script("$('.overlay').trigger('click')")
2. page.evaluate_script("$('.overlay').trigger('click')")
3. find('.overlay').trigger('click')
4. page.driver.click(10, 10)
Run Code Online (Sandbox Code Playgroud)
当我在浏览器控制台中运行选项 1 和 2 时,它们都有效,但在我的测试中无效。
当我在我的测试中撬时,我发现:
find('.overlay')
=> #<Capybara::Element tag="div">
page.has_content?("modal content")
=> true
find('.overlay').trigger('click')
=> "click"
find('.overlay')
Capybara::ElementNotFound: Unable to find css ".overlay"
page.has_content?("modal content")
=> true
Run Code Online (Sandbox Code Playgroud)
睡眠也没有帮助:
sleep(3)
page.evaluate_script("$('.overlay').trigger('click')")
sleep(3)
display = page.execute_script("document.getElementById('modal').style.display")
expect( display ).to eq("none")
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?
RSpec 2、水豚、Poltergeist 1.5.1
小智 3
最可能的问题是,当您在 pry 中手动执行此操作时,您的速度足够慢,以至于在您单击叠加层的单击事件时已添加它,因此它会导致模式消失。您的测试可能执行得足够快,以至于在添加单击事件之前就已经单击了覆盖层。
您要么需要sleep(n)在单击之前添加显式内容(不是最佳解决方案),要么找到某种方法以编程方式确定页面何时准备好单击叠加层。