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

标签 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"))

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

最佳答案

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

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

第一个“findElement”部分定位了类为“last”的td 类。现在,第二个“findElement”必须定位位于第一个“findElement”部分的元素下方的元素。而且,这正是它的作用。 cssselector 指向 td class with class 'last' 下的 "input" 标签。从哪里开始并不重要。事实上,重要的是定位元素只是“输入”

希望这对您有所帮助!

关于css - 嵌套的 findElement,其中第一个是 xpath,第二个是 css,没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26728305/

相关文章:

c# - 如何从 Chrome 驱动程序(Selenium Web 驱动程序 C#)中分离 Chrome 浏览器

selenium - CSS 和 XPath 选择器有什么区别?就跨浏览器测试的性能而言,哪个更好?

jquery - 使用滚动变量来增加元素的高度?

html - IE7的 float 权属性

css - 位置 div 箭头

xml - xpath高级语法困惑

xml - XSL 转换后删除空元素

html - 为什么 Chrome 80 会导致这个 grid-template-rows : auto problem

java - 元素未获得焦点且无法单击

javascript - Protractor 如何点击空白处