Karate 如何在空手道UI中使用javascript executor

Karate 如何在空手道UI中使用javascript executor,karate,Karate,首先,空手道UI自动化是一个非常棒的工具。我喜欢用空手道编写UI测试。我遇到了这样一种情况:在中,我试图获取shadowRoot元素。我读过几篇类似的文章,都是关于JavaScriptExecutor和空手道的,我知道这已经得到了回答。建议使用driver.eval。但是在空手道0.9.5中没有eval,它有script()或scriptAll()。我已经阅读了几次文档,以了解如何在元素中获取元素,但运气不佳。 使用传统的selenium+java,我们可以通过以下方式获取shadowRoot:

首先,空手道UI自动化是一个非常棒的工具。我喜欢用空手道编写UI测试。我遇到了这样一种情况:在中,我试图获取shadowRoot元素。我读过几篇类似的文章,都是关于JavaScriptExecutor和空手道的,我知道这已经得到了回答。建议使用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获得这个shadowRoot元素,但我已经没有选择了,无法解决这个问题。 有人能帮我调查一下吗


-San

您能否切换到XPath,看看这是否有帮助:

* def temp = script('//downloads-manager', '_.innerHTML')
否则,请提交此格式的示例,以便我们进行调试:

编辑:在您在评论中发布了链接到该hangouts示例后,我发现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的其他示例:

您能否切换到XPath,看看这是否有帮助:

* def temp = script('//downloads-manager', '_.innerHTML')
否则,请提交此格式的示例,以便我们进行调试:

编辑:在您在评论中发布了链接到该hangouts示例后,我发现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的其他示例:

我不是在寻找html,但需要在这个下载管理器中包含一个子项,它是shadowRoot。所以当我尝试使用xpath时,我得到了一个空字符串def shadowRoot=script('//downloads manager',“\ux.shadowRoot”);`它给了我一个空字符串。有shadowRoot元素的示例页面是chrome下载页面,即chrome://downloads 谢谢@sanm-如果可以的话,我真的想要一个HTML示例,例如,一旦你得到了影子根-现在怎么办。你确定它在硒中有效吗。也许你应该试试其他的JS。您可以打开一个问题,如果没有样本,我们可能需要等待其他人来帮助;)下面是一个包含阴影根元素的HTML页面示例。在这个演示页面中,我想在已经打开的聊天窗口中获取标题。。标题上写着“保罗·爱尔兰”。标题html标记是:
Paul Irish
要通过JS获取此内容,请转到该元素,右键单击该元素并复制->复制JS路径<代码>文档.querySelector(“#hangouts>hangout module”).shadowRoot.querySelector(“hangout header>h1”)。我甚至在空手道用户界面中尝试过上面的js路径,但是没有帮助。不过我会就此提出一个问题。再次感谢您的关注。我不是在寻找html,但需要在这个下载管理器中有一个孩子,这是一个shadowRoot。所以当我尝试使用xpath时,我得到了一个空字符串def shadowRoot=script('//downloads manager',“\ux.shadowRoot”);`它给了我一个空字符串。有shadowRoot元素的示例页面是chrome下载页面,即chrome://downloads 谢谢@sanm-如果可以的话,我真的想要一个HTML示例,例如,一旦你得到了影子根-现在怎么办。你确定它在硒中有效吗。也许你应该试试其他的JS。您可以打开一个问题,如果没有样本,我们可能需要等待其他人来帮助;)下面是一个包含阴影根元素的HTML页面示例。在这个演示页面中,我想在已经打开的聊天窗口中获取标题。。标题上写着“保罗·爱尔兰”。标题html标记是:
Paul Irish
要通过JS获取此内容,请转到该元素,右键单击该元素并复制->复制JS路径<代码>文档.querySelector(“#hangouts>hangout module”).shadowRoot.querySelector(“hangout header>h1”)。我甚至在空手道用户界面中尝试过上面的js路径,但是没有帮助。不过我会就此提出一个问题。再次感谢您调查此事。