嵌套的findElement,其中第一个是xpath,第二个是css,工作不按预期

时间:2014-11-04 05:27:40

标签: css selenium xpath selenium-webdriver

以下是我的html源代码的样子。

      <tr>
        <td class='first'>User Name</td>
        <td class='last'>
          <input/>
        </td>
      </tr>

现在,当我试图找到输入标签时,我错误地写了我的代码,如

driver.findElement(By.xpath("//tr/td[@class='last']")).findElement(By.cssSelector("td.last>input"))

它成功找到了输入标签,这对我来说似乎有点混乱,因为在我的第一个findElement中我已经到达td标签现在再次在第二个findElement中我从相同的td标签开始。我认为它应该抛出NoSuchElement异常。 我再次使用By方法的不同组合尝试了它,但它无法找到并触发NoSuchElement异常。即使我尝试过如下所示,也解决了NoSuchElement异常:

driver.findElement(By.xpath("//tr/td[@class='last']")).findElement(By.cssSelector("td.last"))

任何人都可以帮助我解决这种异常行为的原因,第一种情况是成功找到输入元素。

1 个答案:

答案 0 :(得分:1)

您的代码基本上是正确的。而且,这确实是一种正常行为。

 driver.findElement(By.xpath("//tr/td[@class='last']")).findElement(By.cssSelector("td.last>input"))

第一个“findElement”部分找到 td类,其类为“last”。现在,第二个“findElement”必须找到位于元素下的元素,该元素位于第一个“findElement”部分。而且,这正是它的作用。 cssselector指向 td类下的“input”标记,类为“last”。你在哪里开始它并不重要。事实上,重要的是找到的元素只有“输入”

希望这会有所帮助。!!