簡體   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