如何通过 webkit 使 JS 与通过 chromedriver 一样工作?

How to make JS via webkit work the same as via chromedriver?

有一个 JS 代码可以通过 chromedriver 正常工作但不能通过 webkit 工作。

我发现以下 JS 无法通过 webkit 工作,因为对象的键包含数字

  var contactData = $selectedContact[0].dataset;
  # contactData object structure
  # {descriptionLine-1: "",descriptionLine-2: "", name: "", phone: ""}

然而,它在 chromedriver 中工作正常。

我试过的配置:

Capybara.javascript_driver = :webkit # the code above does not work with webkit
  # rails_helper.rb
  require "selenium/webdriver"

  Capybara.register_driver :chrome do |app|
    options = Selenium::WebDriver::Chrome::Options.new(args: %w[no-sandbox headless disable-dev-shm-usage])

    Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
  end

  Capybara.javascript_driver = :chrome

如何使对象键包含数字的 JS 与 webkit 一起工作?

如果 "via webkit" 你的意思是使用 capybara-webkit- https://github.com/thoughtbot/capybara-webkit - 水豚驱动程序,那么答案很可能是你不能。 capybara-webkit 驱动程序基于几年前停止开发的 QtWebkit。最近发布的QtWebkit稳定版基本相当于7-8年前的Safari,所以不支持很多更新的JS/CSS。您可以填充一些缺失的东西,并且可以确保将所有 JS 都转换为 ES5,但它仍然不会 100% 复制现代浏览器。再加上 capybara-webkit 项目已弃用并将在接下来的几周内存档,这意味着是时候转向更新的驱动程序了。

既然你已经在使用 headless chrome 通过 selenium,你就不能把所有的测试都移到它上面吗?如果不是因为您需要 whitelist/blacklist 或其他 capybara-webkit 扩展,那么您应该查看一种较新的基于 CDP 的驱动程序,例如 Apparition,尽管它们仍处于 alpha/beta 稳定状态那一刻。