如何访问此元素

时间:2010-07-15 09:58:58

标签: ruby xpath watir

我正在使用Watir为Web应用程序编写一些测试。我需要从下面的HTML中获取文本'Bishop',但无法弄清楚如何去做。

<div id="dnn_ctr353_Main_ctl00_ctl00_ctl00_ctl07_Field_048b9dfa-bc64-42e4-8bd5-b45385e5f45b_view" style="display: block;">
   <div class="workprolabel wpFieldLabel">
    <span title="Please select a courtesy title from the list.">Title</span>&nbsp;<span class="validationIndicator wpValidationText"></span>
   </div>
   <span class="wpFieldViewContent" id="dnn_ctr353_Main_ctl00_ctl00_ctl00_ctl07_Field_048b9dfa-bc64-42e4-8bd5-b45385e5f45b_view_value"><p class="wpFieldValue ">Bishop</p></span>
  </div>

Firebug告诉我xpath是:

html/body/form/div[5]/div[6]/div[2]/div[2]/div/div/span/span/div[2]/div[4]/div[1]/span[1]/div[2]/span/p/text()

但是我无法格式化element_by_xpath以获取它。

5 个答案:

答案 0 :(得分:1)

如果该段落是唯一的,您应该能够立即访问该段落:

my_p = browser.p(:class, "wpFieldValue ")
my_text = my_p.text

请参阅HTML Elements Supported by Watir

答案 1 :(得分:0)

尝试

//span[@id='dnn_ctr353_Main_ctl00_ctl00_ctl00_ctl07_Field_048b9dfa-bc64-42e4-8bd5b45385e5f45b_view_value']//text()

编辑:

也许这会起作用

path = "//span[@id='dnn_ctr353_Main_ctl00_ctl00_ctl00_ctl07_Field_048b9dfa-bc64-42e4-8bd5b45385e5f45b_view_value']/p";
ie.element_by_xpath(path).text

并检查span的id是否为常数

答案 2 :(得分:0)

也许你在名字的末尾有一个额外的空间?

<p class="wpFieldValue ">

答案 3 :(得分:0)

尝试其中一个(为我工作,请注意第一个示例中wpFieldValue之后的尾随空格):

browser.p(:class => "wpFieldValue ").text
#=> "Bishop"

browser.span(:id => "dnn_ctr353_Main_ctl00_ctl00_ctl00_ctl07_Field_048b9dfa-bc64-42e4-8bd5-b45385e5f45b_view_value").text
#=> "Bishop"

答案 4 :(得分:0)

似乎在运行时THE DIV风格将NONE改为BLOCK。

所以在这种情况下我们需要收集文本(整个源或DIV源)并从文本中收集值

例如:

text=ie.text

particular_div=text.scan(%r{div id="dnn_ctr353_Main_ctl00_ctl00_ctl00_ctl07_Field_048b9dfa-bc64-42e4-8bd5-b45385e5f45b_view" style="display: block;(.*)</span></div>}im).flatten.to_s

particular_div.scan(%r{ <p class="wpFieldValue ">(.*)</p> }im).flatten.to_s

以上代码是解决问题的示例。