2010-07-15 6 views
1

J'utilise Watir pour écrire des tests pour une application web. J'ai besoin d'obtenir le texte 'Bishop' du HTML ci-dessous mais je n'arrive pas à comprendre comment le faire.comment accéder à cet élément

<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 me dit que le XPath est:

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() 

, mais je ne peux pas formater le element_by_xpath pour le ramasser.

Répondre

1

Vous devriez pouvoir accéder droit au paragraphe loin si c'est unique:

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

Voir Peut-être que vous avez HTML Elements Supported by Watir

+0

désolé oublié de mentionner ce n'est pas unique – ryanthescot

+0

Essayez d'accéder au paragraphe d'abord en utilisant xpath. Utilisez ensuite la méthode .html pour voir ce qu'il y a dans le paragraphe. Peut-être que vous naviguez vers un mauvais paragraphe. – katmoon

+0

ne sais pas ce que vous voulez dire ici. quand j'ai essayé le code ci-dessus, j'ai juste été incapable de localiser l'élément par la classe "wpFieldValue". – ryanthescot

0

Essayez

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

EDIT:

Peut-être que cela fonctionnera

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

Et vérifier si l'identifiant de durée est constante

+0

merci pour la réponse, je l'ai essayé, mais il ne semble pas retourner le texte: bleh = @@ ie.element_by_xpath ("// durée [@ id = 'dnn_ctr353_Main_ctl00_ctl00_ctl00_ctl07_Field_048b9dfa-bc64-42e4-8bd5b45385e5f45b_view_value']/p/texte() ") \t \t \t \t met bleh ce juste retourne des espaces – ryanthescot

+0

essayé avec la définition du chemin mais nous avons eu cette erreur: NoMethodError: méthode non définie texte » pour nul: NilClass. il semble juste ne pas vouloir ramasser l'élément. il doit sûrement y avoir un moyen de le faire – ryanthescot

0

un espace supplémentaire à la fin du nom?

<p class="wpFieldValue "> 
+0

l'espace est là dans le HTML donc je ne pense pas que cela devrait importer? – ryanthescot

+0

prendre l'espace a fonctionné comme vous l'avez suggéré. cela semble un peu étrange pour moi puisque l'espace est dans le HTML, mais merci pour votre aide – ryanthescot

0

Essayez l'un de ces (travaillé pour moi, s'il vous plaît noter l'espace de fuite après wpFieldValue dans le premier exemple):

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

merci - j'ai réussi à le faire fonctionner en faisant ce que katmoon suggéré. étrangement, je devais prendre l'espace arrière pour que cela fonctionne – ryanthescot

0

Il semble en temps d'exécution le style DIV changer NONE à bloc.

Donc dans ce cas, nous avons besoin de recueillir le texte (source entière ou DIV Source) et recueillera la valeur du texte

Exemple:

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 

Le code ci-dessus est la l'échantillon un résoudra votre problème.

Questions connexes