繁体   English   中英

我如何在 Karate UI 中使用 javascript executor

[英]How do i use javascript executor in Karate UI

首先,Karate UI 自动化是非常棒的工具。 在使用 Karate 编写 UI 测试时,我有点享受它。 我遇到了一种情况,我试图获取 shadowRoot 元素。 我阅读了一些与空手道 javascript executor 相关的类似帖子,并了解到它已经得到了回答。 推荐使用driver.eval。 但是在 Karate 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 元素,但我有点用完了选项,无法弄清楚这一点。 有人可以看看这个并帮助我吗?

-San

您能否切换到 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM