javascript - Karate UI 中的 ShadowRoot dom 元素访问问题

标签 javascript html user-interface karate shadow-dom

我正在尝试访问 ShadowRoot dom 树元素,但我面临的问题是我无法使用特定的 html 元素来调用 .ShadowRoot,因为该元素是动态的(请参见下面的 html 片段 id="vaadin-text-field -error-0)。所以我唯一能做的就是访问上一级的 .vaadin-text-field-container 类。基本上,下面是 html 代码片段,它返回“错误消息 = 最多 255 个字符“并且在我的 KarateUI 测试中,我试图断言该错误消息。到目前为止,我根据之前阅读的论坛查询尝试了以下选项,但不幸的是,我永远无法访问返回文本“最多 255 个字符”的正确元素做断言:

尝试 1:

  * def test = script('.vaadin-text-field-container', '_.innerHTML')
  * print "Error Message is" + test

输出:

evaluation (js) failed: script('.vaadin-text-field-container', '_.innerHTML'), js eval failed twice:(function(){ var fun = function(_){ return _.innerHTML }; var e = document.querySelector(".vaadin-text-field-container"); return fun(e) })(), error: {"type":"object","subtype":"error","className":"TypeError","description":"TypeError: Cannot read property 'innerHTML' of null\n    at fun (<anonymous>:1:46)\n    at <anonymous>:1:130\n    at <anonymous>:1:139","objectId":"{\"injectedScriptId\":3,\"id\":3}"}

尝试 2:

  * def test = script('//*[@id="vaadin-text-field-error-0"]', '_.innerHTML')
  * print 'Error Message is :' + test

输出:

evaluation (js) failed: script('//*[@id="vaadin-text-field-error-0"]', '_.innerHTML'), js eval failed twice:(function(){ var fun = function(_){ return _.innerHTML }; var e = document.evaluate("//*[@id="vaadin-text-field-error-0"]", document, null, 9, null).singleNodeValue; return fun(e) })(), error: {"type":"object","subtype":"error","className":"SyntaxError","description":"SyntaxError: missing ) after argument list","objectId":"{\"injectedScriptId\":3,\"id\":3}"}

尝试 3:

* match text('#vaadin-text-field-error-0') == '255 characters max'

输出:

evaluation (js) failed: text('#vaadin-text-field-error-0'), js eval failed twice:document.querySelector("#vaadin-text-field-error-0")['textContent'], error: {"type":"object","subtype":"error","className":"TypeError","description":"TypeError: Cannot read property 'textContent' of null\n    at <anonymous>:1:53","objectId":"{\"injectedScriptId\":3,\"id\":3}"}

此处为 HTML 代码片段:

<vaadin-text-field class="standardformfield" id="runsetup" tabindex="0" required has-label has-helper has-value invalid has-error-message>
#shadow-root (open)
<div class="vaadin-text-field-container">

      <label part="label" id="vaadin-text-field-label-0">Run Name</label>

      <div part="input-field" id="vaadin-text-field-input-0">

        <slot name="prefix"></slot>

        <slot name="input">
          <input part="value" tabindex="0" aria-labelledby="vaadin-text-field-label-0 vaadin-text-field-input-0" placeholder="Type here..." required="" aria-describedby="vaadin-text-field-helper-0 vaadin-text-field-error-0" invalid="" aria-invalid="true">
        </slot>

        <div part="clear-button" id="clearButton" role="button" aria-label="Clear" hidden="true"></div>
        <slot name="suffix"></slot>

      </div>

      <div part="helper-text" id="vaadin-text-field-helper-0">
        <slot name="helper">No special characters, 255 characters max</slot>
      </div>

      <div part="error-message" aria-live="assertive" aria-hidden="false" id="vaadin-text-field-error-0">255 characters max</div>

    </div>

</vaadin-text-field>

有人可以调查一下并指出我在这里做错了什么吗? 谢谢, 桑迪

最佳答案

如果此答案没有回答您的问题:https://stackoverflow.com/a/61742555/143475

请遵循此过程,以便我们可以在将来(以通用方式)添加对此的支持:https://github.com/intuit/karate/tree/develop/examples/ui-test

对于其中一些事情,我们确实需要社区帮助,请考虑一下。

关于javascript - Karate UI 中的 ShadowRoot dom 元素访问问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64723119/

相关文章:

javascript - JS 对象结构化和添加

javascript - 如何正确清除Interval

javascript - 静态 html 中图像之间的空间在 javascript 中消失

javascript - 通过脚本弹出widget

javascript - 乘法 (a)(b) 函数可能吗?

javascript - jVectorMap 无法检索 map 对象

javascript - 关于 JavaScript 和垂直多级导航栏的问题

Java Swing - JLabel 位置

java - 如何从具有 GridBagLayout 布局的 JPanel 中获取位于特定 gridx、gridy 中的组件?

javascript - 在 React 中使用 Axios 下载图像?