2016-12-16 1 views
0

Ich tring, um den Wert von Excel zu Xpath übergeben, aber ich bekomme keineSuchElementFoundException.Wie man contains() Methode dynamisch in Selen macht

Dies ist der Code:

public String accountBalance(String accountNameToFind) 
{ 
    String accountBalance = null; 
    accountBalance = driver.findElement(By.xpath("//*[contains(text(),'" + accountNameToFind + "')]/following-sibling::td")).getText(); 
    return accountBalance; 
} 

HTML:

<tr> 
    <th scope="row" class=""> 
     SDRSP 
     <sup>2</sup> - <span class="td-copy-nowrap">1253 3292AUS</span> 
     <strong> 
      <a href="servlet/ca.tdbank.banking.servlet.SiteTransferOutServlet?dest=BROKER" class="td-link-standalone td-link-standalone-secondary"> 
       <span class="td-copy-nowrap"> 
        WebBroker 
        <span class="td-link-icon">›</span> 
       </span> 
      </a> 
     </strong> 
    </th> 
    <td class="td-copy-align-right"> 
     $10,000.00 
    </td> 
    <td class="td-copy-align-centre"> 
     &nbsp; 
    </td> 
</tr> 
+0

Beispiel HTML-Beispiel für Zielelement anzeigen – Andersson

+0

Entschuldigung, aber ich kann die Webseite aufgrund der Unternehmensrichtlinien nicht anzeigen. –

+0

Nicht die vollständige Quelle, sondern nur 'HTML' des Zielelements. Sie können vereinfachen it- sensible Daten entfernen .. – Andersson

Antwort

1

Wenn Ihr Element innerhalb frame befindet, müssen Sie zuerst, um es zu wechseln und dann Element Griff:

driver.switchTo().frame("frame_ID"); 
accountBalance=driver.findElement(By.xpath("//*[contains(text(),'"+accountNameToFind+"')]/following-sibling::td")).getText(); 
...some other actions... 
driver.switchTo().defaultContent(); 

Wenn Ihr Rahmen kein id Attribut hat, können Sie versuchen, ein anderes Attribut zu verwenden tes, z.B. class Name:

driver.switchTo().frame(driver.findElement(By.cssSelector("frame.frameClassName"))); 
+0

Ich habe es funktioniert nicht –

+0

Hast du irgendwelche Ausnahmen bekommen? – Andersson

0

Ihre Funktion sollte wie folgt vereinfacht werden.

public String accountBalance(String accountNameToFind) 
{ 
    return driver.findElement(By.xpath("//th[contains(text(),'" + accountNameToFind + "')]/following-sibling::td")).getText(); 
} 

I ersetzt * mit th im XPath, weil ich gehe davon aus, dass die th das einzige Element sein wird, die Sie verwenden möchten. Der accountName kann an anderer Stelle auf der Seite vorhanden sein und Probleme verursachen.

Wenn dies in einem Frame/Iframe ist, müssen Sie zuerst wie in @ Anderssons Antwort zum Frame wechseln.

Dies kann ein Fall sein, in dem dieser Teil der Seite dynamisch ist, so dass Sie möglicherweise warten müssen, bis das Element sichtbar ist, bevor Sie versuchen, die Daten zu scrappen. Siehe WebDriverWait mit ExpectedConditions.elementToBeVisible().

Verwandte Themen