Hyperlink Watir Gem Locate Legend role=";按钮“;

Hyperlink Watir Gem Locate Legend role=";按钮“;,hyperlink,legend,watir,Hyperlink,Legend,Watir,我似乎无法通过Watir找到页面上的链接,该链接显示另外两个字段。但是,链接不是链接,而是一个li,它是一个图例: <li> <legend role="button" tabindex="1" id="alpha-trigger" class="trigger legend shown " aria-label="alpha Search"" for="

我似乎无法通过
Watir
找到页面上的
链接,该链接显示另外两个
字段。但是,链接不是链接,而是一个
li
,它是一个
图例

<li> 
  <legend role="button" tabindex="1" id="alpha-trigger" class="trigger legend shown " aria-label="alpha Search"" for="alpha">
    Alpha Search
  </legend>
</li>

  • 问题是该元素位于阴影DOM中,它在Selenium/Watir中还没有支持。此时,最快的解决方案似乎是通过JavaScript执行所有内容

    例如,单击婚姻链接:

    browser.execute_script('return document
      .querySelector("fs-search-form")
      .shadowRoot
      .querySelector("[group-id=event]")
      .shadowRoot
      .querySelector("#marriage-trigger")
      .click();')
    

    请注意,您需要显式导航到包含shadowdom的元素,并调用
    shadowRoot
    进入内部。

    您尝试了什么,出现了什么错误?我最初的猜测是尝试
    browser.legend(id:'alpha trigger')。单击@JustinKo尝试了各种类型,其中一种就是这样。我得到的错误要么是因为找不到而超时,要么是找不到(
    .exist?
    )…exists方法不会等待。它会检查并立即返回真或假。它不会等待元素出现。我有
    。等待(&:present?)。存在?
    和各种其他试验。在这个问题上,我总是得到
    false
    timeout
    identifier
    已关闭,我无法确定它是什么。啊,指向页面的链接帮助很大。元素位于阴影DOM中,Watir对此没有太多支持。之前有一个关于与阴影DOM交互的问题/答案,您可以尝试-好的,这完成了选择,但是新显示的字段不可选择<代码>浏览器。元素(id:“婚姻触发器”)。是否存在?=>false
    。此解决方案不会改变Watir是否可以与元素交互。shadowdom中的任何元素(包括id为“marriation trigger”的元素)都需要使用JavaScript.com与之交互。我会继续寻找更好的解决方案,但至少这会给你一个继续前进的选择。