2017-10-12 20 views
0

我有以下的HTML代碼上我試圖運行我的硒測試WebElement.findElement方法是在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>

硒的Java代碼如下所示:

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

    } 

我期待的結果如下:
重複-21 Duplica TE-22重複-23
重複-22

但我得到這個結果:
原始-21原廠-22原廠-23
原始-12

難道我做錯了什麼嗎?

回答

4

你的問題是,//讓你回到從頂部根元素搜索。

這意味着

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

一樣好,因爲

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

如果你需要搜索只在當前元素內,那麼你應該使用

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

謝謝你的澄清。這工作。 – Animesh