首先,空手道用户界面自动化是一个非常棒的工具。我很喜欢用空手道编写UI测试。我遇到一种情况,在这种情况下,我试图获取shadowRoot元素。我很少读到与空手道的javascript执行者有关的类似文章,并且知道它已经被回答了。建议使用driver.eval。但是在空手道0.9.5中没有Karate,它有script()或scriptAll()。我已经读过几次文档,想知道如何在元素中获取元素,但没有运气。使用传统的selenium+java,我们可以以这种方式获取shadowRoot :类似于驻留在父元素(如div或body )中的shadowRoot。
//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);所以我在空手道用户界面上尝试了下面的方法
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.我敢打赌有一种方法可以使用空手道UI来获得这个shadowRoot元素,但是我几乎没有选择了,并且无法理解这一点。有人能帮我查一下这个吗?
-San
发布于 2020-03-10 13:03:02
您能否切换到XPath,看看这是否有帮助:
* def temp = script('//downloads-manager', '_.innerHTML')否则,请以这种格式提交一个示例,以便我们可以调试:https://github.com/intuit/karate/tree/develop/examples/ui-test
编辑:在您在评论中发布了指向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,并且需要知道调用.shadowRoot的哪个HTML元素。
编辑:关于空手道中JS的其他示例:https://stackoverflow.com/a/60800181/143475
https://stackoverflow.com/questions/60616495
复制相似问题