【问题标题】:How to retrieve values from a rect html tag using watir如何使用 watir 从 rect html 标签中检索值
【发布时间】:2015-06-03 15:28:23
【问题描述】:

有什么方法可以使用 Watir 从 rect 标签中检索值。我可以给出一个示例 URL。页面下部有矩形条。请找到它

http://www.healthgrades.com/hospital-directory/california-ca-los-angeles/good-samaritan-hospital-hgste2618d46050471?#Readmission

我已经看到了几个来源,但我没有任何方法可以获取这些详细信息。有人可以帮我吗?

【问题讨论】:

  • 欢迎来到 Stack Overflow。 不要把一个页面的链接作为你想要的例子。链接腐烂并变得毫无价值,使您的问题对于未来寻找类似答案的人来说毫无价值。相反,只提取您询问的 HTML 源并将其插入到您的问题中,并为可读性而格式化。这样,即使链接断开,重要信息也始终可见。此外,您需要向我们展示您为解决此问题所做的努力。
  • 无论此链接中的具体示例如何,此问题都具有价值。对于任何使用 SVG 元素的页面,答案都是相同的:w3.org/TR/SVG/shapes.html。 html 本身不存在于源代码中,因此它不是一个简单的复制/粘贴。
  • 嗨,提图斯,我要说同样的话。 @theTinMan 我需要人们准确地感受页面才能给出明确的答案,这就是我在那里提供链接的原因。
  • 想象一下没有链接的问题。这有意义吗?这就是为什么我们需要嵌入问题中的信息。删除除演示问题所需的最简单的 HTML 之外的所有内容。如果您没有花费至少等量的时间来整理问题,那么您就不能真正期望人们会花费大量时间来帮助您。而且,要求他们搜索链接以查找您应该在问题中提供的信息只会减少您获得帮助的机会。你必须帮助我们帮助你。

标签: ruby watir watir-webdriver


【解决方案1】:

是的,您可以将其作为通用元素访问(仅作为示例,不适用于您的代码)。您要查找的数据元素是 highcharts-data-labels。

values = browser.element(:css => "g.highcharts-data-labels")

您还可以使用 xpath 选择器访问该元素,并且可以通过检查元素并请求 xpath 选择器在 Chrome 中获取它

//*[@id="highcharts-2"]/svg/g[4]/g[2]/text

祝你好运!

【讨论】:

  • 我在 watir 项目中提出了一个关于直接添加支持的问题。老实说,我不确定这是否是一个好主意,但我们会看看它是否会成为未来的版本:github.com/watir/watir-webdriver/issues/332
  • @titusfortner 谢谢,我会在那里跟进它的进展。
  • @jeff:我的目的是获取栏上可用的值,而不仅仅是访问元素。
【解决方案2】:

您可以使用 xpaths 来选择所需的矩形。您提供的链接上的每个矩形都有一个唯一的 xpath。你的代码可能是这样的:

browser.element(:xpath, "//*[@id='highcharts-0']/svg/g[7]/g/rect[1]").flash 

【讨论】:

    【解决方案3】:

    您可以通过@jeff-price 指出的两种方式之一访问该元素,或者您可以扩展 watir 以添加对标签的支持。

    默认情况下不包括在内,因为这些东西不是 HTML5 标准的一部分。基本上相当于这样的“自定义”标签,当然有无限数量的潜在自定义标签。不可能为所有这些都添加支持。

    OTOH,您可以很容易地在您的项目中包含一个小的 sn-p 代码,这将添加对 watir 标记的支持,如果您知道您的项目经常使用它,那么这非常有意义。

    # extend watir to allow support for custom elements not expressly defined in HTML spec
    
    module Watir
      module Container
        def g(*args)
          G.new(self, extract_selector(args).merge(:tag_name => "g"))
        end
    
        def gs(*args)
          GCollection.new(self, extract_selector(args).merge(:tag_name => "g"))
        end
      end
    
      class G < Element
      end
    
      class GCollection < ElementCollection
        def element_class
          G
        end
      end
    end
    

    根据您使用的框架等,您可以将其放入文件中并在测试代码的早期需要该文件,或者将其放入自动加载的目录中的文件中。..

    例如我使用 Cucumber,所以我创建了一个名为 custom_element_support.rb 的文件,其中包含该代码,并将其放入 features/support 目录中,cucumber 将在启动时自动加载它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多