Rspec与capybara面临的问题与page.should have_content

 阿拉伯恶劣我_295 发布于 2023-02-13 11:50

我是Rspec的新手,在这里我试图测试一个集成测试.当我(使用Capybara)单击按钮时,页面内容将被替换为后期响应.现在我正在检查页面内容,它出现在页面上,但我的测试仍然失败.以下是规格

it "get force check takeover1" do
    visit('/las_xml')
    select('Showroom', :from => 'urlVal')
    fill_in('fpHeaderForce', :with => 'PSD.L.Syn')
    fill_in('currentDate', :with => '2013-09-11')
    click_button('submit')
    page.should have_content('Buy 2013 Labor Law Posters')
end

但结果是,

1) las box get force check takeover1
   Failure/Error: page.should have_content('Test page')
   expected #has_content?("Buy 2013 Labor Law Posters") to return true, got false
   # ./integration/las_box_spec.rb:19:in `block (2 levels) in '

和结果响应html包含,


kik.. 6

可能的原因

如果您确实测试了html页面,因为结果摘录似乎显示,可能有以下几种可能性:

    您尝试测试的文本不是实际的.仔细检查那里没有拼写错误,如果是多语言网站你使用相同的语言环境

    包含文本的元素可能被隐藏.如果内容不可见,Capybara将不会认为该内容存在

    之前的点击按钮可能根本不起作用或可能导致其他页面

分离问题的方法

由于失败只是真正问题的症状,我们可以使用调试功能处理所有问题:

page.save_screenshot( filename ) :将屏幕截图保存到给定的文件名(例如,'shot.png')

save_and_open_page :在浏览器中打开可检查的html页面

binding.pry:来自prygem,总是对检查上下文有用

有关通过poltergeist创建屏幕截图的示例,请参阅此内容.

编辑:动态页面问题

正如评论中所提到的,问题似乎与javascript内容编辑有关.

你仍然应该使用前面提到的调试来确保隔离你的问题.完成后,您可以使用capybara的#synchronize方法等待您的内容:

page.document.synchronize( 10 ) do
  result = page.evaluate_script %($(':contains("Post")').length)
  raise Capybara::ElementNotFound unless result > 0
end

只要包含块引发Capybara::ElementNotFound异常(没有捕获任何其他异常),同步方法将重试10秒.所以基本上,在这里,我们检查(使用jQuery)是否在页面中存在"Post"内容,并重试直到它或直到十秒过去.

如果找不到元素,则测试将通过引发未捕获的异常而失败.

如果找到元素,您现在可以继续进行常规测试.这允许在规格中添加时序条件.

1 个回答
  • 可能的原因

    如果您确实测试了html页面,因为结果摘录似乎显示,可能有以下几种可能性:

      您尝试测试的文本不是实际的.仔细检查那里没有拼写错误,如果是多语言网站你使用相同的语言环境

      包含文本的元素可能被隐藏.如果内容不可见,Capybara将不会认为该内容存在

      之前的点击按钮可能根本不起作用或可能导致其他页面

    分离问题的方法

    由于失败只是真正问题的症状,我们可以使用调试功能处理所有问题:

    page.save_screenshot( filename ) :将屏幕截图保存到给定的文件名(例如,'shot.png')

    save_and_open_page :在浏览器中打开可检查的html页面

    binding.pry:来自prygem,总是对检查上下文有用

    有关通过poltergeist创建屏幕截图的示例,请参阅此内容.

    编辑:动态页面问题

    正如评论中所提到的,问题似乎与javascript内容编辑有关.

    你仍然应该使用前面提到的调试来确保隔离你的问题.完成后,您可以使用capybara的#synchronize方法等待您的内容:

    page.document.synchronize( 10 ) do
      result = page.evaluate_script %($(':contains("Post")').length)
      raise Capybara::ElementNotFound unless result > 0
    end
    

    只要包含块引发Capybara::ElementNotFound异常(没有捕获任何其他异常),同步方法将重试10秒.所以基本上,在这里,我们检查(使用jQuery)是否在页面中存在"Post"内容,并重试直到它或直到十秒过去.

    如果找不到元素,则测试将通过引发未捕获的异常而失败.

    如果找到元素,您现在可以继续进行常规测试.这允许在规格中添加时序条件.

    2023-02-13 11:55 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有