【问题标题】:Browse during test run在测试运行期间浏览
【发布时间】:2018-03-22 10:12:59
【问题描述】:

我在一个标准的 Cucumber/Capybara 驱动的 Rails 应用程序中使用 Webkit/Chromedriver。

效果很好,当场景在非无头模式下运行时,我可以看到浏览器在做什么。

能够在场景的特定点点击“驱动”镶边对我有很大帮助。为了咯咯笑,我在某个步骤中插入了byebug。此时,byebug 控制台打开,Cucumber/Capybara 明显停止,chrome 坐等我退出 byebug 控制台。

如果我然后单击 chrome 窗口,它会无限期挂起。原因很清楚 => 此时,chrome 向我的被测应用程序发出了一个请求,因为它位于byebug,所以它无法处理该请求。

我必须做些什么才能完成这项工作(如果可能的话)?我熟悉所有这些工作原理的架构(在正常操作中,当 Capybara 或 Webkit 驱动我的 chrome 时)。但是在场景中的某个点停下来并在自己周围单击会非常好,因为这样我可以节省大量时间手动设置测试数据(包括浏览器会话和所有这些)。请注意,byebug 对我来说并不重要,如果我可以在一个步骤中执行一些解决方案,这会使 Cucumber 无限期地等待并将控制权交给我,那就足够了。

【问题讨论】:

  • 我经常这样做,诀窍是把 byebug 或 pry 放在测试中。当执行停止时,只有测试进程被阻塞,您可以像往常一样与网站交互,入口点是current_url
  • @phoet:有趣的是,我似乎确实记得它曾经也对我有用,但在过去的几天里,每当我尝试你(和我自己在问题中)描述的内容时,它不再起作用了。
  • 每当新版本的 byebug(及其依赖库)发布时,此问题就会不断出现。它通常归结为运行应用程序的线程在 byebug(或 pry)中断测试时暂停。您可以尝试回滚到以前版本的 byebug 和/或在 byebug 提示符处列出线程并恢复运行应用程序的线程。

标签: ruby-on-rails-4 cucumber capybara selenium-chromedriver


【解决方案1】:

尝试在 byebug 控制台上调用 sleep 10

浏览器只能由一个进程“驱动”,调用 sleep 会释放 chromedriver 对浏览器的控制(在睡眠期间),因此您可以使用 Web Inspector 或单击元素。

【讨论】:

  • 这行得通。 github.com/deivid-rodriguez/byebug/issues/193 可能是描述问题根源的一个问题(从 2016 年到 2017 年,时断时续)。我猜它挂在等待用户输入的阻塞 I/O 系统调用中。如果他们切换到基于IO.select 的I/O 或其他任何东西,中间有小的sleep 调用,而不是他们正在使用的readline 调用,可能会有所帮助。 OTOH,如果readline 能自己做这件事就好了……
  • 这不是“释放 chromedrivers 抓地力”(实际上它与 chromedriver 无关)只是当您在 byebug 中调用 sleep 时,它会取消暂停所有线程 byebug 暂停期间睡眠,从而重新启用正在运行被测应用程序的线程,以便可以处理请求。
  • @ThomasWalpole 考虑到你是谁,你当然应该比我更了解。我只是觉得这个问题与 Chrome 远程调试协议的 this behaviour 有关,并且草率地解释了链接的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多