当前位置: 首页 > 知识库问答 >
问题:

Capybara/selenium/chrome:test仅在调用save_screenshot时通过

戴嘉珍
2023-03-14

我正在从恶作剧者迁移到无头铬的过程中。

group :test do
  # Capybara - Headless, JavaScript-executing browser for Selenium
  gem 'selenium-webdriver'  # Selenium webdriver (needed to use Chrome driver)
  gem 'webdrivers', '~> 4.0', require: false # Run Selenium tests more easily with automatic installation and updates for all supported webdrivers.
  gem 'capybara-screenshot' # Automatically save screen shots when a scenario fails
  ...
end
Capybara.javascript_driver = :selenium_chrome_headless
it 'shows the fullscreen toggler on focus', js: true do
  visit new_user_path
  page.execute_script("$('#user_about').focus()")
  expect(page).to have_css '.textarea-fullscreenizer-toggler'
end
expected to find visible css ".textarea-fullscreenizer-toggler" within #<Capybara::Node::Element tag="div" path="/HTML/BODY[1]/MAIN[1]/DIV[1]/DIV[1]/FORM[1]/FIELDSET[1]/DIV[1]/DIV[1]/DIV[5]"> but there were no matches. Also found "", which matched the selector but not all filters. 

有趣的是,当在聚焦元素后放置save_screenshot时,规范也通过了无头铬!

我在这里能做什么?我在正确的轨道上?我应该尝试https://github.com/twalpole/appariation驱动程序吗?

共有1个答案

党浩阔
2023-03-14

您也可以在helper capybara.rb文件中为headless chrome尝试类似的方法。

require "selenium/webdriver"

Capybara.register_driver :chrome do |app|
  Capybara::Selenium::Driver.new(app, browser: :chrome)
end

Capybara.register_driver :headless_chrome do |app|
  capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
    chromeOptions: { args: %w(headless disable-gpu) }
  )

  Capybara::Selenium::Driver.new app,
    browser: :chrome,
    desired_capabilities: capabilities
end

Capybara.javascript_driver = :headless_chrome

这对我有效。可能对你也有用。

 类似资料:
  • 问题内容: 我有一个设计为在禁用JavaScript时仍能正常运行的应用程序,因此我想编写一些涵盖这些情况的规范。 我将Selenium(Firefox)与Capybara一起使用,并且正在注册一个禁用JavaScript的新驱动程序(通过Selenium的属性) 功能规格实际上无法禁用JavaScript。在测试过程中弹出浏览器窗口并用暂停时,我可以肯定地单击我知道需要JavaScript的项目

  • 我有一个hello world测试Lambda,配置为: 触发器:API网关 目的地:亚马逊SQS。一个队列表示成功,另一个队列表示失败 当我通过CLI调用Lambda时,消息会按预期排队到成功队列中: 但是,当我通过API网关调用Lambda时,没有消息排队到任何一个目标队列。我启用了Lambda代理集成。Cloudwatch指标确认调用成功(调用计数上升,错误计数不上升)。以下从我的Lambd

  • 我有一个具有多个视图类型的viewholder。 滚动时,只有当更改值时,才会调用onBindViewHolder。这会导致我的列表项无法正确更新。 这是虫子吗?或者我做错了什么。从新的类来看,这似乎是非常奇怪的行为。 这是我的适配器: 我还提取了如下内容: 对于部分 它对第一个可见行运行良好,但随后失败。

  • 问题内容: 我有一个这样的测试用例: 由于某些原因,即使我在页面的源中查看时,水豚也找不到svg标签,但该标签在那里(并且在视觉上)。 在执行以下操作后,我才能够找到SVG标签: (请注意,svg在“图层” ID中)。 有人有什么想法吗?我使用Selenium作为驱动程序。 问题答案: 事实证明,这是Firefox内置的xpath评估程序存在的问题。 使用FireBug,我能够验证Selenium

  • 问题内容: 通常,我在端口3000上使用Rails开发服务器。 水豚/黄瓜使用。如果我从默认驱动程序交换到selenium,则看起来它尝试在端口80上进行连接。 我想了解: 使用selenium时,是否需要在测试环境中单独实例化测试服务器。 如果上述问题的答案是肯定的,那么我该如何做才能在Web驱动程序之间无缝切换而不必不断进行更改? 如果有人举了一个env.rb配置示例,可以帮助您,请告诉我!

  • 我是胡克斯的新手,遇到了一些让我追自己尾巴的案例。 希望有人能解释或提供对我有意义的解决方案: > 下面这个线程:如何调用加载函数与反应使用效果只有一次 我试着在没有依赖性的情况下使用useEffect,eslint不喜欢这样,他们建议添加一个“跳过下一行”,这似乎有点骇人: