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
感谢彼得的支持。
我之前发布了以下问题,该问题已通过将 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
感谢彼得的支持。