karate - 我如何在空手道 UI 中使用 javascript 执行器
问题描述
首先,空手道 UI 自动化是非常棒的工具。在使用空手道编写 UI 测试时,我有点享受它。我遇到了一种情况,我试图获取 shadowRoot 元素。我阅读了一些与 javascript executor with karate 相关的类似帖子,并了解到它已经得到了回答。建议使用 driver.eval。但在空手道 0.9.5 中没有 eval,它有 script() 或 scriptAll()。我已经阅读了几次文档来弄清楚如何在元素中获取元素,但没有运气。使用传统的 selenium+java,我们可以像这样获取 shadowRoot:像 shadowRoot 这样的东西,它位于像 div 或 body 这样的父元素内。
//downloads-manager is the tagname and under that downloads-manager, a shadowRoot element exists
The HTML looks like this. it is from chrome://downloads.
<downloads-manager>
#shadow-root(open)
</download-manager>
WebElement downloadManager =driver.findElement(By.tagName("downloads-manager");
WebElement shadowRoot= (WebElement)((JavaScriptExecutor)driver)
.executeScript("return arguments[0].shadowRoot",downloadManager);
所以我在空手道 UI 中尝试了以下操作
script("downloads-manager","return _.shadowRoot"); //js injection error
script('downloads-manager', "function(e){ return e.shadowRoot;}"); // same injection error as mentioned above.
def shadowRoot = locate("downloads-manager").script("function(e){return e.shadowRoot};"); //returns an empty string.
我敢打赌,有一种方法可以使用 Karate UI 获取此 shadowRoot 元素,但我有点用完了选项,无法弄清楚这一点。有人可以调查一下并帮助我吗?
-桑
解决方案
你可以切换到 XPath 看看是否有帮助:
* def temp = script('//downloads-manager', '_.innerHTML')
否则请以这种格式提交样本,以便我们进行调试:https ://github.com/intuit/karate/tree/develop/examples/ui-test
编辑:在您在评论中发布该视频群聊示例的链接后,我想出了可行的 JS:
* driver 'http://html5-demos.appspot.com/hangouts'
* waitFor('#hangouts')
* def heading = script('hangout-module', "_.shadowRoot.querySelector('h1').textContent")
* match heading == 'Paul Irish'
需要反复试验和摆弄 DevTools 控制台才能解决这个问题。所以好消息是它是可能的,你可以使用任何你需要的 JS,而且你确实需要知道调用哪个HTML 元素.shadowRoot
。
编辑:对于空手道中 JS 的其他示例:https ://stackoverflow.com/a/60800181/143475
推荐阅读
- ruby-on-rails - 如何分离开发和生产sidekiq工人
- c - 带有条件的循环中的scanf()不起作用
- wordpress - 当 the_content 正常工作时,为什么过滤器 the_title 不起作用?
- node.js - 如何从猫鼬模型中的数组中删除对象
- javascript - Swiper js,将 currentTime 重置为 0 幻灯片的视频
- android - 构建失败并出现异常 java.io.IOException: Permission denied
- python-3.x - Python 输出未按顺序重定向
- c++ - 在另一个类中使用 operator<<
- swift - 当我将数组作为参数时,SwiftUI 视图有时会创建线程 1:EXC_BAD_ACCESS (code=1, address=0x6002005b8368)
- angular - 无法读取未定义的属性“emailVerified”