【问题标题】:Watir get INNER html of <span>Watir 获取 <span> 的 INNER html
【发布时间】:2014-08-11 09:40:19
【问题描述】:

我正在尝试通过使用类“menu-item-text”迭代少数跨度来找到导航链接。我的目标是比较 span 标签内的内容,看看它是否是正确的导航控件来点击(没有硬 id 可以通过。)我的代码是这样的:

navlinks = @browser.spans(:class, 'menu-item')
navlinks.each do |this|
    puts "'#{this.text}'"
    if this.text == link_name
        this.click
    break
end

我确定我得到了正确的元素。但是,文本始终是一个空字符串。我的第二个想法是使用 .html 而不是 .text,但这会返回如下内容:

<span class="menu-item">Insights</span>

我想要的是 span 内的“Insights”文本,而不是包含标签标记的完整 html。我也尝试过使用 this.span.text,但也没有用。

如何通过 watir 的内容抓取方法专门针对元素的内部 html?

谢谢!

【问题讨论】:

  • 这些导航跨度(链接)是否是一种下拉菜单,它们仅在某些条件下可见(例如,鼠标悬停在父项上)? .text 方法只返回可见文本。鉴于它返回一个空字符串表明该元素实际上是不可见的。
  • 大部分是——它们是标题导航控件的一部分。大约有十几个,其中三个在我要离开的页面上不可见,但遍历它们中的任何一个都会返回 .text 的空字符串。
  • 这是相当出乎意料的。您是否有机会共享页面或足够的 html 来重现问题?

标签: html ruby cucumber watir


【解决方案1】:

假设您使用的是 Watir-Webdriver v0.6.9 或更高版本,则添加了 inner_html 方法来获取内部 HTML。

对于跨度:

<span class="menu-item">Insights</span>

你可以这样做:

@browser.span(:class => 'menu-item').inner_html
#=> "Insights"

同样,您可以尝试在循环中使用此方法,而不是 .text

请注意,根据文本的唯一性,您可以简单地检查文本是否出现在元素的(外部)html 中:

@browser.spans(:class => 'menu-item', :html => /#{link_name}/).click

【讨论】:

  • 谢谢,这就是我想要的。我以为我以前曾尝试过,但也许我正在调用 .innerHtml 而不是 .inner_html 。我应该记得 Ruby 使用的命名系统与我习惯的不同。
猜你喜欢
  • 2021-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-19
相关资源
最近更新 更多