【问题标题】:How to write Spock tests that share the browser sessions如何编写共享浏览器会话的 Spock 测试
【发布时间】:2013-10-25 09:34:04
【问题描述】:

我试图使用 Spock(Grails 应用程序)自动化一些功能测试,但我无法弄清楚如何自动化以下操作: 我需要能够登录到一个 Web 应用程序并单击一个链接(从 Web 应用程序)并打开一个新的浏览器窗口并登录到第二个应用程序(因为他们共享用户凭据 - 他们使用 SSO)。我需要测试的所有功能都在第二个网络应用程序上,并且没有直接登录到该应用程序。

我想知道是否有办法在网络应用程序之间使用当前浏览器会话(并共享 cookie)。

我会很感激任何想法。

找到答案

我设法找到了我的查询的答案。正如下面我的 cmets 中提到的,我使用 withNewWindow() 方法如下:

withNewWindow({ AnchorForNewPage.click()}){ 断言在(新页面) 做一点事 和别的东西 } 确保您在第二页上执行的所有操作都在此闭包内,否则测试将失败。

【问题讨论】:

  • 使用geb 进行功能测试。
  • 我之前的所有测试都参考了 Geb,但找不到此查询的答案。我正在尝试使用下面的webdriver的方法,让我们看看它是怎么回事:pageWillChange(Browser browser, Page oldPage, Page newPage) --- interface PageChangeListener
  • 任何人都可以对此有所了解。 Geb 仍然没有运气..

标签: grails spock geb


【解决方案1】:

让我引用Book of Geb

geb.spock.GebSpec 类将清除 cleanup() 中的 cookie 方法,除非规范是@Stepwise,在这种情况下它们被清除 cleanupSpec() (意味着逐步规范中的所有特征方法 共享相同的浏览器状态)。

不确定它是否适用于两个网络应用程序之间的 SSO 和会话共享,但您可以尝试一下。只需将需要共享会话的测试步骤作为 fixture 方法保留在单个 Specification 类中。

【讨论】:

  • 感谢您的回答。真的很感激。我设法使用了 Geb 的“withNewWindow(Closure windowOpeningBlock, Closure block)”方法,效果很好。但现在努力将注意力集中在那个窗口中以继续我的功能测试。由于某种原因,焦点返回到第一个窗口并且测试失败。
  • 我已经设法找到我上面查询的答案。如上所述,我使用 withNewWindow() 方法如下: withNewWindow({ AnchorForNewPage.click()}){ assert at(NewPage) do some and something else } 确保您在第二页执行的操作都在这个闭包内,否则测试将失败。
  • 很高兴听到这个消息。您最初的问题是关于在浏览器之间共享会话。我是否清楚我的回答与问题相符?如果是,您可以考虑将答案标记为已接受。
猜你喜欢
  • 2023-03-06
  • 2017-12-31
  • 2021-01-02
  • 1970-01-01
  • 2011-07-18
  • 2015-10-05
  • 1970-01-01
  • 1970-01-01
  • 2013-12-18
相关资源
最近更新 更多