当前位置: 首页 > 面试题库 >

了解WebElement.findElement()和XPATH

缑泓
2023-03-14
问题内容

我想使用WebElement.findElement()API使用XPATH在父节点内定位一个节点//span[@class='child- class']。我以为这会让我回到<div>父母那边。但是,它将返回我在整个DOM树中找到的第一个。我使用了错误的XPATH吗?

我也曾尝试使用.//span[@class='child-class']XPATH,但这确实会返回任何东西。

谢谢。

更新:

给定下面的HTML,我想为子标题<span>和子日期定义一个定位器,<span>并使用WebElement.findElement()API对其进行定位,而不管父级是“
// a / li [1]”还是“ // a” / li [2]“

<a>
    <li> parent 1
        <div>
            <span class="child-title child-style">title 1</span>
            <span class="child-date child-style"> date 1</span>
            <span class="child-author">author 1</span>
        </div>
    </li>
</a>
<a>
    <li> parent 2
        <div>
            <span class="child-title child-style">title 2</span>
            <span class="child-date child-style"> date 2</span>
            <span class="child-author">author 3</span>
        </div>
    </li>
</a>
<a>
    <li> parent 3
        <div>
            <span class="child-title child-style">title 3</span>
            <span class="child-date child-style"> date 3</span>
            <span class="child-author">author 3</span>
        </div>
    </li>
</a>

我有一个WebElement parent2初始化,并使用位于"//a/li[2]"

WebElement child = parent2.findElement(By.xpath("//span[@class='child- author']")); 会给我“作者1”

WebElement child = parent2.findElement(By.xpath("span[@class='child- author']")); 会给我 NoSuchElementException


问题答案:

我的示例代码有2条评论

1-使用您发布的HTML,找不到xpath // a / li [2](我们只有3个元素带有// a / li [1])

2-假设我们有正确的代码,则需要了解Xpath中单斜杠和双斜杠之间的区别

a/b (single slash): select element that has "tag b" and "stands right after" an element that has "a tag"

例如:

<a>
    <b>
          <d>
               <c>
               </c>
          </d>
    </b>
</a>

a//b (double slash): select element that has "tag b" and is n-level-child an element that has "a tag"

例如:

<a>
    <c>
          <d>
               <b>
               </b>
          </d>
    </c>
</a>

所以,用你的代码

<a>
<li> parent 1
    <div>
        <span class="child-title child-style">title 1</span>
        <span class="child-date child-style"> date 1</span>
        <span class="child-author">author 1</span>
    </div>
</li>
</a>

如果要获取日期信息,应使用

WebElement parent = driver.findElement(By.xpath("//a/li"));
WebElement date = parent.findElement(By.xpath("div/span[contains(@class, 'child-date')]"));
WebElement date = parent.findElement(By.xpath("//span[contains(@class, 'child-date')]"));

代码

WebElement date = parent.findElement(By.xpath("span[contains(@class, 'child-date')]"));

将带出NoSuchElementException,因为[li]标签之后没有[span]标签

希望帮助



 类似资料:
  • 问题内容: 我曾经在页面上找到一个元素,但它返回,但是当我使用它时,它能够找到该元素并单击它。 我无法理解两个接口之间的区别。请帮助。 问题答案: 将使用元素作为搜索选择器的范围。这意味着它通常用于搜索子元素。 将使用驱动程序(即整个页面)搜索给定的选择器。 因此,特别是对于您的实例(我们将需要更多信息才能更准确地弄清楚它),很可能是您的选择器不匹配给定子代的任何子元素,但是当您尝试在整个实例中进

  • 问题内容: 我曾经在页面上找到一个元素,但是它返回,但是当我使用它时,它能够找到该元素并单击它。 我无法理解两个接口之间的区别。请帮助。 问题答案: 将使用元素作为搜索选择器的范围。这意味着它通常用于搜索子元素。 将使用驱动程序(即整个页面)搜索给定的选择器。 因此,特别是对于您的实例(我们将需要更多信息以更准确地弄清楚它),很可能是您的选择器与您给定子对象中的任何子对象都不匹配,但是当您尝试在整

  • 问题内容: 我对新功能和有一些疑问。 对于前者,从文档中: 返回性能计数器的值(以小数秒为单位),即 具有最高可用分辨率的时钟, 可测量较短的持续时间。它确实包括整个系统的睡眠时间。返回值的参考点是不确定的,因此仅连续调用的结果之间的差有效。 所有系统的“最高分辨率”是否相同?还是总是稍微依赖于例如我们使用的是Linux还是Windows? 问题来自这样一个事实:阅读文档说明:“并非所有系统都提供

  • 我正试图把我的头围绕在所有不同的日志记录工具(log4j、slf4j、logback、jcl等)和它们都做的事情上。 我知道slf4j是不同日志记录工具的一个门面,它使任何日志记录工具之间的切换变得很容易。但到了日志的话题,我就一头雾水了。我知道logback是log4j的后继者,在这篇文章中,它使用了“natively implements”这个词;那到底是什么意思。从我的理解是,日志与SLF4

  • 问题内容: 我正在尝试了解react-redux的connect方法及其作为参数的功能。特别是。 以我的理解,它的返回值将是一个从状态派生的对象(因为它存在于商店中),其键将作为道具传递给目标组件(应用了connect的组件)。 这意味着目标组件所消耗的状态与存储在商店中的状态可能具有截然不同的结构。 问:可以吗? 问:这是预期的吗? 问:这是反模式吗? 问题答案: 问: 答:是的 问: 是的,这

  • 有人能使用下面的示例数据解释JavaScript Truthy和Falsy吗?我读过其他线程,但仍然感到困惑。 根据我的理解,我认为var a=1 是唯一的真理,其余的都是虚假的-这是正确的吗?