如何使用watir webdriver

时间:2016-02-05 16:08:39

标签: ruby watir watir-webdriver

我有以下HTML,我需要获取大胆标记之外的文本。例如'Submitted At:'我需要获取后面的时间戳。你会看到'Submitted At:被粗体标签包围,时间戳跟随,我无法检索它。

<body>
    <h2> … </h2>
    <b> … </b>
     jenkins
    <br></br>
    <b> … </b>
    <br></br>
    <b> … </b>
    <a href=""> … </a>
    <br></br>
    <b> … </b>
    <br></br>
    <b>
        Submitted At:
    </b>
     29-Jan-2016 17:12:24

我尝试过的事情。

@ browser.body.text.split( “\ n” 个)

@ browser.body.split( “\ n” 个)

body_html = Nokogiri :: HTML.parse(@ browser.body.html)

body_html.xpath( “// //体B”)。文本

  • 返回:“用户:JobName:JobConf:作业ACL:允许所有用户提交时间:发布时间:完成时间:状态:分析此作业”

我已经尝试了几个东西,比如xpath,普通的旧文本检索,但我无法得到我需要的东西。我也做了几次搜索,找不到我需要的东西。

3 个答案:

答案 0 :(得分:0)

首先,html失去了类和ID总是会带来挑战。当您想要访问仅在body标签中的文本时,情况会更糟。 在这个特定的例子中,这应该工作:

flushdemo<-function() { cat("Please select the file folder where you would like the information to be populated\n") flush.console() file <- choose.dir() return(file) } flushdemo()

答案 1 :(得分:0)

  1. InnerHtml实际上就是它 - 它在HTMLstart和结束标记中。因此,您实际上正在查看外部标记的InnerHtml - <body>

  2. .text标记的<Body>会为您提供全文。如果标签将是动态索引是不会工作的。因此,如果您知道时间戳长度总是相同的,请获取整个文本,根据此字符串'Submitted At:'分隔/取消串,以达到最大时间戳长度。如果可能发生变化,这将是稳定的解决方案,而不是硬编码的索引值。即从该标签开始的拾取子串到时间戳的最大长度。

答案 2 :(得分:0)

HTML似乎具有以下结构:

  • <b>标记,即字段描述和
  • 以下文本节点,即字段值。

Watir只能返回所有元素的文本节点的串联。因此,它不能很好地处理这种需要将文本节点分开的结构。虽然您可以解析连接的字符串,但根据可能的字段描述/值,它可能容易出错。

因此,我建议使用Nokogiri解析HTML,因为它可以返回单个文本节点。这看起来像是:

html = browser.html
doc = Nokogiri::HTML(html)
p doc.at_xpath('//b[normalize-space(text()) = "Submitted At:"]
                 /following-sibling::text()[1]').text.strip
#=> "29-Jan-2016 17:12:24"

这里我们使用XPath来查找包含相关字段描述的<b>标记,“提交时间:”。从那个节点,我们找到了文本节点,即“紧随其后的”2016年1月29日17:12:24“。