как получить доступ к этому элементу - PullRequest
1 голос
/ 15 июля 2010

Я использую Watir, чтобы написать несколько тестов для веб-приложения.Мне нужно получить текст «Епископ» из приведенного ниже HTML-кода, но я не могу понять, как это сделать.

<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 ]

1 голос
/ 15 июля 2010

Вы сможете сразу получить доступ к абзацу, если он уникален:

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

См. HTML-элементы, поддерживаемые Watir

0 голосов
/ 16 июля 2010

Кажется, что во время выполнения стиль 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

Приведенный выше код является примером, который решит вашу проблему.

0 голосов
/ 15 июля 2010

Попробуйте один из них (сработало для меня, пожалуйста, обратите внимание на пробел после 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"
0 голосов
/ 15 июля 2010

Может быть, у вас есть дополнительный пробел в конце имени?

<p class="wpFieldValue ">
0 голосов
/ 15 июля 2010

Попробуйте

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

EDIT:

Может быть, это будет работать

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

И проверьте, является ли идентификатор диапазона постоянным

...