2017-10-12 1 views
0

J'ai le code HTML suivant sur lequel je suis en train d'exécuter mon test de séléniumméthode WebElement.findElement est élément trouver sous la portée WebDriver

<html> 
 

 
<head></head> 
 

 
<body> 
 
    <table id="Original"> 
 
    <tr> 
 
     <td>Original-11</td> 
 
     <td>Original-12</td> 
 
     <td>Original-13</td> 
 
    </tr> 
 
    <tr> 
 
     <td>Original-21</td> 
 
     <td>Original-22</td> 
 
     <td>Original-23</td> 
 
    </tr> 
 
    <tr> 
 
     <td>Original-31</td> 
 
     <td>Original-32</td> 
 
     <td>Original-33</td> 
 
    </tr> 
 
    </table> 
 

 
    <br/><br/> 
 

 
    <table id="Duplicate"> 
 
    <tr> 
 
     <td>Duplicate-11</td> 
 
     <td>Duplicate-12</td> 
 
     <td>Duplicate-13</td> 
 
    </tr> 
 
    <tr> 
 
     <td>Duplicate-21</td> 
 
     <td>Duplicate-22</td> 
 
     <td>Duplicate-23</td> 
 
    </tr> 
 
    <tr> 
 
     <td>Duplicate-31</td> 
 
     <td>Duplicate-32</td> 
 
     <td>Duplicate-33</td> 
 
    </tr> 
 
    </table> 
 
</body> 
 

 
</html>

Le code java de sélénium ressemble à ceci:

public static void main(String[] args) throws Exception 
    { 
     System.setProperty("webdriver.chrome.driver", System.getProperty("user.dir") + "/src/test/drivers/chromedriver.exe"); 

     WebDriver drv = new ChromeDriver(); 
     drv.get("C:/Users/MYUserName/git/er_test/SeleniumTestHtml.html"); 

     WebElement tableElement = drv.findElement(By.id("Duplicate")); 
     WebElement rowElement = tableElement.findElement(By.xpath("//tr[2]")); 
     WebElement cellElement = rowElement.findElement(By.xpath("//td[2]")); 
     System.out.println(rowElement.getText()); 
     System.out.println(cellElement.getText()); 

     drv.close(); 
     drv.quit(); 

    } 

J'attends le résultat suivant:
en double-21 Duplica te-22 en double-23
en double-22

mais je reçois ce résultat:
Original 21 Original-22 Original 23
Original 12

que je fais quelque chose de mal ici?

Répondre

4

Votre problème est que // vous fait revenir à la recherche de haut élément racine.

Ce qui signifie

WebElement rowElement = tableElement.findElement(By.xpath("//tr[2]")); 

est aussi bon que

WebElement rowElement = driver.findElement(By.xpath("//tr[2]")); 

Si vous devez rechercher uniquement dans l'élément en cours, alors vous devez utiliser

WebElement rowElement = tableElement.findElement(By.xpath(".//tr[2]")); 
+0

Merci pour la clarification. Ça a marché. – Animesh