如何确定一个 WebElement 是否是另一个 WebElement 的子元素?

软件测试 硒2
2022-01-19 22:08:13

有没有一种简单的方法可以从另一个元素中找到子元素?我们有一组包含许多模块的容器,我想确保它们显示在正确的位置。

API似乎只有以下方法:

webElement.findElement(s).(By by);

是否有一种简单的方法可以执行以下操作:

webElement.findElement(s)(WebElement webElement);
3个回答

您只能找到这样的元素的子元素:

IWebElement parent = FindElement(...); //However you want to find the element

IWebElement childDivs = parent.FindElements(By.XPath("div"));

这会为您找到该父元素的所有子 div,您可以调整 xpath 以获得您想要的任何内容。

如果您已经有了孩子并且想要找到父母,您可以执行类似的操作:

IWebElement child = FindElement(...); //However you want to find the element

IWebElement parent = child.FindElements(By.XPath(".."));

然后,您可以进行任何您想要确保父元素是您期望的元素的验证。

我不知道将确定一个元素是否是另一个元素的 WebDriver API。这是一个选项:确定两个元素的 XPath,然后比较 XPath 以确定父级。

您可以使用 Javascript 来确定元素的 XPath。参见例如http://snippets.dzone.com/posts/show/3754您可以使用WebDriver 的JavascriptExecutor界面来执行 Javascript。

我没有一个方便的函数来比较 XPath,但也许你可以自己找出那部分。

据说一旦找到注释基本上就被丢弃了,我将创建自己的 ElementLocatorFactory,它类似于 DefaultElementLocatorFactory。由于需要 SearchContext 来创建定位器(由 WebElement 实现),因此我基本上强制首先定位父元素,然后查找我的子元素并在需要的地方捕获异常。

我只是希望我错过了允许此功能的核心 API 中的某些内容。我还在谷歌代码库中添加了一个功能请求。