как получить доступ к этому элементу

Я использую 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, чтобы его подобрать.


person ryanthescot    schedule 15.07.2010    source источник


Ответы (5)


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

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

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

person katmoon    schedule 15.07.2010
comment
Попробуйте сначала получить доступ к абзацу, используя xpath. Затем используйте метод .html, чтобы увидеть, что находится внутри абзаца. Возможно, вы переходите не к тому абзацу. - person katmoon; 15.07.2010
comment
не уверен, что вы имеете в виду здесь. когда я попробовал код выше, я просто не смог найти элемент по классу wpFieldValue. - person ryanthescot; 15.07.2010
comment
Попробуйте без xpath, как показано ниже, и посмотрите, не можете ли вы по-прежнему получить доступ к абзацу: - person katmoon; 15.07.2010
comment
гений - это сработало. также нужно было место в конце, как вы сказали. Спасибо большое. - person ryanthescot; 15.07.2010

Пытаться

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

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

person pablochan    schedule 15.07.2010
comment
спасибо за ответ, я пробовал, но он не возвращает текст: bleh = @@ie.element_by_xpath(//span[@id='dnn_ctr353_Main_ctl00_ctl00_ctl00_ctl07_Field_048b9dfa-bc64-42e4-8bd5b45385e5f45b_view_value']/p/text() ) ставит bleh это просто возвращает пробел - person ryanthescot; 15.07.2010
comment
попробовал с установкой пути, но получил эту ошибку: NoMethodError: неопределенный метод «текст» для nil: NilClass. просто кажется, что он не хочет подбирать элемент. обязательно должен быть способ сделать это - person ryanthescot; 15.07.2010

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

<p class="wpFieldValue ">
person katmoon    schedule 15.07.2010
comment
пробел есть в html, поэтому я не думаю, что это имеет значение? - person ryanthescot; 15.07.2010
comment
удаление пробела сработало, как вы предложили. это кажется мне немного странным, так как пробел находится в html, но спасибо за вашу помощь - person ryanthescot; 15.07.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"
person Željko Filipin    schedule 15.07.2010
comment
спасибо - мне удалось заставить его работать, сделав то, что предложил Катмун. странно, мне пришлось убрать конечный пробел, чтобы он работал - person ryanthescot; 15.07.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

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

person Jazzezravi    schedule 16.07.2010