karate - 空手道 UI 对 afterScenario 钩子中的错误进行截图
问题描述
我有一个 UI 测试,我想在 UI 测试失败时捕获屏幕截图。我已经探索了 driver.screenshot() 功能,并且每当我想在测试期间截取屏幕截图时它都能正常工作。但是我只想在测试失败时捕获屏幕截图。
我查看了 afterScenario 钩子中提到的解决方案:
但是,这需要 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.info.errorMessage
与日志级别无关,请阅读示例:hooks.info
推荐阅读
- python - 阅读浏览器图像并单击而不使用硒?
- r - DT R Shiny - 添加标题边框
- c# - C# 嵌套属性
- c - 语句 `int val = (++i > ++j) 吗?++i : ++j;` 调用未定义的行为?
- objective-c - NSCollectionView visibleRect 属性
- java - 为什么ArrayList有clone方法
- postgresql - PostgreSQL - 如何将 Base64 图像字符串插入 BYTEA 列?
- c - 将相同的字符串存储在两种不同的结构类型中
- c# - C# 我需要在单独的线程上读取标准输出吗?
- java - 包 javafx.util 不存在