代码之家  ›  专栏  ›  技术社区  ›  user2490003

capybara webkit是否识别javascript的array.includes()方法?

  •  2
  • user2490003  · 技术社区  · 6 年前

    在我的Rails应用程序前端,我使用的是JavaScript Array.includes 方法如下

    if (['a', 'b', 'c'].includes('b')) {
      // do stuff
    

    它在一个活动的Chrome浏览器中工作正常,但是我的rspec测试失败了。我相信Capybara Webkit似乎不支持它?

    我可以通过暂停规范来确认 binding.pry 和跑步

    > page.evaluate_script("['a', 'b', 'c'].includes('b')")
    => nil
    

    它回来了 nil 什么时候回来 true .

    出于好奇,我在另一个Rails应用程序上尝试了同样的方法,奇迹般的是,它在那个应用程序上运行。

    > page.evaluate_script("['a', 'b', 'c'].includes('b')")
    => true
    

    所以我在挠头为什么它在一个应用程序上有效,而不是在另一个应用程序上?

    • 应用程序1(失败)

      • 水豚 2.18.0
      • Capybara网络工具包 1.15.0
    • 应用程序2(成功)

      • 水豚 2.13.0
      • Capybara网络工具包 1.14.0

    事实上,第一个失败的应用程序似乎有一个更新版本的capybara/webkit。

    谢谢!

    1 回复  |  直到 6 年前
        1
  •  1
  •   Thomas Walpole    6 年前

    capybara-webkit 获取基于其所构建的qtwebkit版本的JS支持。qtwebkit的最后一个稳定版本支持ES5(和大多数ES5.1),基本上相当于6-7年前的Safari版本。

    自从 Array.prototype.includes() 在ES2015之前没有包含在JS标准中,它不受本地支持 Capybara网络工具包 . 但是,您可以添加对 includes 通过Polyfill,我猜这就是你的应用程序中的内容。

    为了 Capybara网络工具包 要在现代应用程序中发挥作用,您需要确保应用程序中使用的所有JS都被发送到ES5和polyfilled(使用babel等)。如果您的应用程序要求不包括旧的/过时的浏览器,则无头测试的更好解决方案是通过Capybaras Selenium驱动程序使用无头Chrome或Firefox,因为这些组合支持现代JS和CSS。

    推荐文章