2017-06-28 4 views
0

ich habe folgende HTML in einer SeiteWebDriver getText keinen sinnvollen Wert zurückkehr

<div class="mst_updt" style=""> 27/06/2017 12:02:31 </div> 

Ich versuche, den dynamischen Datumswert zwischen den divs zu extrahieren:

WebElement webElement =driver.findElement(By.cssSelector(".mst_updt")); 

String text = webElement.getText(); 
System.out.println("i am text : " + text); 

System.out.println("Most read 1 : " + webElement.getText()); 

String a = driver.findElement(By.cssSelector(".mst_updt")).getText(); 
System.out.println("Most read 2 : " + a); 
System.out.println(webElement); 

Boolean isTheTextPresent = driver.getPageSource().contains("mst_updt"); 
System.out.println("And did we find the string ? : " + isTheTextPresent); 

Sie sehen, ich bin versuche verschiedene Methoden, hier sind die Ergebnisse, die ich bekomme, warum kann ich nicht das Datum und die Zeit extrahieren ??

ich bin Text:

Most 1 lesen:

Die meisten 2 lesen:

[[FirefoxDriver: firefox auf JEDEM (e4a9c548-6146-4685-9944-6b5d51308bff)] -> css selector: .mst_updt]

Und haben wir die Saite gefunden? : Die Antwort auf Ihre Frage wahr

Voll-Code, die .. ist

<div class="content"> 
    <div role="main" class="content-inner content-full-width"> 
     <div class="main-content"> 
      <section class="component-list"> 
      <div class="section group"> 
       <div class="col-lrg span-lrg_1_of_3"> 
    <div class="component-weekly-wrap"> 
     <header class="header-weekly-wrap"> 
      <h4 itemprop="name"> 
       <a class="section-title-link" href="example.com/static/survey-panel">Computer Survey Panel</a> 
      </h4> 
     </header> 
     <article> 
      <a href="example.com/static/survey-panel"><img alt="" src="/w-images/fa8edbd1-2c78-4415-9abf-334f7087ff8b/2/CTGRS17OA344213-370x229.jpg" /></a> 
      <div class="col-inner weekly-wrap-details"> 
        <p><p>Join our <a href="example.com/static/survey-panel" target="_blank"><strong>Research Survey Panel</strong></a> and earn an Amazon voucher for each survey you complete!</p> 
<p><strong><a href="example.com/static/survey-panel">Find out more</a></strong></p></p> 
      <!--<a class="btn download" href="#">More information</a> --> 

      </div> 
      </article> 
    </div> 
</div> 
       <!--most read homepage updated START--> 
<div class= "mst_updt" style="display:none;"> 
28/06/2017 12:38:15 
</div> 
<!--most read homepage updated END--> 
<div class="col-lrg component-list-most-read span-lrg_2_of_3"> 
    <div class="col-inner component-most-read"> 
     <header class="header-most-read"> 
      <h4 itemprop="name">Most read</h4> 
     </header> 
     <div class="ol"> 
      <ol> 
       <li> 

       </li> 
       <li> 

       </li> 
       <li> 

       </li> 
       <li> 

       </li> 
       <li> 


       </li> 
      </ol> 
     </div> 
    </div> 
</div> 

      </div> 
     </section> 
     </div> 
    </div> 
</div> 
+0

findElement „Finden Sie die ** erstes ** WebElement mit der angegebenen Methode. " wie die Dokumentation sagt. Also: Gibt es eine Chance, dass es mehrere divs mit dieser Klasse gibt und die erste leer ist? Sie könnten es testen, indem Sie findElements (Plural) ausführen und die Größe des Ergebnisses überprüfen, das Sie erhalten. –

+1

Was gibt es zurück, wenn Sie 'element.getAttribute (" innerHTML ") verwenden;'? –

+0

Danke Rafal, das hat es gelöst. sowohl by.css.selector und by.xpath Vielen Dank Verwendung \t String a = driver.findElement (By.cssSelector() "mst_updt ") getAttribute (" innerHTML-."); \t Zeichenfolge b = driver.findElement (By.xpath ("// html/body/div [3]/div [2]/div [7]/div/div/Abschnitt/div/div [2]")) .getAttribute ("innerHTML"); \t System.out.println ("Meist gelesen 2:" + a); \t System.out.println ("Meist gelesen 3:" + b); –

Antwort

0

die Lösung geliefert wurde getAttribute‌​("innerHTML");

s String a = driver.findElement(By.cssSelector(".mst_updt")).getAttribute‌​("innerHTML"); 

String b = driver.findElement(By.xpath("//html/body/div[3]/div[2]/div[7‌​]/div/div/section/di‌​v/div[2]")).getAttri‌​bute("innerHTML"); 

System.out.println("Most read 2 : " + a); 
System.out.println("Most read 3 : " + b); 
1

Hier helfen sollte:

einen bestimmten div zu lokalisieren Text mit class Attribut erhalten müssen vermieden werden. Class Attribut wird nach Bedarf auf mehrere Div-Tags angewendet. Sie können in Erwägung ziehen, einen anderen Locator zu verwenden, vorzugsweise xpath oder css, um dieses eindeutige div-Tag zu identifizieren und die Methode getText() zum Abrufen des Texts zu verwenden.

Hier in diesem Fall, wie Sie das einzelne Div-Tag kopiert haben, wäre es schwer, Ihnen zu helfen. Sie können jedoch in Erwägung ziehen, ein xpath zu konstruieren, das HTML-DOM zu durchlaufen, indem Sie an ein id oder name-Attribut auf der übergeordneten Ebene binden und dann auf die class-Eigenschaft dieses div zugreifen.

+0

haben mehr Code-Snippet hinzugefügt. habe den xpath versucht: Zeichenfolge a = driver.findElement (By.xpath ("// html/body/div [3]/div [2]/div [7]/div/div/Abschnitt/div/div [2] ")). getText(); aber das gleiche Ergebnis erhalten. –

+0

@MarkH Können Sie die URL teilen, wenn es sich um eine öffentliche URL handelt? Vielen Dank – DebanjanB

0

Versuchen Sie diese Xpath, wenn das funktioniert, bedeutet es, dass die Kennung, die Sie verwenden, Ihnen falsches Element gibt. Rafał Laskowski

ich konnte den Wert erhalten, indem XPath von cssSelector benötigte Rückkehr sie unter Verwendung:

//*[contains(text(),'27/06/2017')] 
Verwandte Themen