![](/img/trans.png)
[英]About Karate UI Test Automation, How can I upload files when I use karate-chrome?
[英]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.