2017-10-04 3 views
-1

Comment obtenir un texte de xhtml

<div> 
 
    <fieldset> 
 
    <legend class="lheader">Section Information:</legend> 
 
    <span id="lblSectionInfo"> 
 
     Name: 
 
     <font style="font-weight:normal">rr</font> 
 
     <br> 
 
     Type: 
 
     <font style="font-weight:normal">Section Type  </font> 
 
     Section List: 
 
     <font style="font-weight:normal"> \t Yes  </font> 
 
     Status: 
 
     <font style="font-weight:normal"> 
 
     Section: 
 
     <font style="font-weight:normal">Section Condition</font> 
 
     <br> 
 
    </span> 
 
    </fieldset> 
 
</div>

Je dois obtenir le texte de la section d'information de la section ci-dessus de l'écran. J'ai essayé getText() et retourne ligne vide, essayé getAttribute("innerText") et il retourne N/A, essayé getAttribute("innerHTML") et il retourne N/A

Je ne sais pas comment je peux obtenir le texte complet ou un test individuel par exemple Le nom de la section doit renvoyer le texte Section "RR", etc. Le Xpath que j'utilise est correct. Toute aide est vraiment appréciée. Fyi, j'utilise Xpath ci-dessous pour obtenir le texte.

//div[@id = 'TestView5']//span[@id = 'lblSectionInfo'] 

Mon XPath est correct que je suis en mesure de mettre en évidence le texte complet sur cette section lors de l'utiliser par Selenium IDE.

+0

Il n'existe pas d'éléments en lecture seule en HTML. S'il vous plaît montrer les déclarations en entier – mplungjan

+0

Que passez-vous 'getText()'? Quel est votre sélecteur 'xpath'? –

+0

J'espère que cela va vous aider https://www.w3schools.com/xml/dom_element.asp – Anand

Répondre

1

Il est assez difficile de séparer ces champs car ils sont sous le même noeud de plage. Je peux voir deux solutions de contournement.
1. Utilisez l'index du noeud <font> comme ancre.

Name: "//span[@id='lblSectionInfo']/font[1]" 
Type: "//span[@id='lblSectionInfo']/font[2]" 
Section List: "//span[@id='lblSectionInfo']/font[3]" 


2. Utilisez JavaScript pour trouver les nœuds de texte pour obtenir les noms des champs, puis utilisez Sélénium pour trouver le nœud <font> pour obtenir leurs valeurs. Enfin, les mapper ensemble.

function getTextNode(rootNode) { 
    var nodes = rootNode.childNodes; 
    var fieldNames = []; 
    var count=0; 
    for (var i = 0; i < nodes.length; i++) { 
     if ((nodes[i].nodeType == Node.TEXT_NODE)) { 
      if(nodes[i].textContent.trim().indexOf(':')>0) { 
       let text = nodes[i].textContent.trim(); 
       fieldNames[count] = text.substring(0,text.length-1); 
      }   
     } 
    } 
    return fieldNames; 
} 
+0

La première solution de contournement fonctionne parfaitement pour moi. Thnx Buaban. – reena