【问题标题】:Watir Gem Locate Legend role="button"Watir 宝石 Locate Legend role="button"
【发布时间】:2020-11-11 12:39:22
【问题描述】:

我似乎无法让Watir 在页面上找到link,这会显示另外两个fields。但是,链接不是链接,而是li,即legend

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

我尝试使用.exists? 并寻找dom object,但我总是空着。我发现这不是时间问题,因为我没有将headless 用于chrome

谁能推荐我如何看到这个.click的链接呢?干杯

【问题讨论】:

  • 您尝试了什么,遇到了什么错误?我最初的猜测是尝试browser.legend(id: 'alpha-trigger').click
  • @JustinKo 尝试了各种类型,其中一种就是这样。我得到的错误要么是因为找不到而超时,要么是找不到(.exist?)。
  • .exists 方法不会等待。它检查并立即返回真或假。它不会等待元素出现。
  • 我有.wait_until(&amp;:present?).exists? 和其他各种试验。我总是得到falsetimeoutidentifier 已关闭,我无法弄清楚它是什么。
  • 啊,页面链接很有帮助。该元素位于 shadow DOM 中,Watir 没有太多支持。之前有一个关于与影子 DOM 交互的问题/答案,您可以尝试 - stackoverflow.com/a/47541701/1200545

标签: hyperlink legend watir


【解决方案1】:

问题在于该元素位于影子 DOM 中,Selenium/Watir 尚不支持该影子 DOM。此时,最快的解决方案似乎是通过 JavaScript 执行所有操作。

例如,点击婚姻链接:

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

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

【讨论】:

  • 好的,选择了,但是新显示的字段不可选择。 browser.element(id: "marriage-trigger").exists? ==&gt; false.
  • 此解决方案不会更改 Watir 是否可以与元素交互。 shadow DOM 中的任何元素(即包括 id 为“marriage-trigger”的元素)都需要使用 JavaScript 进行交互。
  • 不幸的是。我会继续寻找更好的解决方案,但至少这会给你一个继续前进的选择。
猜你喜欢
  • 1970-01-01
  • 2023-03-27
  • 2019-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多