如何使用Watir访问没有属性的子文本

时间:2013-01-09 09:18:23

标签: watir watir-webdriver

以下html

<p>
<strong>Name:</strong>
12121
</p>

如何使用Watir访问“12121”文本?

3 个答案:

答案 0 :(得分:3)

要获取子文本12121,请使用正则表达式。
gsub执行搜索和替换操作。它将搜索所有非数字字符(/ \ D /)并替换为给定的字符串。 在这种情况下,我们不会给任何字符串替换。


= browser.p.text.gsub(/ \ D /,“”)
=&GT; “12121”

答案 1 :(得分:1)

browser.p.text返回"Name: 12121"browser.p.strong.text返回"Name:"

> browser.p.text
 => "Name: 12121" 

> browser.p.strong.text
 => "Name:" 

要获得12121String个方法,可以使用String#split,然后String#lstrip

> long = b.p.text
 => "Name: 12121" 

> short = b.p.strong.text
 => "Name:" 

> long.split(short)
 => ["", " 12121"] 

> long.split(short)[1]
 => " 12121" 

> long.split(short)[1].lstrip
 => "12121"

答案 2 :(得分:1)

虽然我认为解析段落元素文本是最简单的,但如果你真的只想获得文本节点,你可以使用javascript。

如果你知道文本将始终是段落的最后一部分,你可以这样做:

browser.execute_script("return arguments[0].lastChild.nodeValue", browser.p)
#=> "12121"

如果结构可以更改,并且您想要段元素的所有文本,而没有子元素的文本,则可以对其进行概括:

get_text_node_script = <<-SCRIPT
    var nodes = arguments[0].childNodes;
    var result = "";
    for(var i = 0; i < nodes.length; i++) {
        if(nodes[i].nodeType == Node.TEXT_NODE) {
            result += nodes[i].nodeValue; 
        }
    }   
    return result
SCRIPT

browser.execute_script(get_text_node_script, browser.p)
#=> "12121"