首页 > 解决方案 > 空手道 UI 对 afterScenario 钩子中的错误进行截图

问题描述

我有一个 UI 测试,我想在 UI 测试失败时捕获屏幕截图。我已经探索了 driver.screenshot() 功能,并且每当我想在测试期间截取屏幕截图时它都能正常工作。但是我只想在测试失败时捕获屏幕截图。

我查看了 afterScenario 钩子中提到的解决方案:

空手道 UI 独立 - 是否可以在失败报告中附加屏幕截图?

但是,这需要 INFO.errorMessage 出现在日志文件中。

这是我们在我的 karate.log 文件中看到的示例,我找不到在 INFO.errorMessage 下登录的错误。结构略有不同:

09:49:22.192 [ForkJoinPool-1-worker-3] DEBUG c.intuit.karate.driver.DriverOptions - >> {"method":"Runtime.evaluate","params":{"expression":"document.evaluate(\"\/\/div[@role='option']\", document, null, 9, null).singleNodeValue.click()","returnByValue":true},"id":361}
09:49:22.200 [nioEventLoopGroup-2-1] DEBUG c.intuit.karate.driver.DriverOptions - << {"id":361,"result":{"result":{"type":"object","subtype":"error","className":"TypeError","description":"TypeError: Cannot read property 'click' of null\n    at <anonymous>:1:84","objectId":"{\"injectedScriptId\":2,\"id\":3}"},"exceptionDetails":{"exceptionId":2,"text":"Uncaught","lineNumber":0,"columnNumber":83,"scriptId":"19","stackTrace":{"callFrames":[{"functionName":"","scriptId":"19","url":"","lineNumber":0,"columnNumber":83}]},"exception":{"type":"object","subtype":"error","className":"TypeError","description":"TypeError: Cannot read property 'click' of null\n    at <anonymous>:1:84","objectId":"{\"injectedScriptId\":2,\"id\":4}"}}}}
09:49:22.201 [nioEventLoopGroup-2-1] WARN  c.intuit.karate.driver.DriverOptions - devtools error: [id: 361, result: [type: MAP, value: {type=object, subtype=error, className=TypeError, description=TypeError: Cannot read property 'click' of null
    at <anonymous>:1:84, objectId={"injectedScriptId":2,"id":3}}]]
09:49:22.202 [ForkJoinPool-1-worker-3] ERROR c.intuit.karate.driver.DriverOptions - js eval failed twice:document.evaluate("//div[@role='option']", document, null, 9, null).singleNodeValue.click(), error: {"type":"object","subtype":"error","className":"TypeError","description":"TypeError: Cannot read property 'click' of null\n    at <anonymous>:1:84","objectId":"{\"injectedScriptId\":2,\"id\":3}"}
**09:49:22.207 [ForkJoinPool-1-worker-3] ERROR com.intuit.karate - feature call failed: classpath:AMUI/EndToEndTests/CreateAgreement.feature
arg: {"shared_agrname":"TEST_57059","local_agrname":"TEST_57059","agr_type":"CSA"}
CreateAgreement.feature:76 - evaluation (js) failed: click("//div[@role='option']"), java.lang.RuntimeException: js eval failed twice:document.evaluate("//div[@role='option']", document, null, 9, null).singleNodeValue.click(), error: {"type":"object","subtype":"error","className":"TypeError","description":"TypeError: Cannot read property 'click' of null\n    at <anonymous>:1:84","objectId":"{\"injectedScriptId\":2,\"id\":3}"}
stack trace: com.intuit.karate.driver.DevToolsDriver.eval(DevToolsDriver.java:300)**
09:49:22.596 [pool-1-thread-1] INFO  com.intuit.karate.Runner - <<fail>> feature 41 of 42: classpath:AMUI/EndToEndTests/CSA.feature

看了上面,我修改了 afterScenario 钩子:

 * configure afterScenario = function(){ if (karate.ERROR.arg) driver.screenshot() }

但这无济于事。它不截取屏幕截图。

这里的任何建议都会非常有帮助。

这也是日志文件中的预期吗?没有在 info.errorMessage 结构下捕获 UI 错误?到目前为止,在我的测试中,我还没有看到在这个结构中捕获到任何错误。框架是以这种方式捕获它还是由被测应用程序负责?

标签: karate

解决方案


karate.info.errorMessage与日志级别无关,请阅读示例:hooks.info


推荐阅读