2017-10-12 21 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