WebElement.findElement方法是在WebDriver范围下查找元素

Ani*_*esh 0 java selenium webdriver

我有以下HTML代码,我试图运行我的selenium测试

<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>
Run Code Online (Sandbox Code Playgroud)

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

    }
Run Code Online (Sandbox Code Playgroud)

我期待如下结果:
重复-21重复-22重复-23
重复-22

但我得到了这个结果:
Original-21 Original-22 Original-23
Original-12

我在这里做错了吗?

Tar*_*ani 8

你的问题是//让你回到顶层根元素搜索.

意思是

WebElement rowElement = tableElement.findElement(By.xpath("//tr[2]"));
Run Code Online (Sandbox Code Playgroud)

一样好

WebElement rowElement = driver.findElement(By.xpath("//tr[2]"));
Run Code Online (Sandbox Code Playgroud)

如果您只需要在当前元素内搜索,那么您应该使用

WebElement rowElement = tableElement.findElement(By.xpath(".//tr[2]"));
Run Code Online (Sandbox Code Playgroud)