Chrome 空手道 1.0.1 的驱动程序没有获得框架树

Chrome Driver with Karate 1.0.1 does not get frame tree

我之前发布了以下问题,该问题已通过将 Karate 升级到 0.9.6 得到解决。

现在,当我升级到 Karate 1.0.1 时,以前在 0.9.6 中工作的代码不再工作。 我检查了下面 link 的文档,它没有改变。

https://intuit.github.io/karate/examples/ui-test/#devtools-protocol-tips

当 运行 下面的代码我没有得到我期望的 frameTree 时,即使驱动程序输出显示我想要的 frameTree:

  Scenario: Get Frame Tree
    * driver 'https://google.com'
    * def frame = driver.send({ method: 'Page.getFrameTree' })
    * print frame

这是实际输出:

17:01:26.738 [main] DEBUG c.intuit.karate.driver.DriverOptions - >> {"id":7,"method":"Page.getFrameTree"}

17:01:26.749 [nioEventLoopGroup-2-1] DEBUG c.intuit.karate.driver.DriverOptions - << {"id":7,"result":{"frameTree":{"frame":{"id":"EF7B9A896E378D2847F3A5FD6647353E","loaderId":"74EA753CFFDB150AE371D4CC442E0B8C","url":"https://www.google.com/","domainAndRegistry":"google.com","securityOrigin":"https://www.google.com","mimeType":"text/html","adFrameType":"none","secureContextType":"Secure","crossOriginIsolatedContextType":"NotIsolated","gatedAPIFeatures":["SharedArrayBuffersTransferAllowed"]}}}}

17:01:26.750 [main] INFO com.intuit.karate - [print] { "id": 7, "method": null }

这是 1.0.x 的错误吗?我尝试了 1.0.1RC5,我看到了相同的行为。

更新以下评论:

我会看一下,但第一遍我什至不知道我在看什么 :) 这就是我所做的,它可能有效但不受支持。我需要从无法解析的页面获取 URL。

Scenario: GetUnreachableURL
    * string frameTree = driver.send(karate.toMap({ method: 'Page.getFrameTree' }))
    * print frameTree
    # headless chrome doesn't return chrome-error on unreachableUrls
    * def unreachableUrl = driver.url == 'chrome-error://chromewebdata/' ?  karate.extract(frameTree, 'unreachableUrl=(.+?)(?=,|})', 1) : driver.url

这可能需要你贡献代码和帮助,听起来你在做我们不支持的事情。

Chrome 通信在此提交中被重构:https://github.com/intuit/karate/commit/9600031f17d7a81509368d6da36c24de3e945e36

为了使 iframe 正常工作,有一个全局变量集,它适用于发送到 Chrome 的所有消息,也许不考虑 send() 命令。我可以请求你贡献吗?我们有一个易于遵循的开发人员指南:https://github.com/intuit/karate/wiki/Developer-Guide

只是想更新这个问题,这确实是一个错误并已在 1.1.0 中修复。

https://github.com/intuit/karate/issues/1690

感谢彼得的支持。